Hello tout le monde !
J'essaye de récupérer dans une table l'adresse, la ville et le CP de plusieurs client pour ensuite récupérer la latitude et la longitude de ces adresses.
Quand je fais ce code :
Je récupère les données mais ça me retourne tous les résultats possibles pour chaque code postal en premier alors que je n'ai besoin que d'un seul résultat par ligne de ma BDD et pas 50.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 $reponse = $bdd->query('SELECT address, city, postal_code FROM address'); while ($donnees = $reponse->fetch(PDO::FETCH_ASSOC)) { echo '<tr>'; foreach ($donnees as $field) { $curl= curl_init('https://nominatim.openstreetmap.org/search?q='.$field.'&format=jsonv2'); curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; fr; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13'); curl_setopt($curl, CURLOPT_CAINFO, 'D:\wamp\www\\cacert.pem'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Accept: application/json' )); $data = curl_exec($curl); if($data === false){ var_dump(curl_error($curl)); } else { $data = json_decode($data, true); echo '<pre>'; var_dump($data); } echo '</tr>'; } }
Je veux que les trois valeurs de base soient ensemble dans l'URL car sinon les données ne sont pas bonnes.
Toutes les adresses de ma BDD sont en France mais je me retrouve avec des résultats hors FR du coup. Dans l'exemple ci-dessous, ça prend le premier code postal de ma BDD "13600" et ça me retourne tous les résultats possible, alors que je ne veux que la FR :
Du coup j'ai voulu utiliser CONCAT pour rassembler les trois colonnes de ma table dans une seule chaine de caractère :
Sauf que dès que j'utilise le CONCAT, je n'ai plus de résultats, je n'ai que des NULL. J'ai testé avec le CONCAT_WS et même en utilisant COALESCE() mais rien n'y fait...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 $reponse = $bdd->query('SELECT CONCAT(address, city, postal_code) FROM address'); while ($donnees = $reponse->fetch(PDO::FETCH_ASSOC)) { echo '<tr>'; foreach ($donnees as $field) { $curl= curl_init('https://nominatim.openstreetmap.org/search?q='.$field.'&format=jsonv2'); curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; fr; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13'); curl_setopt($curl, CURLOPT_CAINFO, 'D:\wamp\www\\cacert.pem'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Accept: application/json' )); $data = curl_exec($curl); if($data === false){ var_dump(curl_error($curl)); } else { $data = json_decode($data, true); echo '<pre>'; var_dump($data); } echo '</tr>'; } }
Y'a t'il un autre moyen d'arriver au résultat voulu sans forcément utiliser un CONCAT pour le coup ?
Par ailleurs il y a un problème quand j'essaye de récupérer la latitude et longitude sans utiliser le CONCAT.
Pourtant quand j'ai testé mon code en dehors de la boucle l'appel fonctionnait correctement.
Voici le code dans la boucle sans le CONCAT :
La latitude est pourtant bien présente dans $data[0]['lat'] je ne comprends pas trop.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 $reponse = $bdd->query('SELECT address, city, postal_code FROM address'); while ($donnees = $reponse->fetch()) { echo '<tr>'; foreach ($donnees as $field) { $curl= curl_init('https://nominatim.openstreetmap.org/search?q='.$field.'&format=jsonv2'); curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; fr; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13'); curl_setopt($curl, CURLOPT_CAINFO, 'D:\wamp\www\\cacert.pem'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Accept: application/json' )); $data = curl_exec($curl); if($data === false){ var_dump(curl_error($curl)); } else { $data = json_decode($data, true); echo '<pre>'; var_dump($data); $lat = $data[0]['lat']; echo $lat; } echo '</tr>'; } }
Partager