Trouver le pays d'un utilisateur

Résolu
xidy -  
 xidy -
Bonjour,
et merci d'avance^^

J'ai un problème pour trouver le nom du pays des gens visitant mon site internet je vous passe le code si quelqu'un cerne l'erreur merci^^

$pays="33.99.63.44";

$pays=str_replace(".","",$REMOTE_ADDR);

$pays=(double)$pays;

$valeur= mysql_query("SELECT COUNTRY_NAME FROM IP_PAYS WHERE \'".$pays."\' BETWEEN \'IP_FROM\' and \'IP_TO\'",$conn);

while ($row = mysql_fetch_row($valeur))
{
echo $row[0];
}
A voir également:

9 réponses

Zep3k!GnO Messages postés 2025 Date d'inscription   Statut Membre Dernière intervention   200
 
Ok, par contre je connais pas trop ta syntaxe du between, et je ne vois pas pourquoi tu échappes ces simples quotes.
Perso je l'aurai écrite :

$sSql = " SELECT COUNTRY_NAME
FROM `IP_PAYS`
WHERE
`IP_FROM` <= '".$pays."'
AND
`IP_TO` >= '".$pays."'
";

1
Scrapitoo1.0 Messages postés 93 Date d'inscription   Statut Membre Dernière intervention   12
 
Bonjour,

s'agit t-il du fichier iptocountry.csv que tu as utilisé ?
Si oui, les "ip" contenues dans la tables n'en sont pas. C'est le résultat d'un calcul à partir des 4 parties de l'ip.
ex pour un ip du style AAA.BBB.CCC.DDD il faut calculer :
AAA x 256^3 + BBB x 256 ^2 + CCC x 256 + DDD
et c'est cette valeur qu'il faut comparer aux IPFROM et IPTO.

Bonne journée
0
Utilisateur anonyme
 
Lu,
ils n'ont pas un profil sur ton site ? tu peux pas regarder leur pays de là-bas ?
et pourquoi veux-tu à tout prix savoir leur pays?
0
dyllan Messages postés 4707 Date d'inscription   Statut Contributeur sécurité Dernière intervention   909
 
Bonjour,
je ne suis pas très bon en dev. mais pour contourner le problème et pour trouver le pays de tes visiteurs tu peux aussi simplement passé par PHPMyvisites.

Si ça peut t'aider,

dyllan
0
xidy
 
J'aimerais avoir le pays pour simple information (outil d'analyse) mais si possible le coder moi-même et eviter google analytics ou autre (but pédagogique dans ce cas). Merci!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Zep3k!GnO Messages postés 2025 Date d'inscription   Statut Membre Dernière intervention   200
 
Ta requête me parait bien étrange...
Tu veux pas faire :

$sSql = "SELECT COUNTRY_NAME FROM IP_PAYS WHERE \'".$pays."\' BETWEEN \'IP_FROM\' and \'IP_TO\'";
echo "<br/>on va éxécuter : ".$sSql;
$valeur= mysql_query($sSql,$conn) or die ('error '.mysql_error());

Et dis moi ce que ça t'affiches.
Puis comme ça, t'as bien une table IP_PAYS ? ? //Si oui montre la structure
Et t'as des enregistrements dedans ?
Un par adresse IP sans les points ? ? ? //ca parait irréel
Car c'est ce que ta requête demande...
0
xidy
 
Si on a les IP par pays sans les points (par rangs: de ... à ...) dans une table.
0
xidy
 
En effet j'ai retiré les quotes pour ceci:

$valeur= mysql_query("SELECT * FROM IP_PAYS WHERE \'".$pays."\' BETWEEN IP_FROM and IP_TO",$conn);

mais je ne comprends pas la syntaxe avec les => et >=.

J'ai une erreur de type:
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in C:\wamp\www\4Gl\4glOnNet\fct.php

lors du:
while ($row = mysql_fetch_row($valeur))
{
echo $row[0];
}
0
Zep3k!GnO Messages postés 2025 Date d'inscription   Statut Membre Dernière intervention   200
 
Fais un mysql_query("SELECT * FROM IP_PAYS WHERE \'".$pays."\' BETWEEN IP_FROM and IP_TO",$conn) or die('ERROR SQL : '.mysql_error() );

Il doit y avoir une erreur de syntaxe de requête. D'ailleurs ça ne sert toujours à rien d'échapper les simple quotes pour le pays, il vaut mieux écrire :

"SELECT * FROM IP_PAYS WHERE '".$pays."' BETWEEN IP_FROM and IP_TO"


Pour ce qui est des <= et => c'est pour faire le between c'est du "inférieur ou égal" à et "supérieur ou égal à"
0
xidy
 
Ah ok j'avais pas pensé à ce sens là en lisant^^ On a resolu le probleme en changeant un type ds le record de la bd :S merci à tous!!!
0