Page 1 sur 1
Quel if pour savoir si il y a une réponse ?
Posté : 04 mars 2024, 16:25
par chris33
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.
Re: Quel if pour savoir si il y a une réponse ?
Posté : 04 mars 2024, 16:31
par two3d
Re: Quel if pour savoir si il y a une réponse ?
Posté : 04 mars 2024, 16:51
par chris33
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 ?
Posté : 04 mars 2024, 17:51
par two3d
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 ?
Posté : 04 mars 2024, 18:18
par Saian
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: [RESOLU] Quel if pour savoir si il y a une réponse ?
Posté : 05 mars 2024, 11:19
par chris33
C'est bon !
Si avec
je tombe sur le même obstacle que dans mes précédentes tentatives : "Undefined variable",
fonctionne immédiatement !
Merci beaucoup.
Re: Quel if pour savoir si il y a une réponse ?
Posté : 05 mars 2024, 11:23
par @rthur
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 ?
Posté : 05 mars 2024, 14:56
par Saian
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.