[php] Ip adres controleren en wegschrijven

Pagina: 1
Acties:
  • 106 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • XippIX
  • Registratie: Augustus 2001
  • Niet online
Ik heb deze code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php 

$selectQuery=mysql_query("SELECT ipadres, datum  FROM ipcheck WHERE ipadres = '".$_SERVER['REMOTE_ADDR']."' AND datum = '".date("d-m-Y")."'");

if($result=mysql_num_rows($selectQuery) == 2)
    {
        echo "Sorry geen toegang";
    }
    
    else
    {
        mysql_query("INSERT INTO ipcheck(ipadres, datum) VALUES ('".$_SERVER['REMOTE_ADDR']."','".date("d-m-Y")."')");
        echo "welkom op de site";
        
    }
    
?>


dit script bekijkt het ip adres, en vervolgs mag de gebruiker de pagina maar 2x per dag bekijken, echter het ip adres wordt wel opgeslagen maar er wordt toch gewoon toegang gegeven, wat gaat er hier fout?


in de database wordt het zo opgeslagen:

ip_id ipadres datum
0 mijn ip 19-05-2005

meerdere ip adressen worden niet opgeslagen, alleen mijn eigen

Acties:
  • 0 Henk 'm!

  • Osiris
  • Registratie: Januari 2000
  • Niet online
code:
1
if($result=mysql_num_rows($selectQuery) == 2)


Mag/kan dat wel zo?

Acties:
  • 0 Henk 'm!

  • XippIX
  • Registratie: Augustus 2001
  • Niet online
dat is de vraag? waarom wel/niet?

owja, en natuurlijk zit er nog wel een database connectie boven, maar niet echt relevant om te noemen lijkt mij :)

[ Voor 65% gewijzigd door XippIX op 19-05-2005 23:34 ]


Acties:
  • 0 Henk 'm!

  • André
  • Registratie: Maart 2002
  • Laatst online: 12-09 14:32

André

Analytics dude

Volgens mij kan het dan beter zo:
code:
1
2
$result = mysql_num_rows($selectQuery);
if($result == 2)

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

of als je die $result niet meer nodig hebt:
PHP:
1
if (mysql_num_rows($selectQuery) == 2){}


maar je hebt het over 2 views per dag, geen idee hoe jouw tabel eruit ziet, maar let er wel even op dat je als je primary key over die twee velden ligt dat een tweede insert niet mogelijk is. Wellicht is het handiger om er een extra veld bij te doen welke het aantal views die dag bij dat ip bijhoudt :)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ik vind dat je het sowieso maar raar aanpakt. Ik zou mijn tabel anders indelen, je hebt nu allerlei redundante zooi, en je krijgt rare fouten zoals dit. :) Ik zou een tabel maken die maar 3 velden heeft: ip (primary key), datum en een veld voor aantallen.

Als een gebruiker je site bezoekt, dan kijk je eerst of het IP al voorkomt in de tabel. Zo nee, dan maak je een record aan met één bezoek (dus het veld aantal is 1). Als het wel al bestaat, dan update je de tabel en zet je aantal op aantal + 1. Vervolgens hoef je voor je check alleen maar te kijken of het veld aantal voor dat IP kleiner is dan 2 (of 3, als je het selecten doet na het updaten), en dan ben je er. ;)
Osiris schreef op donderdag 19 mei 2005 @ 23:31:
code:
1
if($result=mysql_num_rows($selectQuery) == 2)


Mag/kan dat wel zo?
Mag en kan allebei, al geef ik persoonlijk in zo'n geval de voorkeur aan het gebruiken van meer haakjes:
PHP:
1
if ( ( $result = mysql_num_rows ( $selectQuery ) ) == 2 )

[ Voor 21% gewijzigd door NMe op 20-05-2005 00:11 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • André
  • Registratie: Maart 2002
  • Laatst online: 12-09 14:32

André

Analytics dude

En wat doe je als een gebruiker van IP wisselt? Ik weet niet of het superbelangrijk is dat een gebruiker maar 2 keer per dag kan inloggen?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

André schreef op vrijdag 20 mei 2005 @ 00:13:
En wat doe je als een gebruiker van IP wisselt? Ik weet niet of het superbelangrijk is dat een gebruiker maar 2 keer per dag kan inloggen?
Oh, wat dat betreft is het bekijken van REMOTE_ADDR sowieso niet waterdicht. Wanneer er via een proxy gesurft wordt, dan wordt REMOTE_ADDR mogelijk niet eens geset, dan moet je HTTP_VIA of zelfs nog een andere header hebben. IP-checks zijn AFAIK nooit helemaal waterdicht te krijgen. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • semicolon
  • Registratie: Mei 2004
  • Niet online
Je ID is 0? Staat in de tabel wel dat het ID de primaire sleutel is, + autonummering aan?
Heb je al geprobeert mysql_error() uit te poepen na de (insert)query?

[ Voor 41% gewijzigd door semicolon op 20-05-2005 09:35 ]

:D/-<

Pagina: 1