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 :

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 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.

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 :

Nom : curl KO avec valeurs.png
Affichages : 258
Taille : 104,8 Ko

Du coup j'ai voulu utiliser CONCAT pour rassembler les trois colonnes de ma table dans une seule chaine de caractère :

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>';
        }  
 
}
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...

Nom : curl ko concat.png
Affichages : 217
Taille : 51,5 Ko

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.

Nom : error php.png
Affichages : 217
Taille : 65,8 Ko

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 :

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>';
        }  
 
}
La latitude est pourtant bien présente dans $data[0]['lat'] je ne comprends pas trop.