Page 1 sur 1

Problème avec table vide

Posté : 21 janv. 2009, 14:11
par CyberTaf
Bonjour !
Je m'arrache les cheveux sur un script :tir2:
Voici sa structure:
$req = mysql_query( " SELECT time  FROM table " ) or die ( mysql_error() );
while ( $res= mysql_fetch_array($req) ) {

if ( $res['time'] ) {
   // Traitement 
   }
else {
   echo 'table vide';
   }

   }
Ce que je cherche à faire, c'est traiter les données de la table s'il y en a, mais même en la vidant via un "TRUNCATE", le message "table vide" ne s'affiche pas :?

Quelqu'un aurait-il la solution à mon problème ????

Posté : 21 janv. 2009, 15:03
par rolusseum
Ben, tu n'executes pas ta requête
$resultat_req = execute_requeteSQL($req);

Ensuite, essaye de mettre une condition sur le résultat de ta requête

[php]

$req = mysql_query( " SELECT time FROM table " ) or die ( mysql_error() );
$resultat_req = execute_requeteSQL($req);

if($resultat_req !=null){
while ( $res= mysql_fetch_array($resultat_req) ) {
$res['time']
// Traitement
}
}
else {
echo 'table vide';
}
[/php]

Posté : 21 janv. 2009, 15:16
par CyberTaf
Merci pour ta réponse mais j'obtiens l'erreur
Fatal error: Call to undefined function execute_requeteSQL()
Problème de configuration Apache ?

Posté : 21 janv. 2009, 15:22
par Ryle
Euh... mysql_query() exécute justement la requête.....

Le problème ne vient absolument pas de là, mais de ton test qui est "mal placé".

En fait, si ta requête ne retourne pas de résultat, la commande mysql_fetch_array() va retourner la valeur FALSE et tu n'entreras pas dans le while (puisqu'aucun élément sur lesquels boucler). PHP ne va donc pas tester le if() et donc encore moins t'afficher le else.

Si ton traitement ne concerne qu'un seul enregistrement, il ne faut pas utiliser la structure while (aucun intérêt de boucler pour un seul élément) et un simple if te permet de vérifier s'il y a des résultats :
$req = mysql_query( " SELECT time  FROM table " ) or die ( mysql_error() ); 
if ( $res = mysql_fetch_array($req) ) { // s'il y a un résultat ou plus, le premier est stocké dans $res
   // tu peux ainsi faire ton traitement dessus
} 
else { // aucun résultat retourné par la requête
   echo 'table vide'; 
}

Posté : 21 janv. 2009, 15:35
par CyberTaf
Euh... mysql_query() exécute justement la requête.....

Le problème ne vient absolument pas de là, mais de ton test qui est "mal placé".
Ok Ryle, jusque-là je te suis.

Si ton traitement ne concerne qu'un seul enregistrement, il ne faut pas utiliser la structure while (aucun intérêt de boucler pour un seul élément) et un simple if te permet de vérifier s'il y a des résultats :
Justement, mon traitement peut concerner un seul enregistrements ou plusieurs, et c'est là que j'ai du mal à combiner le IF et le WHILE :(

Ma requête exacte c'est
$req = mysql_query( " SELECT time FROM table WHERE time != '$condition1' AND time > '$condition2' ORDER BY time ASC LIMIT 3 " ) or die ( mysql_error() );

Posté : 21 janv. 2009, 19:24
par Ryle
Dans ce cas on garde ton while et on se contente simplement de tester si la requête à retourné des résultats (avec mysql_num_rows() qui va te dire combien d'enregistrements ont été retournés), ou bien avec un simple flag :)
$req = mysql_query( " SELECT time  FROM table " ) or die ( mysql_error() );  
if (mysql_num_rows($req)==0)
  echo 'Y en a pas !';
else
  while ( $res = mysql_fetch_array($req) ) { 
     // Traitement 
  }
$req = mysql_query( " SELECT time  FROM table " ) or die ( mysql_error() );  
$resultats = FALSE;
while ( $res = mysql_fetch_array($req) ) { 
    $resultats = TRUE; // on est dans le while, il y a donc des résultats, on met à jour notre flag 
    // on peut aussi envisager un compteur au lieu d'un simple booléen

    // Traitement 
}
if ($resultats==FALSE)
  echo 'Pas d\'bol'; 

Posté : 21 janv. 2009, 20:45
par CyberTaf
Oh yeeeees !!!
Vraiment merci Ryle :priere: :-({|=
C'est vrai que je n'ai pas le reflex d'utiliser des commandes comme mysql_num_rows()
Je vais essayer de garder ce genre de chose dans un coin de ma (petite) mémoire.
Encore merci !

Posté : 21 janv. 2009, 21:41
par rolusseum
Désolé pour
[quote]
mysql_query() exécute justement la requête.....
[/quote]

Je viens de percuter que la commande mysql_query() était dans la même ligne que la requête.
mea culpa....