Problème comparaison IP

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème comparaison IP

par Hubert Roksor » 17 sept. 2007, 21:19

Je ne sais pas pourquoi ton code ne donne pas ce que tu attends, mais voici une solution alternative. Plutôt que de stocker tes IPs sous forme de texte, tu peux les convertir sous forme de nombre grâce à ip2long(). Sous cette forme, les IPs doivent être stockées dans une colonne de type INT (pas UNSIGNED).

Ensuite, comme le disait iclo, il te faut utiliser la clause WHERE pour ne pas faire 100x le boulot demandé. Tant que tu y es, n'oublie pas d'ajouter un index sur la colonne en question.

Le script devient alors
<?php

$reponse = mysql_query("SELECT name FROM site_members WHERE ip = " . ip2long($_SERVER["REMOTE_ADDR"]));
while ($donnees = mysql_fetch_assoc($reponse))
{ 
	echo $donnees['name'];
}

par MatheO » 17 sept. 2007, 18:11

Je ne connais pas le but de ton opération mais il faut que tu saches qu'une ip change. Une meme personne à moins de disposer d'une ip fixe change relativmenet d'ip ce n'est donc pas un moyen efficace pour identifier une personne.
Puis il n'est pas improbable que deux personnes différentes visitant ton site se retrouve avec la même ip avec quelques jours d'intervalle.
exact... mais je voulais juste tester pour voir par curiosité :) Ce la ne marche tjrs pas :) pourtant affichage les mêmes sans espaces en trop... Donc voila :p

par iclo » 17 sept. 2007, 10:06

J'ajouterai que rapatrier tout le contenu d'une table pour en parcourir le résultat dans une boucle, afin d'en rechercher une ligne, n'est pas optimal, surtout si la table contient un nombre important de données.
Regardes dans les tutorials sur le sql, du côté de la clause where...

par fab » 17 sept. 2007, 09:10

Je ne connais pas le but de ton opération mais il faut que tu saches qu'une ip change. Une meme personne à moins de disposer d'une ip fixe change relativmenet d'ip ce n'est donc pas un moyen efficace pour identifier une personne.
Puis il n'est pas improbable que deux personnes différentes visitant ton site se retrouve avec la même ip avec quelques jours d'intervalle.

par d0m » 17 sept. 2007, 08:30

2 débuggages simples pour t'aider :

- vérifier les types de tes 2 IPs que tu compares avec la fonction gettype

- afficher tes 2 IPs pour vérifier si elles sont bien pareilles, avec des délimiteur pour être sur qu'il n'y a pas d'espaces en trop :
while ($donnees = mysql_fetch_array($reponse))
{
    echo 'adresse base : |'.$donnees['ip'].'|';
    echo 'adresse serveur : |'.$_SERVER["REMOTE_ADDR"].'|';
    if ( $_SERVER["REMOTE_ADDR"] == $donnees['ip'])
    {
        echo $donnees['name'];
    }
}

Problème comparaison IP

par MatheO » 16 sept. 2007, 19:02

Bonjour,

J'ai un petit probleme avec mon code php. J'ai crée un code pour comparer l'adresse IP d'un visiteur avec les adresse ip présente dans ma table "site_members".

J'ai mis un membres test avec mon adresse IP.
$reponse = mysql_query("SELECT * FROM site_members");
while ($donnees = mysql_fetch_array($reponse))
{
    echo $donnees['ip'];
    if ( $_SERVER["REMOTE_ADDR"] == $donnees['ip'])
    {
        echo $donnees['name'];
    }
}
Seulement voila... il n'affiche pas le nom correspondant au membre test... alors que les ip sont les mêmes.

info : Dans ma table site_members, le champ "ip" est en interclassement "latin1_swedish_ci" avec une longueur maximale de 15 carractères.

Voila , une idée ??!!

Merci d'avance.

Bonne soirée !