Problème avec table vide

Eléphanteau du PHP | 32 Messages

21 janv. 2009, 14:11

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 ????

Eléphant du PHP | 139 Messages

21 janv. 2009, 15:03

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]

Eléphanteau du PHP | 32 Messages

21 janv. 2009, 15:16

Merci pour ta réponse mais j'obtiens l'erreur
Fatal error: Call to undefined function execute_requeteSQL()
Problème de configuration Apache ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

21 janv. 2009, 15:22

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'; 
}
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 32 Messages

21 janv. 2009, 15:35

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() );

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

21 janv. 2009, 19:24

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'; 
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 32 Messages

21 janv. 2009, 20:45

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 !

Eléphant du PHP | 139 Messages

21 janv. 2009, 21:41

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....