IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Foreach sur un curl avec des données CONCAT


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Octobre 2022
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2022
    Messages : 31
    Par défaut Foreach sur un curl avec des données CONCAT
    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 : 260
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 : 219
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 : 220
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.

  2. #2
    Membre chevronné Avatar de licardentaistor
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2021
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2021
    Messages : 345
    Par défaut
    pourquoi ne pas utiliser la recherche structurée, et forcer le country à France

    https://nominatim.openstreetmap.org/...country=France

  3. #3
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Octobre 2022
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2022
    Messages : 31
    Par défaut
    Citation Envoyé par licardentaistor Voir le message
    pourquoi ne pas utiliser la recherche structurée, et forcer le country à France

    https://nominatim.openstreetmap.org/...country=France
    Hello,

    J'ai tenté la recherche structuré en utilisant :

    $curl= curl_init('https://nominatim.openstreetmap.org/search?q='.$field.'&country=France&format=jsonv2')

    Mais cela ne fonctionne pas j'ai toujours le même résultat.

    Si je ne souhaite pas utiliser le paramètre "q" mais les autres "street" "city" ... Comment est ce que je peux faire pour récupérer ceux de chaque client vu qu'ils ne sont pas dans la même colonne ?

    Le CONCAT ne fonctionne pas

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 608
    Par défaut
    après avoir fait $donnees = $reponse->fetch(), vous pouvez récupérer chaque valeur séparément en faisant $donnees["city"].

    vous pouvez voir d'autres exemples d'utilisation dans la documentation officielle :
    https://www.php.net/manual/fr/language.types.array.php

  5. #5
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Octobre 2022
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2022
    Messages : 31
    Par défaut
    Citation Envoyé par mathieu Voir le message
    après avoir fait $donnees = $reponse->fetch(), vous pouvez récupérer chaque valeur séparément en faisant $donnees["city"].

    vous pouvez voir d'autres exemples d'utilisation dans la documentation officielle :
    https://www.php.net/manual/fr/language.types.array.php

    Mais si j'utilise cette méthode où dois je récupérer les valeurs ? Dans le while ? Le Foreach ?

    Car je dois ensuite pouvoir concaténer l'adresse, la ville et le CP sur une seule chaine de caractère afin de pouvoir la mettre dans le paramètre de l'URL et récupérer les données.

    J'ai juste testé avec l'adresse :

    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
    while ($donnees = $reponse->fetch(PDO::FETCH_ASSOC))
    {
        echo '<tr>';
     
        $donnees2 = $donnees['address'];
     
        foreach ($donnees2 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);
     
                }
            curl_close($curl); 
        }
    et j''ai un message d'erreur :

    Warning: Invalid argument supplied for foreach()

  6. #6
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 608
    Par défaut
    affichez ce que vous avez dans $donnees2.

  7. #7
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Octobre 2022
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2022
    Messages : 31
    Par défaut
    Voici ce qu'affiche les données :

    Nom : erreur sql.png
Affichages : 175
Taille : 87,3 Ko

    Je ne vois pas pourquoi le foreach ne fonctionne pas pour le coup.

  8. #8
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 608
    Par défaut
    $donnees2 contient une chaine de caractère. foreach sert à parcourir un tableau, c'est un autre type de variable :
    https://www.php.net/manual/fr/language.types.string.php
    https://www.php.net/manual/fr/language.types.array.php

  9. #9
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Octobre 2022
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2022
    Messages : 31
    Par défaut
    Hmmm je vois, si je pars du principe que le foreach() est utilisé pour lire un tableau, il faut que je le vire pour n'utiliser que le while ?

    Ou je dois utilisais un for par exemple ?

    Car si je n'utilise que le while en y intégrant le curl présent dans le foreach, j'ai un retour 'Null'

    J'ai testé en intégrant une boucle for au lieu du foreach :

    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
    35
    36
    37
    38
    $reponse = $bdd->query('SELECT address, city, postal_code FROM address');
     
    while ($donnees = $reponse->fetch(PDO::FETCH_ASSOC))
    {
        echo '<tr>';
     
        #$donnees2 = $donnees['address'];
     
        # echo $donnees2;
     
            for($i = 0, $size = count($donnees); $i < $size; ++$i) {
            $curl= curl_init('https://nominatim.openstreetmap.org/search?q='.$donnees.'&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);
     
                }
            curl_close($curl); 
        }
     
     
     }
    Cela ne fonctionne pas non plus, j'ai l'impression que ça prend la première valeur qui est "Array" en paramètre de mon curl :

    Nom : pb sql.png
Affichages : 163
Taille : 111,3 Ko

  10. #10
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Octobre 2022
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2022
    Messages : 31
    Par défaut
    Avec ce code j'arrive à un début de résultat :

    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
    35
    36
    37
    38
    $reponse = $bdd->query('SELECT address, city, postal_code FROM address');
     
    while ($donnees = $reponse->fetch(PDO::FETCH_ASSOC))
    {
        echo '<tr>';
     
        $donnees2 = $donnees['postal_code'];
     
       echo $donnees2;
     
            for($i = 0; $i < 1; ++$i) {
            $curl= curl_init('https://nominatim.openstreetmap.org/search?q='.$donnees2.'&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[0]);
     
                }
            curl_close($curl); 
        }
     
     
     }
    Le seul problème est que dès que je souhaite ajouter l'adresse et la ville en plus, cela ne fonctionne pas :

    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
    35
    $reponse = $bdd->query('SELECT address, city, postal_code FROM address');
     
    while ($donnees = $reponse->fetch(PDO::FETCH_ASSOC))
    {
        echo '<tr>';
     
        $donnees2 = $donnees['address'].$donnees['city'].$donnees['postal_code'];
     
       echo $donnees2;
     
            for($i = 0; $i < 1; ++$i) {
            $curl= curl_init('https://nominatim.openstreetmap.org/search?q='.$donnees2.'&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[0]);
     
                }
            curl_close($curl); 
        }
    J'ai comme erreur : Trying to access array offset on value of type null

    Je me doute que c'est à cause de mon var_dump($data[0]) mais je ne vois pas comment passer outre.

  11. #11
    Membre chevronné Avatar de licardentaistor
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2021
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2021
    Messages : 345
    Par défaut
    c'est normal tu prends toutes les adresses...

    pourquoi ne pas faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SELECT DISTINCT postal_code FROM address
    plutôt.

  12. #12
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Octobre 2022
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2022
    Messages : 31
    Par défaut
    J'ai mis à jour mon poste au moment où tu as répondu

    J'ai corrigé le problème en rajoutant var_dump($data[0]); mais ça me bloque quand je veux rajouter l'adresse et la ville dans la variable.

  13. #13
    Membre chevronné Avatar de licardentaistor
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2021
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2021
    Messages : 345
    Par défaut
    tu as surement des valeurs null, il faut tester les index avant, ou mettre des COALESCE dans ta requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    if( isset($donnees['address']) && isset($donnees['city'] && isset($donnees['postal_code']) )
     $donnees2 = $donnees['address'].$donnees['city'].$donnees['postal_code'];

  14. #14
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Octobre 2022
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2022
    Messages : 31
    Par défaut
    J'ai mis à jour le code, mais le isset ne passe pas, j'ai donc utilisé null !== :

    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
    35
    36
    37
    38
    39
    40
    41
    42
    while ($donnees = $reponse->fetch(PDO::FETCH_ASSOC))
    {
        echo '<tr>';
        if( null !==$donnees['address'] && null !==$donnees['city'] && null !==$donnees['postal_code'])  {
     
            $donnees2 = $donnees['address'].$donnees['city'].$donnees['postal_code'];
     
            echo $donnees2;
     
                for($i = 0; $i < 1; ++$i) {
                    $curl= curl_init('https://nominatim.openstreetmap.org/search?q='.$donnees2.'&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);
     
                    }
                    curl_close($curl); 
                }
        }
     
        else
        {
        }
     
     
     }
    Mais j'obtiens tout de même des retours null.

    Je ne vois pas comment utiliser le COALESCE dans la requête par contre.

    J'ai testé la requête : $reponse = $bdd->query('SELECT COALESCE(address, city, postal_code) AS total FROM address');

    Mais ça me retourne des NULL aussi.

    Je pense que le problème vient de var_dump mais je ne vois pas comment faire autrement.

  15. #15
    Membre chevronné Avatar de licardentaistor
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2021
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2021
    Messages : 345
    Par défaut
    il manque une parenthèse fermante sur le 2eme isset.

  16. #16
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Octobre 2022
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2022
    Messages : 31
    Par défaut
    Si j'essaye d'utiliser les isset j'ai des retours NULL aussi

    Nom : null.png
Affichages : 153
Taille : 41,0 Ko

    Pourtant on y est presque il suffit juste de récupérer les données à ce niveau :'(

  17. #17
    Membre chevronné Avatar de licardentaistor
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2021
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2021
    Messages : 345
    Par défaut
    y'a quoi ligne 43 ?

  18. #18
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Octobre 2022
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2022
    Messages : 31
    Par défaut
    var_dump($data);

    Voici le code complet :

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    $reponse = $bdd->query('SELECT DISTINCT address, city, postal_code FROM address');
     
    while ($donnees = $reponse->fetch(PDO::FETCH_ASSOC))
    {
        echo '<tr>';
        if( isset($donnees['address']) && isset($donnees['city']) && isset($donnees['postal_code']) ){
     
            $donnees2 = $donnees['address'].$donnees['city'].$donnees['postal_code'];
     
            echo $donnees2;
     
                for($i = 0; $i < 1; ++$i) {
                    $curl= curl_init('https://nominatim.openstreetmap.org/search?q='.$donnees2.'&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);
     
                    }
                    curl_close($curl); 
                }
        }
     
        else
        {
        }
     
     
     }
    Après vérification, quand j'utilise la ligne suivante, j'ai bien un retour fonctionnel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $donnees2 = $donnees['postal_code'];
    Par contre quand je teste par exemple juste avec la ville, j'ai des retours null et certains sont ok.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $donnees2 = $donnees['city'].'&' .$donnees['postal_code'];
    Je ne comprends pas pourquoi quand j'utilise l'adresse et la ville, j'ai des retours null.

  19. #19
    Membre chevronné Avatar de licardentaistor
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2021
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2021
    Messages : 345
    Par défaut
    je suppose que c'est le retour du curl_exec qui renvoi null à chaque fois....

    il faut peut être que tu sépares tes données ($donnees2) par un espace address city et code postal....

  20. #20
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Octobre 2022
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2022
    Messages : 31
    Par défaut
    Yes j'ai trouvé la solution hier dans la soirée, en fait c'était les espaces dans la chaine de caractère qui posaient problème.

    Je les ai supprimé et maintenant ça fonctionne !

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 01/10/2014, 15h32
  2. Index sur une table avec des données temporaires
    Par mioux dans le forum Développement
    Réponses: 5
    Dernier message: 12/01/2012, 17h05
  3. Réponses: 3
    Dernier message: 09/11/2010, 00h45
  4. [cURL] Envoyer des données avec la methode GET
    Par hicham285 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 21/11/2007, 16h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo