Insertion valeur numérique dans la base. [Résolu/Fermé]

Signaler
Messages postés
5
Date d'inscription
dimanche 30 juin 2019
Statut
Membre
Dernière intervention
26 mai 2020
-
Messages postés
5
Date d'inscription
dimanche 30 juin 2019
Statut
Membre
Dernière intervention
26 mai 2020
-
Bonjour,

Je souhaite pour un site internet exploiter les données de géolocalisation d'utilisateurs.
Les données recueillies sont de type numériques et ressemblent à ça par exemple:

latitude: 6.852835499999999
longitude: 47.647370699999996

J'ai essayé de les insérer dans la base mais cela ne marche pas, la valeur insérée est "déformée".
Par exemple, actuellement j'ai défini le champs latitude sur décimal(20,20), le 6.852835499999999 est devenu 0.99999999999999999999
le champs longitude est sur double(20,20) et la valeur est stockée comme ceci: 1.00000000000000000000

j'ai essayé avec float etc...
je n'ai pas réussi.

La base de données est une base phpmyadmin de chez OVH.

Si quelqu'un peut m'aider ce serait sympa :)

Merci,

Samuel


Configuration: Windows / Chrome 75.0.3770.100

2 réponses

Messages postés
29561
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 septembre 2020
2 783
Bonjour

Avec quel code fais tu l'insertion ?


Et Si tu le fais directement dans phpmyadmin (a la main)...ça marche ?

Messages postés
5
Date d'inscription
dimanche 30 juin 2019
Statut
Membre
Dernière intervention
26 mai 2020

Bonjour Jordane,

Merci pour la réponse.

Voici le code pour l'insertion:

$req = $pdo->prepare("INSERT INTO users SET username= ?, password= ?, email= ?, confirmation_token= ?, completed_profile=?, latitude= ?, longitude= ?");
$password=password_hash($_POST['password'], PASSWORD_BCRYPT);
$token= str_random(60);
$latitude = ($_POST['latitude']);
$longitude = ($_POST['longitude']);
$req->execute([$_POST['username'], $password, $_POST['email'], $token, 0, $latitude, $longitude]);
$user_id=$pdo->lastInsertId();

mail($_POST['email'], 'confirmation de votre compte', "Afin de valider votre compte, merci de cliquer sur ce lien:\n\nhttp://xxxxxxxxxxxxxxx/confirm.php?id=$user_id&token=$token");
$_SESSION['flash']['success']= 'Un email de confirmation vous a été envoyé pour valider votre compte';
header('Location: login.php');
exit();


Les données de latitude et longitude sont récupérées par POST, si je les affiche il n'y a pas de souci ce la fonctionne. Dans la validation des données j'y ai mis if is_numeirc(...) donc elles sont bien récupérées avec un format numérique.

J'ai essayé d'insérer les valeurs à la main dans la base, ça ne fonctionne pas. Toujours le même problème. J'ai l'impression que je ne sais pas correctement configurer le champ qui reçoit la variable.

Edit: si je paramètre le champ sur 'DOUBLE', je peux insérer à la main les valeur. Ça marche.
Par contre via la requête, 6.852835499999999 devient 6.8507422 dans la base.
47.647370699999996 devient 47.6482929 dans la base.

Merci pour ta réponse,

Samuel.
Messages postés
5
Date d'inscription
dimanche 30 juin 2019
Statut
Membre
Dernière intervention
26 mai 2020

Bon j'ai enfin compris mon erreur qui était toute bête.

Cela marche avec un champ de type "DOUBLE".
Les valeurs que j'avais en tête pour la latitude et longitude étaient celles de mon navigateur (chrome) en navigation normale.
Je me suis rendu compte que je testais si tout se faisait bien en navigation privée. Et du coup la géolocalisation n'est pas exactement la même, d'où des valeurs un peu différentes.

Erreur tout bête.

Merci Jordane pour ton aide.