Insertion valeur numérique dans la base.

Résolu/Fermé
Samueljack Messages postés 5 Date d'inscription dimanche 30 juin 2019 Statut Membre Dernière intervention 26 mai 2020 - 30 juin 2019 à 09:56
Samueljack Messages postés 5 Date d'inscription dimanche 30 juin 2019 Statut Membre Dernière intervention 26 mai 2020 - 30 juin 2019 à 12:21
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
A voir également:

2 réponses

jordane45 Messages postés 38170 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 mai 2024 4 661
30 juin 2019 à 11:04
Bonjour

Avec quel code fais tu l'insertion ?


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

0
Samueljack Messages postés 5 Date d'inscription dimanche 30 juin 2019 Statut Membre Dernière intervention 26 mai 2020
Modifié le 30 juin 2019 à 11:56
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.
0
Samueljack Messages postés 5 Date d'inscription dimanche 30 juin 2019 Statut Membre Dernière intervention 26 mai 2020
30 juin 2019 à 12:21
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.
0