Problème comparaison IP

Petit nouveau ! | 2 Messages

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 !

d0m
Mammouth du PHP | 1141 Messages

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'];
    }
}

ViPHP
fab
ViPHP | 2657 Messages

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.
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

ViPHP
ViPHP | 2144 Messages

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...

Petit nouveau ! | 2 Messages

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

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

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'];
}