login  Naam:   Wachtwoord: 
Registreer je!
 Forum

IP Opslaan

Offline Chilricky - 02/02/2007 15:46
Avatar van ChilrickyNieuw lid Ik wil dat als je je aanmeld dat dan je IP adres word opgeslagen.
Want dan kan ik het makkelijker bannen.
Ik ahd al iets geprobeerd maar dat doet het niet
Hier is de code:
  1. $query = mysql_query(" INSERT INTO leden (ip) VALUES ('".$_SERVER['REMOTE_ADDR']."') ");

20 antwoorden

Gesponsorde links
Offline letscode - 02/02/2007 15:46
Avatar van letscode HTML beginner zet er eens or die(mysql_error()); achter, dan krijg je nl de foutmelding te zien.
Offline Chilricky - 02/02/2007 15:48
Avatar van Chilricky Nieuw lid Hij slaat hem wel op in de DB maar hij maakt dan een aparte rij aan.
Hij moet in de rij bij diegene die zich geregistreerd heeft
Offline ikkedikke - 02/02/2007 15:49
Avatar van ikkedikke PHP expert kijk eens naar de UPDATE statements in de manual van Mysql.. dat moet jij hebben
Offline letscode - 02/02/2007 15:50 (laatste wijziging 02/02/2007 16:04)
Avatar van letscode HTML beginner dan moet je UPDATE gebruiken
voorbeeld:
  1. UPDATE tabelnaam SET ip='".$_SERVER['REMOTE_ADDR']."' WHERE ip='".$_SERVER['REMOTE_ADDR']."' LIMIT 1;


zoiets

[edit]Sorry hoor zie het nu pas [edit]
Offline Chilricky - 02/02/2007 15:51 (laatste wijziging 02/02/2007 15:53)
Avatar van Chilricky Nieuw lid Hij doet het niet.
Er moet tog nog iets voor
Offline Warbringer - 02/02/2007 15:51 (laatste wijziging 02/02/2007 15:52)
Avatar van Warbringer Onbekend $REMOTE_ADDR; gebruik ik altijd eigenlijk... die in de database proppen en klaar, of is da minder goed?
Offline Chilricky - 02/02/2007 15:55
Avatar van Chilricky Nieuw lid Ik snap het ff niet meer
Offline Thomas - 02/02/2007 16:01
Avatar van Thomas Moderator lol

  1. UPDATE tabelnaam
  2. SET ip
  3. WHERE ip='".$_SERVER['REMOTE_ADDR']."' LIMIT 1


- je update niets?
- je update het IP naar de waarde die het ip al heeft?

What the @#$^!?

Ik neem aan dat je in je leden-tabel ook meer gegevens opslaat?
Daarbij is een IP gekoppeld aan een lid.

Het lijkt mij zinnig om IP's die je bant in een aparte tabel op te slaan, eventueel met een lidnummer erbij ofzo...
Offline roelh - 02/02/2007 16:02
Avatar van roelh PHP gevorderde Hmm, je registreerd hem wanneer iemand zich aanmeld?
Want de query is goed, en een update is helemaal niet nodig hier zoals sommige dat zeggen.
Je moet hem wel in dezelfde query doen waar je de rest insert, anders krijg je een 2e rij ja.
Offline Chilricky - 02/02/2007 20:50
Avatar van Chilricky Nieuw lid
  1. UPDATE tabelnaam SET ip='".$_SERVER['REMOTE_ADDR']."' WHERE ip='".$_SERVER['REMOTE_ADDR']."' LIMIT 1;


Die doet het niet
Miss 1 x ip='".$_SERVER['REMOTE_ADDR']."' weg
Offline Simon - 02/02/2007 21:00
Avatar van Simon PHP expert
  1. UPDATE tabelnaam SET ip='".$_SERVER['REMOTE_ADDR']."' WHERE id='".$_SESSION['user']."' LIMIT 1;

als je met sessies werkt en het userid staat daarin...
Offline roelh - 02/02/2007 21:16
Avatar van roelh PHP gevorderde K vraag me eigenlijk af, en nog geen antwoord op.
Iemand registreerd zich, dandoe je INSERT en niet update lijkt me.
Dan voeg je toch METEEN zijn IP ermee in.
Dus waarom moet je dan updaten?
Bij het registreren kun je meteen zijn IP erinz etten?

Denk er wel aan, IP's veranderen nog weleens.
Dus als iemand inlogd controleer als zijn IP hetzelfde is als wat ind e DB staat, zoniet, dan WEL updaten.
Offline Chilricky - 03/02/2007 14:12
Avatar van Chilricky Nieuw lid Ja dat wil ik dat als iemand zich registreerd dat dan z'n Ip adres word opgeslagen
Offline X3ore - 03/02/2007 15:15 (laatste wijziging 03/02/2007 15:16)
Avatar van X3ore HTML interesse Zo invoegen als hij aanmeld

  1. <?php
  2.  
  3. if(getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")){
  4. $ip = getenv("HTTP_CLIENT_IP");
  5. }
  6. elseif (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")){
  7. $ip = getenv("HTTP_X_FORWARDED_FOR");
  8. }
  9. elseif (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")){
  10. $ip = getenv("REMOTE_ADDR");
  11. }
  12. elseif (isset($_SERVER["REMOTE_ADDR"]) && $_SERVER["REMOTE_ADDR"] && strcasecmp($_SERVER["REMOTE_ADDR"], "unknown")){
  13. $ip = $_SERVER["REMOTE_ADDR"];
  14. }
  15. else{
  16. $ip = "Onbekend";
  17. }
  18.  
  19. $insert = "INSERT INTO gebruikers (
  20. id,
  21. naam,
  22. ip
  23. )
  24. VALUES
  25. (
  26. '',
  27. '".$_POST['naam']."',
  28. '".$ip."')";
  29.  
  30. mysql_query($insert)or die(mysql_error());


En updaten gewoon zo dan toch zo

  1. <?php
  2. $update = "UPDATE gebruikers
  3. SET
  4. ip = '".$ip."'
  5. WHERE
  6. naam = '".$_COOKIE['naam']."'";
  7.  
  8. mysql_query($update)or die(mysql_error());?>


Offline Chilricky - 03/02/2007 19:42
Avatar van Chilricky Nieuw lid maar hij moet in de pagina aanmelden
Offline X3ore - 03/02/2007 23:49
Avatar van X3ore HTML interesse Ja? Ik snap jouw probleem niet hoor 

Gewoon een formuliertje maken als die verzonden word data in database plaatsen en klaar?
Offline Extent - 04/02/2007 02:33
Avatar van Extent PHP interesse Chilricky, als je gewoon de insert query eens geeft die uitgevoert word als iemand zich aanmeld...
Offline Gerard - 04/02/2007 03:12 (laatste wijziging 04/02/2007 03:13)
Avatar van Gerard Ouwe rakker Ik zal ook eens even mijn lichtje eroverheen laten schijnen.

Stop met wat je nu aan het doen bent en overweeg een andere oplossing! Zo, dat was informatief... nu de uitwerking.

Ik zou een tabel toevoegen aan je database waarin je ip addressen koppelt aan de gebruiker. Die tabel kan er bijvoorbeeld als volgt uitzien:
  1. +-------------+-----------------------+-------------------------------------------------------------+
  2. | field | type | remarks |
  3. +-------------+-----------------------+-------------------------------------------------------------+
  4. | ipaddress | Unsigned Integer (10) | Primary key |
  5. +-------------+-----------------------+-------------------------------------------------------------+
  6. | userid | Unsigned Integer | Primary key (zet length naar wat je ook hebt in user tabel) |
  7. +-------------+-----------------------+-------------------------------------------------------------+
  8. | firstused | Datetime | |
  9. +-------------+-----------------------+-------------------------------------------------------------+
  10. | lastused | Datetime | |
  11. +-------------+-----------------------+-------------------------------------------------------------+


Je kan er eventueel ook voor kiezen om nog een extra veld toe te voegen waarin je de hostname opslaat die op dat moment tot het ip adres behoorde. Met providers als de mijne (@Home) veranderd namelijk soms wel mijn ip adres maar nooit mijn hostname.

Om het ip adres in een integer veld te laten passen moet je gebruik maken van de functies INET_ATON() en INET_NTOA(). Dit zijn dus MySQL functies en geen php functies.

Wat veel mensen nu doen is het volgende:
1) Wanneer de gebruiker de pagina binnenkomt wordt er gecontroleerd of hij/zij ingelogd is.
2) Als de gebruiker is ingelogd controleren we met een COUNT() query of dit ip adres al opgeslagen is voor deze gebruiker
3) Als dat niet zo is dan voeren we het ip in, anders updaten we het ip.

Dit is een proces wat je heel simpel kan terugbrengen van 2 queries naar 1 (in meeste gevallen).
1) Je controleert nog altijd of de gebruiker is ingelogd omdat we met dit systeem alleen ingelogde gebruikers willen registreren.
2) We updaten de tabel met de volgende query:
  1. UPDATE iplog
  2. SET lastused = NOW()
  3. WHERE ipaddress = INET_ATON('[ip-hier]')
  4. AND userid = [userid-hier]

3) Controleer met PHP.net: mysql_affected_rows of de tabel is geupdate (dan was de combinatie userid/ip dus al bekend). Is dat niet zo dan voeren we dus nu het ip adres in. Zo dus:
  1. INSERT INTO iplog (ipaddress, userid, firstused, lastused)
  2. VALUES (INET_ATON('[ip-hier]'),
  3. [userid-hier],
  4. NOW(),
  5. NOW())


Wanneer je bovenstaande methode hanteert kan je mooi een lijstje bijhouden welke ip adressen bij een gebruiker horen en of een ip adres bijvoorbeeld gedeeld wordt met meerdere gebruikers. Als je bij het moment van opslaan ook nog eens de hostname opslaat kan je in de geschiedenis gelijk zien of de gebruiker niet gewoon telkens een nieuw ip krijgt maar dezelfde hostname houdt, dan zou je daar namelijk op kunnen bannen oid.

Succes in ieder geval en ik hoop dat je iets aan mijn post hebt gehad.
Offline Chilricky - 04/02/2007 15:28
Avatar van Chilricky Nieuw lid Die code moet ik in de Aanmleden pagina zetten tog?
Offline Gerard - 04/02/2007 20:35
Avatar van Gerard Ouwe rakker Denk eens even heel logisch na, wat heb ik net uitgelegd. In mijn voorbeeld wil ik de gegevens registreren wanneer de gebruiker is ingelogd. Dus ik zet die check bovenaan elke pagina en controleer ik of de gebruiker is ingelogd.

Als je initieel bij de registratie ook al het ip wil koppelen aan de net nieuw aangemaakte gebruiker dan dien je dat inderdaad daar te doen.

Dit zijn geen technische vragen gozer, dit is gewoon logisch nadenken.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.251s