Page 1 sur 1

Moteur de recherche / Message aucun Resultat

Posté : 13 nov. 2014, 10:10
par Alex_torr3s
Bonjour a tous,

j'ai un petit soucis avec mon code.

Effectivement j'aimerais afficher un message d'erreur "Aucune correspondance, veuillez entrez un autre mot clé" lorsque l'utilisateur rentre un mot clé qui n'a aucune correspondance.

J'ai réussi a avoir le message quand rien ne correspond mais le problème c'est qu'il s'affiche tout le temps même quand j'ai des résultats.

Je pense que c'est la condition de mon code qui ne fonctionne pas correctement.

Voici mon code :
<?php 
            if(isset($_POST['requete']) AND $_POST['requete'] != NULL)
                {
                    $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');
                    $requete = htmlspecialchars($_POST['requete']);
                    $requete = str_replace(' ', '', $requete);
                    $reponse = $bdd -> query("SELECT * FROM gesast WHERE Equipesansespace LIKE '%$requete%' ORDER BY id ") or die (mysql_error());
                    while ($donnees = $reponse->fetch())
                                {
                                
                                    echo'<div class="couleur"><p class="titre"><strong>' . htmlspecialchars($donnees['Equipe']) . ' </strong></p>
                                                <p> ' . htmlspecialchars($donnees['Nom_Prenom']) . '</p>
                                                <p class="numero"> ' . htmlspecialchars($donnees['Date_de_debut']) . ' 
                                                    ' . htmlspecialchars($donnees['Date de fin']) . ' </p>
                                         <p><strong>' . htmlspecialchars($donnees['TEL1']) . '</strong></p>  
                                         <p><strong>' . htmlspecialchars($donnees['TEL2']) . '</strong></p></div>';
                                          


                                }
                
                    if($donnees == NULL)
                        
                                {
                                    echo 'Aucune correspondance, veuillez entrez un autre mot clé';
                                    

                                }
                }
            else
            {
                echo 'Merci de renseigner un mot dans le champs recherche.'; 
            }

        
        ?>
Je n'arrive pas a trouver ce qu'il faut que je mette pour que ça fonctionne.

Merci d'avance pour votre aide :D :D :D :D :D .

Cordialement,

Alex

Re: Moteur de recherche / Message aucun Resultat

Posté : 13 nov. 2014, 17:20
par Spols
Le problème c'est que à la fin de ton while, $données est toujours null car ta boucle a épuisé les lignes

le mieux est de déterminer le nombre de ligne que ta requète génère et si c'est 0 afficher ton message d'erreur.

sinon il est possible de commencer par récupéré la première donnée, si elle est null affiché ton erreur sinon faire un do ...while mais je préfère la première solution

Re: Moteur de recherche / Message aucun Resultat

Posté : 13 nov. 2014, 18:16
par Nestecha
Pourquoi ne pas faire ça Spols ?
while ($donnees = $reponse->fetch())
                                {
                                
                                    echo'<div class="couleur"><p class="titre"><strong>' . htmlspecialchars($donnees['Equipe']) . ' </strong></p>
                                                <p> ' . htmlspecialchars($donnees['Nom_Prenom']) . '</p>
                                                <p class="numero"> ' . htmlspecialchars($donnees['Date_de_debut']) . ' 
                                                    ' . htmlspecialchars($donnees['Date de fin']) . ' </p>
                                         <p><strong>' . htmlspecialchars($donnees['TEL1']) . '</strong></p>  
                                         <p><strong>' . htmlspecialchars($donnees['TEL2']) . '</strong></p></div>';
                                          


                                }
                
                    if($donnees == NULL)
                        
                                {
                                    echo 'Aucune correspondance, veuillez entrez un autre mot clé';
                                    

                                }
qu'on remplace par :
if ($donnees == NULL) {
    echo 'Aucune correspondance, veuillez entrez un autre mot clé';
} else {
    while ($donnees = $reponse->fetch()) {
        echo '<div class="couleur"><p class="titre"><strong>' . htmlspecialchars($donnees['Equipe']) . ' </strong></p>
                                                <p> ' . htmlspecialchars($donnees['Nom_Prenom']) . '</p>
                                                <p class="numero"> ' . htmlspecialchars($donnees['Date_de_debut']) . ' 
                                                    ' . htmlspecialchars($donnees['Date de fin']) . ' </p>
                                         <p><strong>' . htmlspecialchars($donnees['TEL1']) . '</strong></p>  
                                         <p><strong>' . htmlspecialchars($donnees['TEL2']) . '</strong></p></div>';
    }
}

Re: Moteur de recherche / Message aucun Resultat

Posté : 14 nov. 2014, 11:00
par Spols
Le premier présente le même problème que l'original

le second tester une variable que l'on a pas encore instancier ne donnera sûrement pas une bonne réponse

Re: Moteur de recherche / Message aucun Resultat

Posté : 14 nov. 2014, 15:05
par Nestecha
Le premier présente le même problème que l'original

le second tester une variable que l'on a pas encore instancier ne donnera sûrement pas une bonne réponse
Effectivement, j'étais fatigué >< Et avec un if(($donnees = $reponse->fetch) == NULL) ? x) Tellement l'impression que ce n'est qu'une question d'ordre ><

Re: Moteur de recherche / Message aucun Resultat

Posté : 14 nov. 2014, 15:25
par ynx
Salut,

http://php.net/manual/fr/pdostatement.fetch.php

La méthode fetch ne retournera jamais la valeur NULL.
Au pire des cas elle retournera FALSE si la requête plante, mais qu'il y est aucun, un seul, ou plusieurs résultats, la méthode fetch retournera toujours un objet PDOStatement.

Re: Moteur de recherche / Message aucun Resultat

Posté : 14 nov. 2014, 17:25
par Megadeth
Slt,

Le mieux du fait un mysql_num_rows de ta requête et si c'est supérieur à 0 tu affiches telle chose si c'est == 0 tu affiches telle autre chose.

A placer après ta requête et avant le while ;)

Mega
;)

Re: Moteur de recherche / Message aucun Resultat

Posté : 14 nov. 2014, 17:37
par ynx
mysql_num_rows ne fonctionne pas avec PDO, il s'agit d'une fonction de l'api Mysql qui est désormais obsolète.

Plusieurs solutions possibles :
- utiliser la méthode PDOStatement::rowCount() mais qui ne fonctionne pas avec toutes les bdd (http://php.net/manual/fr/pdostatement.rowcount.php)
- effectuer une seconde requête "SELECT count(*) ..." pour récupérer le nombre de résultat (cf exemple 2 : http://php.net/manual/fr/pdostatement.r ... ample-1026)
- utiliser fetchAll() à la place de fetch pour récupérer directement l'ensemble des résultats

Re: Moteur de recherche / Message aucun Resultat

Posté : 14 nov. 2014, 19:48
par Nestecha
Et mettre tout les résultats dans un tableau multidimensionnel pour ensuite voir si le tableau est vide ou non, et boucler à travers le tableau pour les echo ?

Ca permettrait aussi d'organiser un peu mieux le code et de mettre l'extraction des données dans un fichier à part / une fonction.

Re: Moteur de recherche / Message aucun Resultat

Posté : 14 nov. 2014, 22:57
par yann18
fetch() renvoie false si la requête ne retourne rien.Dès lors il te suffit juste de tester que le type renvoyé par fetch() n'est pas false donc un array.

if( !empty( $reponse->fetch() ) {
      while ($donnees = $reponse->fetch()) {
       //affichage des données

      }

}else{
        echo 'Aucun résultat ne correspond à votre recherche, veuillez entrez un autre mot clé';
      }
Autre variante: tester si la méthode query() de PDO renvoie un array auquel cas tu peux directement le parcourir avec une boucle foreach:
      $reponse = $bdd -> query("SELECT * FROM gesast WHERE Equipesansespace LIKE '%$requete%' ORDER BY id ") ;
  if( !empty( $reponse  ) ) {
   foreach( $reponse as $val ) {
 //affichage

 }

 }else{
        echo 'Aucun résultat ne correspond à votre recherche, veuillez entrez un autre mot clé';
      }