If & résultat requête

Résolu
maxireussite Messages postés 405 Statut Membre -  
maxireussite Messages postés 405 Statut Membre -
Bonjour,

De guerre las, je vous soumets mon problème.

Dans mon script ci-dessous la condition else s'affiche quand il y a des résultats, par contre la 1ère condition de "if" n'affiche rien quand la requête ne donne rien.

Qqu'un peut-il me dire où ça coince ?

Merci.

      $sql = "SELECT * 
         FROM pt_trouve
          LEFT JOIN pt_objets  ON pt_objets.objet_id = pt_trouve.objet_id
          LEFT JOIN pt_regions ON pt_regions.region_id = pt_trouve.region_id
         WHERE date_trouve between '$datedebut1' and '$datefin1' 
          AND pt_trouve.region_id = '$region_id'
          AND pt_trouve.categorie_id = '$categorie_id'";       
         
       
      //exécution de la requête:
      $requete = mysql_query($sql) ;
   
      //affichage des données:
      while($result = mysql_fetch_array($requete))
      {
  
        if (($result) == NULL)

     {
          echo '<font color="red">Aucun résultat trouvé.</font>';
     }
     
    else
    
     {
      "<div align=\"center\">".$result->trouve_id."------".$result->region."------".$result->objet." <a href=\"modification2.php?idPersonne=".$result-> date_trouve."\">modifier
               --- <a href=\"#\" onClick=\"confirme('".$result->trouve_id."')\" >supprimer</a></div>\n";      
         }
      }


7 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
     
    Bonjour
    si ta requête ne retourne rien. ..tu n'entre pas dans le while.... donc ton if ne sert à rien à cet endroit.
    2
  2. maxireussite Messages postés 405 Statut Membre 5
     
    Mon problème demeure entier !
    1
    1. Pitet Messages postés 2845 Statut Membre 530
       
      Comme indiqué tu dois faire ton if avant ton while :
      //affichage des données:
      if (!$result) {
           echo '<font color="red">Aucun résultat trouvé.</font>';
      } else {
           while($result = mysql_fetch_array($requete)) {
               echo $result['region'];
           }
      }
      
      0
      1. maxireussite Messages postés 405 Statut Membre 5 > Pitet Messages postés 2845 Statut Membre
         
        Bon ! Toujours pas de résultat quand la requete est vide...

        J'ai tenté d'adapter ton conseil. Je te mets le script au complet, merci de voir ce qui cloche.
        Cdlt.

        <?php
            if(isset($_POST['region_id'])) $region_id=$_POST['region_id'];
            else $region_id="";
         
        	if(isset($_POST['categorie_id'])) $categorie_id=$_POST['categorie_id'];
            else $categorie_id="";
            
            if(isset($_POST['datedebut'])) $datedebut=$_POST['datedebut'];
            else $datedebut="";
             
            if(isset($_POST['datefin'])) $datefin=$_POST['datefin'];
            else $datefin="";
            
            
             $datedebut1 = $datedebut?date('Y-m-d', strtotime($datedebut)):date('Y-m-d');
         	$datefin1 = $datefin?date('Y-m-d', strtotime($datefin)):date('Y-m-d');
          
            // On vérifie si les champs sont vides
            if(empty($region_id) OR empty($categorie_id) OR empty($datedebut) OR empty($datefin))
                  
               { 
              		echo '<font color="red">Tous les champs doivent être rempli.</font>';
        			echo"<html><br /><BR><a href=\"javascript:window.history.go(-1)\">Retour</a></html>";	
               }
               
            
            elseif(($region_id == 'vide') AND ($categorie_id == 'vide'))
                  
               { 
              		echo '<font color="red">Les champs Région et Categorie doivent être remplis.</font>';
        			echo"<html><br /><BR><a href=\"javascript:window.history.go(-1)\">Retour</a></html>";	
               }
        
        
         	else
               
               {
        		           //requête SQL:
        		    $sql = "SELECT * 
        			      FROM pt_trouve
        		      		LEFT JOIN pt_objets  ON pt_objets.objet_id = pt_trouve.objet_id
        	      			LEFT JOIN pt_regions ON pt_regions.region_id = pt_trouve.region_id
        			     	WHERE date_trouve between '$datedebut1' and '$datefin1' 
        			      	AND pt_trouve.region_id = '$region_id'
        			      	AND pt_trouve.categorie_id = '$categorie_id'";	      
        			      
        		     
        		    //exécution de la requête:
        		    $requete = mysql_query($sql) ;
        		 
        		   
        			//affichage des données:
        			if (!$requete) 
        			
        				{
        				     echo '<font color="red">Aucun résultat trouvé.</font>';
        				} 
        			
        			else 
        			
        				{
        				     while($result = mysql_fetch_array($requete)) 
        				     
        				     {
        				        echo "<div align=\"center\">".$result->trouve_id."------".$result->region."------".$result->objet." <a href=\"modification2.php?idPersonne=".$result-> date_trouve."\">modifier
        				           --- <a href=\"#\" onClick=\"confirme('".$result->trouve_id."')\" >supprimer</a></div>\n";
        
        				     }
        				}
        	   }
        0
  3. Yuh12 Messages postés 186 Date d'inscription   Statut Membre Dernière intervention   24
     
    Je pense qu'il serait bien de commencer par un print_r($result) dans le while pour voir ce que contient le réellement résultat.

    C'est peut-être
    if($result==FALSE) // au lieu de NULL

    Sinon je pense que le print_r() ou var_dump() te donneront la solution :)
    0
    1. maxireussite Messages postés 405 Statut Membre 5
       
      FALSE non plus ne donne rien.

      print_r() ou var_dump() ? Comment les utiliser ?
      MErci.
      0
  4. ReDLoG Messages postés 393 Statut Membre 57
     
    Bonjour,

    Et se profilera à l'horizon 2 nouveaux problèmes sur cette ligne:
    "<div align=\"center\">".$result->trouve_id."------".$result->region."------".$result->objet." <a href=\"modification2.php?idPersonne=".$result-> date_trouve."\">modifier --- <a href=\"#\" onClick=\"confirme('".$result->trouve_id."')\" >supprimer</a></div>\n"; 

    Car il n'y a pas d'echo et d'autre part, faire un mysql_fetch_array() n'a aucun sens (hormis d'obtenir un joli message d'erreur PHP) si on veut afficher des objets comme par exemple $result->trouve_id
    Cdlt.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. maxireussite Messages postés 405 Statut Membre 5
     
    Merci à tous pour vos pistes. Je prends le temps de voir tout cela.
    0
  7. Pitet Messages postés 2845 Statut Membre 530
     
    Effectivement la condition sur $result est fausse (plus l'habitude de travailler avec l'api mysql) : $result vaut FALSE si la requête a échouée, sinon elle retourne dans tous les cas une variable ressource sur laquelle tu peux utiliser mysql_num_rows() pour récupérer le nombre de résultat, soit :
    if (!$result) {
         echo 'Erreur sql : ' . mysql_error();
    } elseif (mysql_num_rows($result) == 0)
         echo '<font color="red">Aucun résultat trouvé.</font>';
    } else {
         while($result = mysql_fetch_array($requete)) {
             echo $result['region'];
         }
    }
    
    0
    1. maxireussite Messages postés 405 Statut Membre 5
       
      Une question avant d'essayer :

      Dans ta formule avec "if $résult".. Oui mais qu'est-ce qui définit "if $result" auparavant ? ne manquerait-il pas que chose .

      Merci de ta réponse.
      0
    2. maxireussite Messages postés 405 Statut Membre 5 > maxireussite Messages postés 405 Statut Membre
       
      Bon cela fonctionne cette fois. Mais j'ai un problème nouveau.

      La formule de recherche retourne 1 seul résultat là où il devrait y en avoir deux...
      0
    3. Pitet Messages postés 2845 Statut Membre 530
       
      Correction : il s'agit bien de la variable $requete et non $result.
      if (!$requete) {
          echo 'Erreur sql : ' . mysql_error();
      } else {
          $nb_resultats = mysql_num_rows($requete);
      
          if ($nb_resultats == 0) {
              echo '<font color="red">Aucun résultat trouvé.</font>';
          } else {
              echo '<font color="green">' . $nb_resultats . ' résultats trouvés.</font>';
              while($result = mysql_fetch_array($requete)) {
                  var_dump($result);
              }
          }
      }
      


      Ton nouveau problème doit venir de la requête sql et/ou des données en bdd. Utilises un client mysql (PhpMyAdmin ou autre) pour tester ta requête directement sur la base.
      0
    4. maxireussite Messages postés 405 Statut Membre 5 > Pitet Messages postés 2845 Statut Membre
       
      Avant la modif, avec mon script initial la requete retournait bien 2 lignes (ce qui est le résultat correct).

      Là il ne retourne qu'une seule...
      0
    5. maxireussite Messages postés 405 Statut Membre 5 > maxireussite Messages postés 405 Statut Membre
       
      En fait c soit il me retourne 2 lignes qd il faut, mais à ce moment la là condition "$Requete == Nul" ou "mysql_num_rows($requete) == 0" donne une page blanche
      ou bien vice-versa.

      Quand (mysql_num_rows($requete) == 0) afiiche aucun résultat trouvé, le sript ne me donne qu'une ligne là ou il devrait y avoir 2.

      Ce truc me rend dingue !
      dernière version :

          if (!$requete) 
            {
               echo 'Erreur sql : ' . mysql_error();
           }
           
         elseif(mysql_num_rows($requete) == 0)
            echo '<font color="red">Aucun résultat trouvé.</font>';    
           
           
         else
           {
              echo ("<div align=\"center\">".$result->trouve_id."------".$result->region."------".$result->objet." <a href=\"modification2.php?idPersonne=".$result-> date_trouve."\">modifier
                     --- <a href=\"#\" onClick=\"confirme('".$result->trouve_id."')\" >supprimer</a></div>\n"
                   ) ;
              }
      
      0
  8. maxireussite Messages postés 405 Statut Membre 5
     
    		    //affichage des données:
    		    while($result = mysql_fetch_object($requete))
    		    {
    		
    		       echo(
    		           "<div align=\"center\">".$result->date_trouve."------".$result->ville."------".$result->objet." 
    		           <a href=\"modification2.php?trouve_id=".$result-> trouve_id."\">consulter</a></div>\n"
    		           ) ;
                }
    
    0