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];
}
Configuration: Windows Vista
Firefox 3.0.10

9 réponses

  1. Zep3k!GnO Messages postés 2049 Statut Membre 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
    1. Scrapitoo1.0 Messages postés 99 Statut Membre 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
  2. 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
  3. dyllan Messages postés 5577 Statut Contributeur sécurité 918
     
    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
  4. 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Zep3k!GnO Messages postés 2049 Statut Membre 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
  7. xidy
     
    Si on a les IP par pays sans les points (par rangs: de ... à ...) dans une table.
    0
  8. 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
  9. Zep3k!GnO Messages postés 2049 Statut Membre 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
  10. 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