[RESOLU] import donnée base

Eléphant du PHP | 172 Messages

05 janv. 2017, 20:14

Bonjour

et tous mes meilleurs vœux pour 2017

Merci d'avance pour votre aide.
Voilà mon soucis, j'ai des données :
[img]URL :
http://image.noelshack.com/fichiers/201 ... yadmin.jpg
[/img]

j'aimerai avoir le retour de la ville par rapport à l'adresse ip du visiteur.
Voilà le script pour la partie qui pose problème:
j'ai bien l' ip du visiteur
$ip1 = $row['ip']; // Adresse IP du visiteur
echo '<br><br>Adresse IP  visiteur: '.$ip1.'<br />';
$long = ip2long($ip1);
// Utilisation de la  base de données pour traduire le nom du pays
$result2 = $conn->query("SELECT ville_2 FROM ip_to_country_2 WHERE  `ip_from` <= ".$long."  AND `ip_to` >= ".$long." ") or die (mysqli_error($conn));
$data2 = mysqli_fetch_array($result2);

if (isset($data2)) echo 'Pays Ville: <strong>'. $data2['ville_2'].'</strong>'; //affiche la ville du pays...
else echo '<br>Pas de correspondance'; //ou à défaut ce message

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

06 janv. 2017, 04:18

Je pense que tes IP sont enregistrées au format VARCHAR, donc le <= et >= ne fonctionnerons pas.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 172 Messages

06 janv. 2017, 12:42

Bonjour,
oui c'est bien en varchar

j'ai abordé le problème sous deux façons sans résultat correct?
// 1ere 
$result2 = $conn->query ("SELECT * FROM ip_to_country_2 WHERE  $long  BETWEEN `ip_from` AND `ip_to` ") or die (mysqli_error($conn));

// 2eme
$result2 = $conn->query("SELECT * FROM ip_to_country_2 WHERE  `ip_from` <= ".$long."  AND `ip_to` >= ".$long." ") or die (mysqli_error($conn));

Eléphant du PHP | 176 Messages

06 janv. 2017, 18:59

Bonsoir,

BETWEEN a les mêmes défauts que "<= ou =>" pour la comparaison de chaîne de caractères

J'ai donc investigué rapidement sur le net,
je te conseille de regarder ça
https://www.periscopedata.com/blog/comp ... n-sql.html

En espérant que ça te permettra de t'en sortir
Cordialement
Naroth

Eléphant du PHP | 172 Messages

09 janv. 2017, 23:19

encore merci à ceux qui ont participés.
Après des essais infructueux, j'ai réussit avec ce script et en modifiant ma base sql

le drapeau du pays est même visible

Exemple donnés base:
ip_from = 16777216
ip_to = 16777471
country_code = AU
country_code_3 = AUS
country_name = Australia


script:
$ip1 = $row['ip']; // Adresse IP du visiteur
echo '<br><strong>Adresse IP  visiteur:</strong> '.$ip1.'<br />';
$long = ip2long($ip1);
// Utilisation de la base de données pour traduire le nom du pays

$result2 = $conn->query("SELECT * FROM ip_to_country_1 WHERE  `ip_from` <= ".$long."  AND `ip_to` >= ".$long." ") or die (mysqli_error($conn));
$data2 = mysqli_fetch_array($result2);
if (isset($data2)) echo '<strong><br>Pays: </strong>'. $data2['country_name']. ' '. $data2['country_code_3']. ' <img src="drapeaux/'.$data2 = strtolower($data2 ['country_code']).'.gif" alt="'.$data2['country_code'].'" />  '; //affiche la ville du pays...
else echo '<br><strong>Pays Ville: </strong>Pas de correspondance !'; //ou à défaut ce message