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 :

Boucle dont le résultat n'existe pas [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Juin 2017
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2017
    Messages : 26
    Par défaut Boucle dont le résultat n'existe pas
    Bonjour,

    Dans un fichier PHP, je fais appel à une ligne de code de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sSQL="SELECT ...";
    $row=$q->getrow();
    $prenom=urldecode($row[3]);
    $nom=urldecode($row[4]);
    ...
    Je sais que si je met le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($q->query($DB,$sSQL)) {
    Et que le SQL me renvoit un résultat, la boucle marche. Mais ce que j'aimerais savoir c'est qu'elle est la syntaxe à utiliser pour dire que si le SQL ne renvoie rien, il faut que ce qui est dans la boucle s'exécute (en l'occurence un autre SQL)

    J'ai essayé avec plusieurs choses :

    -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if Not exist ($q->query($DB,$sSQL)) {

    -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    isset ($q->query($DB,$sSQL)) {

    -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (empty($q->query($DB,$sSQL))) {
    Et à chaque fois PHP me renvoit que ce n'est pas la bonne méthode
    Fatal error: Can't use method return value in write context in...
    Pourriez-vous m'aider à trouver la bonne syntaxe à utiliser, SVP ?

    Je vous en remercie par avance

  2. #2
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Bonjour.
    Suis pas sûre de bien comprendre ton problème, tu pourrais nous montrer davantage de ton 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
    $sql1='select truc, machin from table1';
    $sql2='select bidule,muche from table2';
     
    $data1=$pdo->query($sql1,PDO::FETCH_ASSOC);
    if(count($data1)>0){
      foreach($data1 as $row){
        echo $row['truc'].' '.$row['machin'].'<br/>';
      }
    }
    else{
      $data2=$pdo->query($sql2,PDO::FETCH_ASSOC);
      if(count($data2)>0){
        foreach($data2 as $row){
          echo $row['bidule'].' '.$row['muche'].'<br/>';
        }
      }
      else{
        echo 'les 2 requêtes ne renvoient rien !';
      }
    }
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  3. #3
    Membre averti
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Juin 2017
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2017
    Messages : 26
    Par défaut
    Voici mon code en entier :

    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
    $sSQL="SELECT mon-champs1, mon-champs2, mon-champs3...  FROM ma-table1, ma-table2, ma-table3... where clause1, clause2, clause3...";
    $row=$q->getrow();
    $prenom=urldecode($row[3]);
    $nom=urldecode($row[4]);
    $adresse=urldecode($row[5]);
    $codepostal=$row[6];
    $ville=urldecode($row[7]);
    ...
     
     
    if (empty($q->query($DB,$sSQL))) {
     
    $sSQL2="SELECT mon-champs1, mon-champs2, mon-champs3... FROM table1, table2, table3... where clause1, clause2, clause3...";
    $q->query($DB,$sSQL2);
    $row=$q->getrow();
    $prenom=urldecode($row[0]);
    $nom=urldecode($row[1]);
    $adresse=urldecode($row[2]);
    $codepostal=$row[3];
    $ville=urldecode($row[4]);
    ...
    }
    Voici ci-dessous, le code qui marche très bien dans un autre fichier, quand la boucle dit que si la 1ere requête renvoie un résultat, on exécute la 2ème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $sSQL="UPDATE ma-table SET mon-champs1='ma_donnée1', mon-champs2='ma_donnée2',mon-champs3='ma_donnée3',WHERE mon-champ0='$ma_donnée0'";
     
    if ($q->query($DB,$sSQL)) {
     
    			$phci_id = next_id("tjs_php_ci");
    			$sSQL2="INSERT INTO mon-table (mon-champs1,mon-champs2,mon-champs3) VALUES ($phci_id, 'ma_donnée2', 'ma_donnée'...)";
     
    }

    Néanmoins, ce que je veux faire ici, c'est exécuter la 2ème requête si la 1er renvoie un résultat vide.

    Merci pour votre aide.

  4. #4
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Toujours pas compris.
    Tu veux faire ce genre de choses ?

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    insert into table1 t1 (id, col1, col2, col3)
    inner join table2 t2 on t2.table1_id=t1.id
    inner join table3 t3 on t3.table2_id=t2.id
    values ("truc1", "truc2", "truc3") on duplicate key update t1.col1="truc1", t1.col2="truc2", t1.col3="truc3";
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  5. #5
    Membre averti
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Juin 2017
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2017
    Messages : 26
    Par défaut
    Non, pas du tout,

    Je veux obtenir le résultat d'une requête SQL et si la SGBD renvoie une résultat, compléter des champs. Sinon,si le résultat de la requête est vide, déclencher une autre requête SQL.

    En fait je cherche juste la syntaxe qui fonctionnerait pour dire le contraire de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if ($q->query($DB,$sSQL))) {
     
    }

    Suis-je plus clair ?

    Merci de vos réponses

  6. #6
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Mais ça je te l'ai déjà mis dans ma première proposition ! Tu l'as testée ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $data1=$pdo->query($sql1,PDO::FETCH_ASSOC);
    if(count($data1)==0){
     
    }
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  7. #7
    Membre averti
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Juin 2017
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2017
    Messages : 26
    Par défaut
    Bonsoir Merci de ta réponse,

    Je pensais que c'était juste un exemple pour me montrer ce que tu attendais en fait. Désolé.

    J'ai ajouté à mon fichier :
    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
     
    $sql1='select truc, machin from table1';
    $sql2='select bidule,muche from table2';
     
    $test1=$q->query($DB,$sSQL);
     
     
     
    if(count($test1)==1){
    $q->query($DB,$sSQL);
    $row=$q->getrow();
    $prenom=urldecode($row[3]);
    $nom=urldecode($row[4]);
    ...
    } else {
    $q->query($DB,$sSQL2);
    $row=$q->getrow();
    $prenom=urldecode($row[0]);
    $nom=urldecode($row[1]);
     
     
    }
    Résultat, lorsque j'ai un résultat pour le SQL1, les champs s'affiche bien

    Néanmoins, quand le SQL1 ne retourne aucun résultat, rien ne s'affiche.

    J'ai essayé en mettant aussi avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $test1=$q->query($sql,PDO::FETCH_ASSOC);
    Cela ne change rien et si je mets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $test1=$pdo->query($sql,PDO::FETCH_ASSOC);
    J'obtiens les messages :


    Notice: Undefined variable: pdo in ...

    Fatal error: Call to a member function query() on a non-object in ...

  8. #8
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Essaie cela :

    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
    $sql1='select truc, machin from table1';
    $sql2='select bidule,muche from table2';
     
    $test1=$q->query($DB,$sSQL);
    if(count($test1)==1){
      $q->query($DB,$sSQL);
      $row=$q->getrow();
      $prenom=urldecode($row[3]);
      $nom=urldecode($row[4]);
      ...
    } else {
      echo '<pre>';
      print_r($test1);
      echo '</pre>';
    }
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  9. #9
    Membre averti
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Juin 2017
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2017
    Messages : 26
    Par défaut
    J'ai intégré ton code et cela ne change rien,

    Soit le SQL1 renvoie une requête et dans ce cas, là mes infos s'affichent bien.

    Soit le SQL1 renvoie un résultat vide et dans ce cas rien ne s'affiche

    (ce qui est peut-être normal d'ailleurs puisque dans ton code tu demandes d'afficher les résultats de la requête qui est normalement vide)

    En fait j'ai compris ce que tu voulais faire et donc dans les 2 cas, j'affiche le même message :

    <!-- Test1 : Resource id #9 -->

    Si j'essaie de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <!-- Q : <?php echo $q ?> -->
    j'ai un message d'erreur :

    Catchable fatal error: Object of class query could not be converted to string in
    et si j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <!--Q : <?php return $q->query($DB,$sSQL);?> -->
    j'ai une page blanche et quand je vais voir dans le code source je n'ai rien qui s'affiche après Q:

  10. #10
    Membre averti
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Juin 2017
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2017
    Messages : 26
    Par défaut
    Merci de ton aide Dendrite, cela m'a permis d'avancer et résoudre mon problème.

    J'ai fait une petite ruse de Sioux et tout fonctionne correctement

    Mon 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
    $sSQL1='select truc, machin from table1';
    $q->query($DB,$sSQL1);
    $row=$q->getrow();
     
     
    if(count($row[0])==1){
     
    $prenom=urldecode($row[3]);
    $nom=urldecode($row[4]);
    ...
    } else {
    $sSQL2='select bidule,muche from table2';
    $q->query($DB,$sSQL2);
    $row=$q->getrow();
    $prenom=urldecode($row[0]);
    $nom=urldecode($row[1]);
    ...
     
    }

  11. #11
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Bravo, c'est parfait !
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/08/2016, 19h12
  2. Réponses: 3
    Dernier message: 13/04/2010, 12h39
  3. Réponses: 6
    Dernier message: 14/03/2008, 11h54
  4. Réponses: 3
    Dernier message: 25/01/2008, 10h36
  5. Réponses: 3
    Dernier message: 29/09/2006, 09h48

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