Menu

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

Messages postés
3
Date d'inscription
dimanche 30 juin 2019
Statut
Membre
Dernière intervention
30 juin 2019
- - Dernière réponse : Samueljack
Messages postés
3
Date d'inscription
dimanche 30 juin 2019
Statut
Membre
Dernière intervention
30 juin 2019
- 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
Afficher la suite 

2 réponses

Messages postés
25946
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 juillet 2019
1709
0
Merci
Bonjour

Avec quel code fais tu l'insertion ?


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

Samueljack
Messages postés
3
Date d'inscription
dimanche 30 juin 2019
Statut
Membre
Dernière intervention
30 juin 2019
-
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.
Commenter la réponse de jordane45
Messages postés
3
Date d'inscription
dimanche 30 juin 2019
Statut
Membre
Dernière intervention
30 juin 2019
0
Merci
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.
Commenter la réponse de Samueljack