Problème boucle

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 boucle

par Bisvan » 24 avr. 2009, 14:06

Merci beaucoup pour ton aide.
En fait le problème venait de mon numcommande qui était "XXX-XXX" il ne le reconnaissait pas d'où aucuns résultats !

Encore merci pour cette simplification du script :)

par D4Y » 23 avr. 2009, 14:30

essai d'afficher le nombre de retour et enleve ta boucle pour voir si c'est ta boucle qui coince.
if(difheure($hdeb,$heureencours) >= 600) //600 secondes = 10 min
{
 // Comme il y a des résultats de commande passée dans les 10 dernières minutes, affichage du détail de ces commandes : 

    $retour2 = mysql_query('SELECT * FROM commande_contenu WHERE numcommande='.$data['numcommande'].' and idclient='.$data['idclient'].' ORDER BY idproduit');
    echo mysql_num_row();
    /*while ($donnees2 = mysql_fetch_array($retour2))
    {
    echo $donnees2['refproduit'];
    }*/
}
else{
//echo "Pas de commande passée dans les 10 dernières minutes";
}
}

par Bisvan » 23 avr. 2009, 12:17

Salut et d'abord merci pour ton aide.

Bon j'ai repris ton script pour tester. En fait mon problème à lieu à l'intérieur du IF qui dit si il y a des commandes de plus de 600 sec. Car je souhaite afficher le détail de ces commandes et rien ne s'affiche...

Voici ton script a partir du IF avec ce que j'ai rajouté à l'intérieur (du IF) :
// DONC APPEL DE LA FONCTION DE DIFFERENCE
if(difheure($hdeb,$heureencours) >= 600) //600 secondes = 10 min
{
 // Comme il y a des résultats de commande passée dans les 10 dernières minutes, affichage du détail de ces commandes : 

	$retour2 = mysql_query('SELECT * FROM commande_contenu WHERE numcommande='.$data['numcommande'].' and idclient='.$data['idclient'].' ORDER BY idproduit');
	while ($donnees2 = mysql_fetch_array($retour2))
	{
	echo $donnees2['refproduit'];
	}
}
else{
//echo "Pas de commande passée dans les 10 dernières minutes";
}
} 
Sauf que echo $donnees2['refproduit']; n'affiche rien alors même qu'il ya des commandes de + de 600 secondes !

par D4Y » 22 avr. 2009, 13:08

Euh il me semble vu la fonction de fou que tu utilises , que ca serait plus simple avec des calculs mktime() non ?
function difheure($heuredeb,$heurefin)
	{ 
	$hd=explode(":",$heuredeb);
	$hf=explode(":",$heurefin);
	$hdeb = mktime($hd[0],$hd[1],$hd[2]);
	$hfin = mktime($hf[0],$hf[1],$hf[2]);
	
	$dif = $hfin-$hdeb;
	
	return $dif;
	}
$dif sera égale à la différence en seconde.

ex: echo difheure("10:30:00","11:30:00"); //affiche 3600 donc 3600 secondes = 1h


Pour la suite

// heure du moment
$heureencours=date("H:i:s");
$query = "select * from commande";
$result = mysql_db_query("$dbbase", $query) or die($query . mysql_error( )); 
$nb_result = mysql_num_row();
for($i=0;$i<$nb_result;$i++)
{
$data = mysql_fetch_assoc();
$heurecommande= $data['heurecommande']; 

if(difheure($heurecommande,$heureencours) >= 600)//600 secondes = 10 min
{
echo $nb_result." commande(s) passée(s) dans les 10 dernières minutes";
}
else{
echo "Pas de commande passée dans les 10 dernières minutes";
}
}

Problème boucle

par Bisvan » 22 avr. 2009, 11:52

Bonjour,

j'ai un soucis sur un traitement de boucle effectuée par une tache cron (effectuée toutes les 10mn)....or je ne comprends pas où est le problème dans mon script, les résultats ne s'affichent pas !

Explication du script :
J'ai un écart entre deux heures exprimé en minute (l'heure de la commande et l'heure en cours)
Je souhaite afficher des résultats si l'écart entre ces deux heures est > à 10 mn
Voici le script :
// La fonction qui calcule la différence en minute entre deux heures
function difheure($heuredeb,$heurefin)
{
   $hd=explode(":",$heuredeb);
   $hf=explode(":",$heurefin);
   $hd[0]=(int)($hd[0]);$hd[1]=(int)($hd[1]);$hd[2]=(int)($hd[2]);
   $hf[0]=(int)($hf[0]);$hf[1]=(int)($hf[1]);$hf[2]=(int)($hf[2]);
   if($hf[2]<$hd[2]){$hf[1]=$hf[1]-1;$hf[2]=$hf[2]+60;}
   if($hf[1]<$hd[1]){$hf[0]=$hf[0]-1;$hf[1]=$hf[1]+60;}
   if($hf[0]<$hd[0]){$hf[0]=$hf[0]+24;}
   return (($hf[0]-$hd[0]).":".($hf[1]-$hd[1]).":".($hf[2]-$hd[2]));
}


// heure du moment
$heureencours=date("H:i:s");
$query = "select * from commande";
$result = mysql_db_query("$dbbase", $query) or die($query . mysql_error( ));
while ($r = mysql_fetch_array($result))
{
$heurecommande= $r['heurecommande'];

// fonction de différence entre temps de la commande et temps de passage de la tache cron=10 mn
$difheure=difheure($heurecommande,$heureencours);

// explode du résultat pour isoler les minutes 
$difminute=explode (":",$difheure);
$difminute2=$difminute[1];

		
// si la différence de minute est supérieur à 10 on affiche les résultats
if("10"<="$difminute2")
{
				
$retour2 = mysql_query('SELECT * FROM commande_contenu WHERE numcommande='.$r['numcommande'].' and idclient='.$r['idclient'].' ORDER BY idproduit');
while ($donnees2 = mysql_fetch_array($retour2))
{

$retourstock2 = mysql_query('SELECT * FROM produit WHERE id='.$donnees2['idproduit']);
$donneesstock2 = mysql_fetch_array($retourstock2);

// AFFICHAGE DU NOM DU PRODUIT
echo $donneesstock2 ['nomproduit'];
						

}

}
else
{
	
}
echo "<BR><BR>";
// fin boucle query
}mysql_query($query);
		
Je n'ai aucun résultat qui s'affiche.
Pour info les heures sont bonnes, le problème vient après le IF() et le WHILE de $donnees2 mais je sais pas pourquoi
:?