[RESOLU] Quel if pour savoir si il y a une réponse ?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Quel if pour savoir si il y a une réponse ?

Re: [RESOLU] Quel if pour savoir si il y a une réponse ?

par Saian » 05 mars 2024, 14:56

Ca fonctionne car $statement a été défini lors du if précédent et que $statement->fetchAll() retourne un tableau de toutes les lignes du résultat.

Dans ton exemple la variable $tableau n'est pas définie comme le dit le message d'erreur "Undefined variable" (variable indéfinie) ! Tu ne peux pas utiliser une variable qui n'existe pas, comment veux-tu que le code interprète une variable qui n'existe pas ? y a pas de magie, il va pas deviner ce qu'elle serait sensée être. Ce n'est pas le nom de la variable qui définit sa valeur, c'est la valeur qu'on lui attribue lors de sa définition avec le signe = et peu importe son nom. Il faut donc forcément la définir au préalable en lui attribuant une valeur et si possible la bonne valeur en fonction de ce qu'on veut faire avec. Quand à son nom il est question de lisibilité. Des noms de variables bien choisis permettent dans l'idéale de comprendre ce que fait un code à sa simple lecture.

Le code de two3d n'était pas à copier sans réfléchir, il fallait le comprendre et définir $tableau en fonction de ce que tu souhaitais faire avec, en l’occurrence tester le nombre de lignes du résultat de la requête. Il fallait donc en faire un tableau avec toutes les lignes du résultat, ce qui peut s'obtenir avec la méthode fetchAll de la class PDOStatement, puisqu'ici tu utilises l'interface PDO.

Ton premier exemple fonctionnait car $resultat était au préalable défini avec $resultat = $sth->fetchAll(PDO::FETCH_NUM); et que la fonction empty retourne true quand on lui passe un tableau vide.

Re: Quel if pour savoir si il y a une réponse ?

par @rthur » 05 mars 2024, 11:23

Code : Tout sélectionner

if(!$connexion->query($sql)) echo "Pb d'accès aux données"; else { ?> <table class="centre" id="tableau"> …
A noter qu'ici, il te manque des accolades qui sont obligatoires autour de ta ligne d'instruction echo si tu veux que ton else fonctionne.

Re: [RESOLU] Quel if pour savoir si il y a une réponse ?

par chris33 » 05 mars 2024, 11:19

C'est bon !
Si avec

Code : Tout sélectionner

if(count($tableau) == 0)
je tombe sur le même obstacle que dans mes précédentes tentatives : "Undefined variable",

Code : Tout sélectionner

elseif (count($rows = $statement->fetchAll()) === 0)
fonctionne immédiatement !
Merci beaucoup.

Re: Quel if pour savoir si il y a une réponse ?

par Saian » 04 mars 2024, 18:18

Salut, éventuellement quelque chose dans le genre :
<?php
// ...
if(($statement = $connexion->query($sql)) === false) {
    echo 'Erreur de requête';
} elseif (count($rows = $statement->fetchAll()) === 0) {
    echo 'Aucun résultat';
} else {
?>
    <table class="centre" id="tableau">
    <!-- ... -->
        <?php foreach ($rows as $row): ?>
            <!-- ... -->
        <?php endforeach; ?>
    <!-- ... -->
    </table>
<?php
}

Re: Quel if pour savoir si il y a une réponse ?

par two3d » 04 mars 2024, 17:51

Un tableau vide est retourné s'il y a zéro résultat.

Ceci devrait être correct :
if(count($tableau) == 0)
echo "0 résultat";

Re: Quel if pour savoir si il y a une réponse ?

par chris33 » 04 mars 2024, 16:51

foreach est utilisé ensuite, pour la construction du tableau des réponses.
Peut-il servir avant, peut-on l'utiliser pour demander si il y a une réponse à la requête sql (si non afficher message, si oui afficher le tableau) ?

Re: Quel if pour savoir si il y a une réponse ?

par two3d » 04 mars 2024, 16:31

Voir avec foreach.

Quel if pour savoir si il y a une réponse ?

par chris33 » 04 mars 2024, 16:25

La réponse, je l’ai déjà pour une première approche :

Code : Tout sélectionner

$sth = $dbh->prepare(" SELECT cod, nom, chef_lieu, cree FROM depa WHERE cod = '$variable' OR nom = '$variable' OR chef_lieu = '$variable' "); $sth-> execute(); $resultat = $sth->fetchAll(PDO::FETCH_NUM); if (empty($resultat)) { echo 'Désolé...'; } else {
Ça marche, mais il me faut une présentation en tableau, non comme là par une ligne de texte, ce que j’ai pu faire grâce à l’aide reçue à mon sujet précédent intitulé « Présenter dans un tableau » :

Code : Tout sélectionner

$sql="SELECT cod, nom, chef_lieu, cree FROM depa WHERE cod = '$variable' OR nom = '$variable' OR chef_lieu = '$variable' OR cree = '$variable' "; if(!$connexion->query($sql)) echo "Pb d'accès aux données"; else { ?> <table class="centre" id="tableau"> …
J’ai bien un tableau, mais ce nouvel ‘if’ ne convient pas. Je tourne dans tous les sens sans parvenir au résultat obtenu dans ma première tentative : if pas de réponse, affiche « Désolé... », sinon…
Pourrais-je avoir de l’aide pour formuler correctement les choses ?
Merci d’avance.