Page 1 sur 1

Problème comparaison IP

Posté : 16 sept. 2007, 19:02
par MatheO
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 !

Posté : 17 sept. 2007, 08:30
par d0m
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'];
    }
}

Posté : 17 sept. 2007, 09:10
par fab
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.

Posté : 17 sept. 2007, 10:06
par iclo
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...

Posté : 17 sept. 2007, 18:11
par MatheO
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

Posté : 17 sept. 2007, 21:19
par Hubert Roksor
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'];
}