If & résultat requête

Résolu/Fermé
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 - Modifié par maxireussite le 8/04/2015 à 03:14
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 - 2 mai 2015 à 05:49
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

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
8 avril 2015 à 08:10
Bonjour
si ta requête ne retourne rien. ..tu n'entre pas dans le while.... donc ton if ne sert à rien à cet endroit.
2
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
9 avril 2015 à 00:55
Mon problème demeure entier !
1
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
9 avril 2015 à 09:31
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
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5 > Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022
10 avril 2015 à 01:48
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
Yuh12 Messages postés 184 Date d'inscription mercredi 7 mai 2014 Statut Membre Dernière intervention 28 septembre 2017 24
Modifié par Yuh12 le 8/04/2015 à 05:57
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
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
8 avril 2015 à 23:59
FALSE non plus ne donne rien.

print_r() ou var_dump() ? Comment les utiliser ?
MErci.
0
ReDLoG Messages postés 243 Date d'inscription mardi 12 mars 2013 Statut Membre Dernière intervention 28 octobre 2021 57
8 avril 2015 à 11:59
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
8 avril 2015 à 12:35
Merci à tous pour vos pistes. Je prends le temps de voir tout cela.
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
10 avril 2015 à 16:38
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
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
Modifié par maxireussite le 11/04/2015 à 02:58
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
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5 > maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020
11 avril 2015 à 03:59
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
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
11 avril 2015 à 19:05
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
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5 > Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022
12 avril 2015 à 04:44
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
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5 > maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020
Modifié par maxireussite le 12/04/2015 à 05:26
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
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
2 mai 2015 à 05:49
		    //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