IP Controle uit Database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Matthijs A

Matthijs A

01/11/2010 16:00:07
Quote Anchor link
Beste phphulp gebruikers,

Vandaag heb ik een rating script geschreven. Alles ziet er goed uit en werkt prima, het enige probleem is alleen dat mensen zo vaak als ze willen kunnen stemmen. Dit wil ik voorkomen door het zelfde IP-adres te verbieden meer dan 1 maal te stemmen. Het verkrijgen van hun IP-adres gaat prima, echter kan ik wel wat hulp gebruiken met het extraheren van de IP-adressen uit de (mysql)database
Dit is het script dat ik heb geschreven:

Quote:
$IPadres = $_SERVER["REMOTE_ADDR"];

$ipquery = "SELECT INET_NTOA(ip), filmpjeid FROM ipadressen WHERE filmpjeid='$kijk'";
$ipresult = mysql_query($ipquery);

while($ipcontrole = mysql_fetch_array($ipresult)){
if (!$IPadres == $ipcontrole['INET_NTOA(ip)']){
echo "werkt".$ipcontrole['INET_NTOA(ip)'];
}
else {
echo "maar 1 keer stemmen";
}
}


Mijn vraag is dus:

Waarom werkt het controleren van het IP-adres tegen de verschillende adressen in de database niet, en hoe kan ik dit het beste oplossen?

In ieder geval bedankt voor jullie tijd

Groeten,
Matthijs A.
Gewijzigd op 01/11/2010 16:02:25 door Matthijs A
 
PHP hulp

PHP hulp

11/01/2025 16:34:40
 

01/11/2010 16:08:15
Quote Anchor link
Niet op ip bannen.
Soms zitten er meerdere mensen op hetzelfde ip.
Let ook SQL injections.
 
Aad B

Aad B

01/11/2010 16:13:26
Quote Anchor link
Je doet $IPadres = $_SERVER["REMOTE_ADDR"];
en vervolgens vergelijk je die met
if (!$IPadres == $ipcontrole['INET_NTOA(ip)']
Over de een ($IPadres) gaat geen functie en over ip lijkt wel een keer of twee de INET_NTOA functie te gaan. Wordt het dan geen appels met peren vergelijken. Wat is de zin van INET_NTOA? Laat het eens weg en vergelijk ip adres met ip adres
De functie is INET_NTOA is deprecated.

Overigens is de methode zo fout als het maar kan, wie zit er nu nog met 1 peecee op 1 ipnummer? Iedereen heeft thuis meerdere compu's en en hiermee beperk je het stemmen tot 1 persoon per huis. Ons studentenhuis heeft 17 peeceetjes.... en wat denk je van bedrijven?
Gewijzigd op 01/11/2010 16:15:46 door Aad B
 
Matthijs A

Matthijs A

01/11/2010 16:21:34
Quote Anchor link
Met $_SERVER["REMOTE_ADDR"]; krijg je een IP-adres dat in de vorm is geschreven die voor mensen makkelijk herkenbaar is (puntjes ertussen). Bij het schrijven van het IP-adres naar de mysql database herschrijf ik het ip naar de 'computer' vorm door middel van INET_ATON. Hierdoor wordt er op de lange termijn significant veel ruimte bespaart in de database, omdat hierdoor INT(10) voldoende is om een IP-Adres op te slaan. INET_NTOA schrijft het weer terug naar de orginele staat wanneer het uit de database komt.

Daarnaast is de website bedoelt voor jeugdige kijkers die het, naar mijn idee, niet erg zullen vinden om op school niet (meer) te kunnen stemmen. Ze hebben echter wel mogelijkheid om het thuis doen ("De website kan niet aansprakelijk gestelt worden voor eventuele ruzies met broertjes/zusjes"). De kinderen zullen geen hinder ondervinden van het moeten registeren op een website, waar sommige kinderen nog niet capabel genoeg voor zijn.
Gewijzigd op 01/11/2010 16:25:08 door Matthijs A
 
- SanThe -

- SanThe -

01/11/2010 16:25:18
Quote Anchor link
Niet zo
if (!.... == ....)

Maar zo
if (.... != ....)
 
Aad B

Aad B

01/11/2010 16:58:02
Quote Anchor link
wanneer op de lange termijn significant veel ruimte bespaard is zullen de functies INET_ATON en INET_NTOA verdwenen zijn uit php. Ze zijn nu al deprecated. Denk je dat het echt zinvol is om het zo te doen?.

Als je iets leuks aan het bouwen bent voor kinderen dan willen alle kinderen in een gezin meedoen en dan ben jij meedogenloos dat er maar 1 kan stemmen en dat doe je af met een volwassen leveringsvoorwaarde: "De website kan niet aansprakelijk gesteld worden voor eventuele ruzies met broertjes/zusjes"? Er staan hier inmiddels twee adviezen om het niet op ip nummer te doen....
Gewijzigd op 01/11/2010 16:58:43 door Aad B
 
Matthijs A

Matthijs A

01/11/2010 17:04:09
Quote Anchor link
Ik wil je bedanken voor je advies Aad B maar ik heb gekozen om het op deze manier te doen. Het zou fijn zijn als je jou expertise ook kon toepassen om in het script het probleem te vinden om hem werkend te maken.
 
Aad B

Aad B

01/11/2010 17:06:58
Quote Anchor link
Jammer en voor wat betreft je tweede vraag: SanThe heeft de oplossing al aangegeven.
 
Matthijs A

Matthijs A

01/11/2010 17:07:05
Quote Anchor link
Overigens ben ik druk bezig het IP adres te laten herschrijven d.m.v. 'inet_pton' en 'inet_ntop' die wel Iv6 zouden kunnen vertalen.

Toevoeging op 01/11/2010 17:09:15:

- SanThe - op 01/11/2010 16:25:18:
Niet zo
if (!.... == ....)

Maar zo
if (.... != ....)


Aad B op 01/11/2010 17:06:58:
Jammer en voor wat betreft je tweede vraag: SanThe heeft de oplossing al aangegeven.


Heeft niet geholpen helaas
 
- SanThe -

- SanThe -

01/11/2010 17:13:27
Quote Anchor link
Echo eens wat dan kan je zien of je wel krijgt wat je verwacht.
 

01/11/2010 17:14:09
Quote Anchor link
Matthijs A op 01/11/2010 17:04:09:
Ik wil je bedanken voor je advies Aad B maar ik heb gekozen om het op deze manier te doen. Het zou fijn zijn als je jou expertise ook kon toepassen om in het script het probleem te vinden om hem werkend te maken.


Mag ik je er dan ook nog even op wijzen dat ip blokkades makkelijk te omzeilen zijn en dat je een hele groep gebruikers benadeeld. Mensen die bijvoorbeeld Filternet (geloof ik) gebruiken zal je benadelen als je daar een aantal keer een ban op doet. Filternet gebruikt een aantal ip adressen, maar daarop gaan wel heel veel huishoudens.
Dus als jij denkt dat je één persoon blokkeerd, blokkeer je gelijk een hele groep.
 
Matthijs A

Matthijs A

01/11/2010 18:52:06
Quote Anchor link
Voor de geïnteresseerden, ik heb het op de volgende manier opgelost

Quote:
$adres = ip();

$ipquery = "SELECT INET_NTOA(ip), filmpjeid FROM ipadressen WHERE ip = 'INET_ATON($adres)' AND filmpjeid='$kijk'";
$ipresult = mysql_query($ipquery);
if (mysql_num_rows($result) == 0) {
echo "bedankt voor je stem";
//mysqlquery
}
else {
echo "Je hebt al een keer gestemt en er mag per filmpje maar 1 maal per computer gestemt worden";
}


Nogmaals bedankt voor jullie hulp
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.