Problème avec table vide

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème avec table vide

par rolusseum » 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....

par CyberTaf » 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 !

par Ryle » 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'; 

par CyberTaf » 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() );

par Ryle » 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'; 
}

par CyberTaf » 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 ?

par rolusseum » 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]

Problème avec table vide

par CyberTaf » 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 ????