Bonjour à tous,

Décidément cette semaine je viens beaucoup vous embêter sur ce forum, je vous montrerai le résultat final du site que je réalise, c'est promis :p

J'ai un petit soucie d'ergonomie que j'arrive pas à résoudre, j'ai un tableau que je remplie via une requête SQL et j'aimerais faire en sorte que lorsque l'a requête ne récupère aucunes données, afficher un message ou autres.

J'ai donc voulue faire un test tout bête (Id/ELSE), mais celui-ci ne fonctionne pas pourtant je pense utiliser la bonne méthode..

Voici le code de ma requête:

$requete = $bdd->prepare('
SELECT equipement.Module_Equipement,equipement.Niveau_Equipement, equipement.Tag_Equipement,fuite.Description_Fuite,fuite.Criticite_Fuite,fuite.Nom_Site_Fuite
FROM fuite,equipement 
WHERE fuite.Id_equipement=Equipement.Id_Equipement AND fuite.Criticite_Fuite="1" AND Module_Equipement=:module');
     $requete->execute(array(':module' => $_SESSION'Module_Equipement']));
     $resultat = $requete->setFetchMode(PDO::FETCH_ASSOC);

Ensuite j’affiche les titres de mon tableau, et j'aimerais ne pas les afficher quand la requête ne récupère pas de données:

if ($resultat) {
                          echo '<TABLE class="features-table">';
                        echo ' <tr>';
                        echo' <th class="titreTableau">';
                        echo _('Tag');
                        echo ' </th>';
                        echo ' <th class="titreTableau">';
                        echo _('Module Equipment');
                        echo ' </th>';
                        echo ' <th class="titreTableau">';
                        echo _('Level Equipment');
                        echo ' </th>';
                        echo ' <th class="titreTableau">';
                        echo _('Tag Equipment');
                        echo ' </th>';
                        echo ' <th class="titreTableau">';
                        echo _('Leak Description');
                        echo ' </th>';
                        echo' <th class="titreTableau">';
                        echo _('Leak Criticality');
                        echo ' </th>';
                        echo ' </tr>';
                        } else {
                            echo "<h1>Pas de résultat</h1>";
                        }

Mais mon IF ne marche pas

6 réponses


Plusieurs choses concernant ton problème :
1/ J'ai fait un petit test tout simple en reprenant le code de ta requête avec une de mes bdd et $resultat retourne quelque chose (true ou false), ce qui me laisse penser que tu dois avoir un problème au niveau de ta requête
2/ $resultat ne t'indique pas s'il y a des résultats mais si la modification du mode de récupération des résultats de la requête a été effectué avec succès ou non. Pour modifier ce mode, tu n'as qu'à mettre :

$requete->setFetchMode(PDO::FETCH_ASSOC);

3/ Si j'ai bien compris ce que tu souhaites faire, je te conseille de ne pas utiliser setFetchMode mais de t'intéresser plutôt à fetchAll...

En espérant avoir pu t'éclairer.

iluzzion
Auteur

Bonjour,

Concernant ma requête elle marche, je l'ai testé sur MYSQL avant de l'utiliser et elle remplie bien mon tableau.
Je vais essayé le FETCH_ALL et je te tiens au courant :)

Merci pour t'a réponse.

@hellsingblack: en effet, la fonction native mysql_fetch_row permet de le faire. Cependant, dans le cas d'iluzzion, on passe par l'extension PDO (inclus nativement depuis PHP5.1) qui sert d'interface entre PHP et une base de données (peu importe qu'elle soit sqlite, mysql ou autre). Voici le lien sur la doc php : http://www.php.net/manual/fr/book.pdo.php

@iluzzion: si tu repasses par ici, merci de me dire si cela a marché pour toi et dans ce cas, merci de valider une des réponses pour clore le sujet :)

iluzzion
Auteur

Bonjour, je n'ai pas oublié vos réponses, mais cet semaine j'ai du travailler sur une autre partie du site.

Je vais reprendre ça certainement Mardi, je vous tiens au courant pas de soucie ;)

même si mon post est retardataire je le poste comme pour les personnes qui auront le même problème. Je pense que dans ton cas tu doit utilisé la fonction count() qui va compter le nombre de résultat qu'ils sont récupéré, si le nombre est supérieur strictement à 0, dans ce cas il y a au moins un résultat, donc tu les affiche. ( tu peux utiliser la fonction count() soit dans la requête ce qui veut dire que tu dois avoir deux requêtes, une pour compter le nombre de résultat et d'autres pour les récupérer, sinon tu utilises seulement la requeête de récupération et tu applique la fonction au tableau $resultat récupéré). à bientôt