[RESOLU] Action si table vide ou pas

Eléphanteau du PHP | 49 Messages

08 janv. 2016, 19:35

Bonjour,

je voudrais faire apparaitre différentes choses selon trois cas de figure:

1 - si ma table est vide afficher un texte,

2 - ou si une colonne de cette table est vide afficher un autre texte

3 - sinon afficher les entrées de cette colonne.

Pour les 2 dernières j'y arrive facilement avec mon bout de code, mais pour la première je n'y arrive pas.

Code : Tout sélectionner

$rst = $bdd->query('SELECT macolonne from matable'); while($donnees = $rst->fetch()) { $macolonne = $donnees['macolonne']; if (empty($macolonne)) { echo 'mon autre texte'; } else { echo '$macolonne'; }

Mammouth du PHP | 2703 Messages

08 janv. 2016, 19:48

si la table est vide, le select ne retournera aucun résultat, donc, après l'exécution de la requete, il faut tester le nombre d'enregistrement retourné, et s'il est de 0, afficher le 3ème texte.

Eléphanteau du PHP | 49 Messages

08 janv. 2016, 21:53

Code : Tout sélectionner

$rst = $bdd->query('SELECT count(*) as nb from matable'); $data = $rst->fetch(); $nb = $data['nb']; if ($nb == 0) { echo 'mon texte'; } $rst = $bdd->query('SELECT macolonne from matable'); while($donnees = $rst->fetch()) { $macolonne = $donnees['macolonne']; if (empty($macolonne)) { echo 'mon autre texte'; } else { echo '$macolonne'; } }
Est-ce que ça vous parait correcte?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

11 janv. 2016, 17:52

Bonjour,

Ce code fonctionne, mais n'est pas optimisé, puisque après avoir compté le nombre d'enregistrement et avoir constaté qu'il était de 0, tu vas quand même aller chercher le contenu de la table pour vérifier les cas suivants (alors que si la table est vide, il est fort probable que ses colonnes le soient également ;))

Tu peux également éviter la requête supplémentaire en comptant le nombre de fois où tu es entré dans le while. En effet, si tu n'entre jamais dans la boucle, c'est qu'aucun enregistrement n'a été trouvé :
$rst = $bdd->query('SELECT macolonne from matable');
         $result = false; // flag true/false pour contrôler s'il y a des résultats (on peut aussi utiliser un compteur)
         while ($donnees = $rst->fetch()) {
                  $result = true; // il y a au moins un résultat
                  $macolonne = $donnees['macolonne'];
                  if (empty($macolonne)) {
                      echo 'mon autre texte';
                  }
                  else {
                      echo $macolonne; // pas d'apostrophe autour de la variable, sinon php écrira $macolonne en toutes lettres ;)
                  }           
         }
         if (!$result) { // aucun résultat trouvé
                  echo 'noooon rien de rieeeennn...';
         }
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 49 Messages

11 janv. 2016, 21:47

Merci beaucoup.
Ayant des éléments "macolonne" dans 2 tables j'ai testé avec:

Code : Tout sélectionner

$rst = $bdd->query('SELECT macolonne AS MACOLONNEALL from matable UNION ALL SELECT macolonne AS MACOLONNEALL from matable2'); $result = false; // flag true/false pour contrôler s'il y a des résultats (on peut aussi utiliser un compteur) while ($donnees = $rst->fetch()) { $result = true; // il y a au moins un résultat $macolonne = $donnees['MACOLONNEALL']; if (empty($macolonne)) { echo 'mon autre texte'; } else { echo $macolonne; // pas d'apostrophe autour de la variable, sinon php écrira $macolonne en toutes lettres ;) } } if (!$result) { // aucun résultat trouvé echo 'noooon rien de rieeeennn...'; }
ça fonctionne très bien mais je ne suis pas sûre de la syntaxe.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

13 janv. 2016, 11:46

La syntaxe est bonne :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...