Temps de complilation

Temps de complilation - PHP - Programmation

Marsh Posté le 16-10-2007 à 10:22:26    

Bonjour,
J'avais un programme qui validait un tableau (ligne par produit) et l'enregistre dans ma bdd,
maintenant j'ai ajouté la notion du pays (ligne par produit, par pays), donc j'ai 2 boucles: pour chaque produits{pour chaque pays{}}
et ça prend bcp de temps.
Il y a -t-il un moyen pour optimiser ce prog?

Reply

Marsh Posté le 16-10-2007 à 10:22:26   

Reply

Marsh Posté le 16-10-2007 à 10:23:51    

Bonjour,  
montre voir ton code s'il n'est pas trop long :)  
merci

Reply

Marsh Posté le 16-10-2007 à 10:29:01    

Voilà c'est trop long :s

Reply

Marsh Posté le 16-10-2007 à 10:30:47    

ton algo en gros c'est deux boucles imbriquées quoi ...  
c'est assez restreint pour t'aider ...

Reply

Marsh Posté le 16-10-2007 à 10:40:09    

Ton code stp :o

Reply

Marsh Posté le 16-10-2007 à 10:41:22    

bah il veux pas lol

Reply

Marsh Posté le 16-10-2007 à 10:44:27    

micfont999 a écrit :

ton algo en gros c'est deux boucles imbriquées quoi ...  
c'est assez restreint pour t'aider ...


Oui je comprend. je vais essayer d'expliquer l'algo.
Pour commencer, je fais une boucle pour récupérer les données de chaque produit du style:

Code :
  1. for ($i = 0; $i < (count($_POST["produit"])); $i++){
  2. for($j=0;$j<(count($_POST["pays"][$i]));$j++){
  3.      if(!empty($_POST["produit"][$i])) {$produit[]=trim($_POST["produit"][$i]);} else{$produit[]="";}
  4.   if(!empty($_POST["var1"][$i][$j])) {$var1[]=trim($_POST["var1"][$i][$j]);} else{$var1[]="";}
  5.   if(!empty($_POST["var2"][$i][$j])) {$var2[]=trim($_POST["var2"][$i][$j]);} else{$var2[]="";}
  6.   if(!empty($_POST["var3"][$i][$j])) {$var3[]=trim($_POST["var3"][$i][$j]);} else{$var3[]="";}
  7.   if(!empty($_POST["var4"][$i][$j])) {$var4[]=trim($_POST["var4"][$i][$j]);} else{$var4[]="";}
  8.   if(!empty($_POST["pays"][$i][$j])) {$pays[]=trim($_POST["pays"][$i][$j]);} else{$pays[]="";}
  9. }
  10. }


Ensuite
j'utilise la boucle : for($i=0;$i<sizeof($produit);$i++){} pour effectuer plein de traitement dans ma bdd càd:
1-  

Code :
  1. $sq="select * from xx where pays='".$pays[$i]."' $res = requete_SQL($sq);$Lig=mysql_num_rows($res);
  2. if (!$Lig){$req="INSERT INTO xx (...) values ('";
  3.  $req .= "{...}')";$resul = requete_SQL($req);
  4.           }
  5. else    {$req ="UPDATE xx SET";
  6.     $req.=" ..= '{..}'";
  7.     $req.=" WHERE ...'";$resul = requete_SQL($req);
  8.    }


 2- je fais un select, le resultat de ce select va me permettre soit d'inserer ou de modifier (update):

Code :
  1. if(($_POST["x"])=="x" ) {$sql  = "SELECT * FROM x";}
  2.   if(($_POST["y"])=="y" ) {$sql  = "SELECT * FROM y";}
  3.                $sql .= "WHERE ...'";
  4.   if(($_POST["x"])=="x" )  {$sql .= " and Codex='".$produit[$i]."'";}
  5.   if(($_POST["y"])=="y" )  {$sql .= " and Codey='".$produit[$i]."'";}
  6.   $sql .= " and pays='".$pays[$i]."'";
  7.   $resul = requete_SQL($sql);
  8.   $rows=mysql_num_rows($resul);
  9. if (!$rows){
  10. if(($_POST["x"])=="x" ) {$query="INSERT INTO x(...) values ('"; }
  11. if(($_POST["y"])=="y" ) {$query="INSERT INTO y(...) values ('";}
  12. $query1= "{$query}{$produit[$i]}','{$var1[$i]}','{$pays[$i]}',..)";$resul = requete_SQL($query1);//echo  $query1;
  13. $query2= "{$query}{$produit[$i]}','{$var2[$i]}','{$pays[$i]}',..)";$resul2 = requete_SQL($query2);
  14. $query3= "{$query}{$produit[$i]}','{$var3[$i]}','{$pays[$i]}',...)";$resul3 = requete_SQL($query3);
  15. $query4= "{$query}{$produit[$i]}','{$var4[$i]}','{$pays[$i]}',...)";$resul4 = requete_SQL($query4);
  16.  
  17. }
  18. else { }


 je t'envoie le else dans un autre post

Reply

Marsh Posté le 16-10-2007 à 10:44:58    

micfont999 a écrit :

bah il veux pas lol


 Elle veut pas  :)

Reply

Marsh Posté le 16-10-2007 à 10:47:44    

ah autant pour moi madame :) désolé :jap:

Reply

Marsh Posté le 16-10-2007 à 10:56:44    

micfont999 a écrit :

ton algo en gros c'est deux boucles imbriquées quoi ...  
c'est assez restreint pour t'aider ...


Pour le else:

Code :
  1. if(($_POST["x"])=="x" ) {$sql  = "SELECT * FROM x";}
  2. if(($_POST["y"])=="y" ) {$sql  = "SELECT * FROM y";}
  3.  $sql .= "...'";
  4. if(($_POST["x"])=="x" )  {$sql .= " and Codex='".$produit[$i]."'";}
  5. if(($_POST["y"])=="y" )  {$sql .= " and Codey='".$produit[$i]."'";}
  6. $sql .= " and pays='".$pays[$i]."'";
  7. $sql1 = " and date='".$Mois1."'"; $sql2 = " and date='".$Mois2."'"; $sql3 = " and date='".$Mois3."'";$sql4 = " and date='".$Mois4."'";
  8. $resul1 = requete_SQL($sql.$sql1);$resul2 = requete_SQL($sql.$sql2);$resul3 = requete_SQL($sql.$sql3);$resul4 = requete_SQL($sql.$sql4);
  9. $rows1=mysql_num_rows($resul1); $rows2=mysql_num_rows($resul2);$rows3=mysql_num_rows($resul3);$rows4=mysql_num_rows($resul4);
  10.             $query="INSERT INTO x(...) values ('";
  11. Script en rouge
  12. if (!$rows1){
  13.   $query1= "{$query}{$produit[$i]}','{$var1[$i]}','{$pays[$i]}',...,'{$Mois1}')";
  14.   $resul1 = requete_SQL($query1);}
  15. else{
  16.  if(($_POST["x"])=="x" ) $queryUP  ="UPDATE x SET";
  17.  if(($_POST["y"])=="y" ) $queryUP  ="UPDATE y SET";
  18.                           $queryUP .=" var1= '{$var1[$i]}',pays= '{$pays[$i]}',...";
  19.  if(($_POST["x"])=="x" ) $queryUP .="' WHERE codex= '";
  20.  if(($_POST["y"])=="y" ) $queryUP .="' WHERE codey= '";
  21.                          $queryUP .="{$produit[$i]}' and ... and Date= '{$Mois1}'";
  22.  $queryUP .= " and pays='".$pays[$i]."'";
  23.  $resul = requete_SQL($queryUP);
  24. }
  25. Fin de script en rouge


Ce qui est en rouge, je le répete 4 fois en fonction de mes 4 mois:
 
if (!$rows2){} else{}  if (!$rows3){} else{}  if (!$rows4){} else{}


Message édité par sabbahh le 16-10-2007 à 10:58:59
Reply

Marsh Posté le 16-10-2007 à 10:56:44   

Reply

Marsh Posté le 16-10-2007 à 11:00:42    

c'est un peu le bordel la dedant :)  
je regarde tout ça

Reply

Marsh Posté le 16-10-2007 à 11:08:57    

micfont999 a écrit :

ton algo en gros c'est deux boucles imbriquées quoi ...  
c'est assez restreint pour t'aider ...


C'est pas fini  :sarcastic:  

Code :
  1. if(($_POST["x"])=="x" ){
  2. $rq= mysql_query("select codex from prodtx where Codey='".$produit[$i]."' LIMIT 1" );$rows=mysql_num_rows($rq); 
  3. while($ligne= mysql_fetch_array ($rq)){
  4. $sqlM  = mysql_query( "SELECT distinct * FROM x WHERE pays='".$pays[$i]."' and ... and Codex='".$ligne['Codex']."' " );$resM= mysql_fetch_array($sqlM);$rowsM=mysql_num_rows($sqlM);
  5. $sqlS  = mysql_query( "SELECT distinct * FROM y WHERE pays='".$pays[$i]."' and ... and Codey='".$ligne['Codey']."'  " );$resS = mysql_fetch_array($sqlS);$rowsS=mysql_num_rows($sqlS);
  6. $sq="SELECT SUM(var) as masomme  FROM x where ";
  7. $sq.=" codex in (select codex from produitx where codey='".$produit[$i]."' )";
  8. $sq.= " ...";
  9. $sqlM1 = " and Date='".date('F Y')."'";$sqlM2 = " and Date='".$Mois2."'";$sqlM3 = " and Date='".$Mois3."'";$sqlM4  = " and Date='".$Mois4."'";
  10. $sum1 = mysql_query($sq.$sqlM1);$sum2 = mysql_query($sq.$sqlM2);$sum3 = mysql_query($sq.$sqlM3);$sum4 = mysql_query($sq.$sqlM4);
  11. $S1 = mysql_fetch_assoc($sum1);$S2 = mysql_fetch_assoc($sum2);$S3 = mysql_fetch_assoc($sum3);$S4 = mysql_fetch_assoc($sum4);
  12. if (!$rowsM){ $query="INSERT INTO FctMc('Codex',.. Date) values ('";
  13. $query1= "{$query}{$ligne['Codex']}','{$var1[$i]}',..,'{$Mois1}')";$resul = requete_SQL($query1);
  14. $query2= "{$query}{$ligne['Codex']}','{$var2[$i]}',..,'{$Mois2}')";$resul2 = requete_SQL($query2);
  15. $query3= "{$query}{$ligne['Codex']}','{$var3[$i]}',..,'{$Mois3}')";$resul3 = requete_SQL($query3);
  16. $query4= "{$query}{$ligne['Codex']}','{$var4[$i]}',..,'{$Mois4}')";$resul4 = requete_SQL($query4);
  17. }
  18. else{
  19. if($S1 ['masomme']<>$var1[$i]){
  20. $sq=" delete from x WHERE .. and Date= '{$Mois1}' and codeMercury in (select codex from produitx where codey='".$produit[$i]."' )";
  21. $re = requete_SQL($sq);
  22. $query="INSERT INTO FctMc(Codex,..) values ('";
  23. $query1= "{$query}{$ligne[Codex]}','{$var1[$i]}',...,'{$Mois1}')";$resul = requete_SQL($query1);
  24. }
  25. }
  26. }
  27. }


et là pareil je répete la boucle 4 fois en fonction de mes variables var1...var4:
 if($Si ['masomme']<>$vari[$i]){}

Reply

Marsh Posté le 16-10-2007 à 11:12:16    

quand tu dis que tu répete, tu veux quand même pas dire que tu fait un copier coller ??

Reply

Marsh Posté le 16-10-2007 à 11:13:58    

micfont999 a écrit :

ton algo en gros c'est deux boucles imbriquées quoi ...  
c'est assez restreint pour t'aider ...


Code :
  1. if(($_POST["y"])=="y" ){
  2. $rq= mysql_query("select Codey from produity where Codex='".$produit[$i]."'" );$rows=mysql_num_rows($rq); 
  3. while($ligne= mysql_fetch_array ($rq)){
  4. $sqlS  = mysql_query( "SELECT distinct * FROM y WHERE ... " );$resS = mysql_fetch_array($sqlS);$rowsS=mysql_num_rows($sqlS);
  5. $sq="SELECT SUM(var) as masomme  FROM x where ";
  6. $sq.=" codeMercury in (select codex from produitx where ..."' )";
  7. $sqlM1 = " and Date='".date('F Y')."'";$sqlM2 = " and Date='".$Mois2."'";$sqlM3 = " and Date='".$Mois3."'";$sqlM4  = " and Date='".$Mois4."'";
  8. $sum1 = mysql_query($sq.$sqlM1);$sum2 = mysql_query($sq.$sqlM2);$sum3 = mysql_query($sq.$sqlM3);$sum4 = mysql_query($sq.$sqlM4);
  9. $S1 = mysql_fetch_assoc($sum1);$S2 = mysql_fetch_assoc($sum2);$S3 = mysql_fetch_assoc($sum3);$S4 = mysql_fetch_assoc($sum4);
  10. if (!$rowsS){ $query="INSERT INTO y (...) values ('";
  11. $query1= "{$query}{$ligne['Codey']}','{$S1['masomme']}',...,'{$Mois1}')";$resul = requete_SQL($query1);//echo $query1;
  12. $query2= "{$query}{$ligne['Codey']}','{$S2['masomme']}',...,'{$Mois2}')";$resul2 = requete_SQL($query2);
  13. $query3= "{$query}{$ligne['Codey']}','{$S3['masomme']}',...,'{$Mois3}')";$resul3 = requete_SQL($query3);
  14. $query4= "{$query}{$ligne['Codey]}','{$S4['masomme']}',...,'{$Mois4}')";$resul4 = requete_SQL($query4);
  15. }
  16. else{
  17. $sqUp="UPDATE y SET var = '".$S1['masomme']."' WHERE ... AND Date = '".$Mois1."' and LogRez = '".$IdCptCle."' ";$resUP = requete_SQL($sqUp);
  18. $sqUp="UPDATE y SET Fct = '".$S2['masomme']."' WHERE ... AND Date = '".$Mois2."' and LogRez = '".$IdCptCle."' ";$resUP = requete_SQL($sqUp);
  19. // je répete ce update 4 fois aussi..
  20. }
  21. }
  22. }


Et voilà  :sarcastic: c'est lourd? long? pas propre?..?

Reply

Marsh Posté le 16-10-2007 à 11:15:04    

micfont999 a écrit :

quand tu dis que tu répete, tu veux quand même pas dire que tu fait un copier coller ??


ben càd que je repete le code mais je change les paramètres (en fonction des mois..)
je repete la synthaxe

Reply

Marsh Posté le 16-10-2007 à 11:15:43    

micfont999 a écrit :

c'est un peu le bordel la dedant :)  
je regarde tout ça


Ok  :(

Reply

Marsh Posté le 16-10-2007 à 11:19:57    

sabbahh a écrit :


ben càd que je repete le code mais je change les paramètres (en fonction des mois..)
je repete la synthaxe


 
Ouais t'a pas 4 fois ce code copier coller dans le programme quoi, j'ai eu peur :)  :whistle:  
on va pouvoir faire un peu de ménage la dedant tkt pas :)  
tu à déjà penser à te tourner vers des fonctions ?? ça serais déjà un tit plus

Reply

Marsh Posté le 16-10-2007 à 11:38:32    

ben comment?? ben je sais pas..

Reply

Marsh Posté le 16-10-2007 à 11:45:02    

est ce que tu peux juste expliquer concretement ce que tu veux faire avec cette application :) si ça ne te dérange pas ... pourquoi tu fait ce programme en gros .. ce que tu veux y faire, et le but final :)
merci

Reply

Marsh Posté le 16-10-2007 à 11:55:04    

Ok, c'est parti!
j'ai un tableau qui s'affiche en fonction d'un critère soit x soit Y.
dc je vérifie tjrs ce critére afin de construire mes requêtes (choix des tables, de code "id",..).
alors en gros j'enregistre ce qui était saisi par l'user; j'insere si c'est un nouveau enregistrement, j'update si modif. cela marchait assez vite avant que j'ajoute l'option suivante:
Insertion:
si on saisi sous le critère X, on affecte au premier codeY la valeur saisi (donc j'écris à la fois dans les 2 tables)
et si on saisi sous le critère Y, je fais la somme des codes X et je l'affecte au codeY correspondant.
Modification:
si on saisi sous le critère X, je regarde si la valeur saisi est égale à la somme des codesY. si OUI, je modifie rien. si NON, je l'affecte, comme vu pour l'insertion, au premier codeY et je delete ce que j'avais.  
et si on saisi sous le critère Y, je fais la somme des codes X et je lmodifie le codeY correspondant.
 
N.B: 1 codeY appartient 1 ou n codeX

Reply

Marsh Posté le 16-10-2007 à 11:57:58    

vais manger et je regarde à ça :)  
bon apetit :)

Reply

Marsh Posté le 16-10-2007 à 11:59:16    

sabbahh a écrit :

Ok, c'est parti!
j'ai un tableau qui s'affiche en fonction d'un critère soit x soit Y.
dc je vérifie tjrs ce critére afin de construire mes requêtes (choix des tables, de code "id",..).
alors en gros j'enregistre ce qui était saisi par l'user; j'insere si c'est un nouveau enregistrement, j'update si modif. cela marchait assez vite avant que j'ajoute l'option suivante:
Insertion:
si on saisi sous le critère X, j'affecte au premier codeY la valeur saisi, en plus biensur de l'affectation de la valeur au codeX(donc j'écris à la fois dans les 2 tables)
et si on saisi sous le critère Y, je fais la somme des codes X et je l'affecte au codeY correspondant, plus l'enregistrement des valeurs saisies à la tableY.
Modification:
si on saisi sous le critère X, je regarde si la valeur saisi est égale à la somme des codesY. si OUI, je modifie rien. si NON, je l'affecte, comme vu pour l'insertion, au premier codeY et je delete ce que j'avais, sans biensur oublier de modifier au niveau de X
et si on saisi sous le critère Y, je fais la somme des codes X et je lmodifie le codeY correspondant, et aussi les codes Y
 
N.B: 1 codeY appartient 1 ou n codeX


 
 
 

Reply

Marsh Posté le 16-10-2007 à 11:59:38    

Bon app à toi aussi.
a+

Reply

Marsh Posté le 22-10-2007 à 09:50:09    

plus de réponse :(

Reply

Marsh Posté le 22-10-2007 à 10:00:39    

si je regardais ton truc encore hier soir .. mais je suis un peu surbooké en ce moment .. d'ou le pourquoi j'ai pas encore répondu, promi avant la fin de la journée j'essai de t'aider

Reply

Marsh Posté le 22-10-2007 à 10:40:34    

Commençons par le commencement: la boucle "de nettoyage" initiale ne sert à rien, et tu injectes tes données sans les escaper dans tes requêtes SQL ce qui est une magnifique faille de sécurité.
 
Et tu devrais utiliser le foreach introduit en PHP4.
 
Si tu es en PHP 5.1 prière de passer à PDO ou mysqli et d'utiliser les prepared statements toussa.
 
Enfin, les trucs genre
 

Code :
  1. $query1= "{$query}{$produit[$i]}','{$var1[$i]}','{$pays[$i]}',..)";$resul = requete_SQL($query1);//echo  $query1;
  2. $query2= "{$query}{$produit[$i]}','{$var2[$i]}','{$pays[$i]}',..)";$resul2 = requete_SQL($query2);
  3. $query3= "{$query}{$produit[$i]}','{$var3[$i]}','{$pays[$i]}',...)";$resul3 = requete_SQL($query3);
  4. $query4= "{$query}{$produit[$i]}','{$var4[$i]}','{$pays[$i]}',...)";$resul4 = requete_SQL($query4);


 
non quoi [:pingouino]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 22-10-2007 à 10:49:46    

bah c'est du copier coller qui faut réduire. Je suis sur que ton truc peut tenir en une 20 aine de lignes même pas ..

Reply

Marsh Posté le 22-10-2007 à 10:52:08    

masklinn a écrit :

Commençons par le commencement: la boucle "de nettoyage" initiale ne sert à rien, et tu injectes tes données sans les escaper dans tes requêtes SQL ce qui est une magnifique faille de sécurité.
 
Et tu devrais utiliser le foreach introduit en PHP4.
 
Si tu es en PHP 5.1 prière de passer à PDO ou mysqli et d'utiliser les prepared statements toussa.
 
Enfin, les trucs genre
 

Code :
  1. $query1= "{$query}{$produit[$i]}','{$var1[$i]}','{$pays[$i]}',..)";$resul = requete_SQL($query1);//echo  $query1;
  2. $query2= "{$query}{$produit[$i]}','{$var2[$i]}','{$pays[$i]}',..)";$resul2 = requete_SQL($query2);
  3. $query3= "{$query}{$produit[$i]}','{$var3[$i]}','{$pays[$i]}',...)";$resul3 = requete_SQL($query3);
  4. $query4= "{$query}{$produit[$i]}','{$var4[$i]}','{$pays[$i]}',...)";$resul4 = requete_SQL($query4);


 
non quoi [:pingouino]


 
Excuse moi, mais j'ai rien compris  :whistle:  c'est pas bien ck je fais là?

Reply

Marsh Posté le 22-10-2007 à 10:53:51    

sabbahh a écrit :


 
Excuse moi, mais j'ai rien compris  :whistle:  c'est pas bien ck je fais là?


Ben non, c'est n'importe quoi, tu fais 4 fois la même chose en changeant 2 lettres [:pingouino]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 22-10-2007 à 10:56:37    

masklinn a écrit :


Ben non, c'est n'importe quoi, tu fais 4 fois la même chose en changeant 2 lettres [:pingouino]


Dans ce bout de code, j'ai deux variables qui change ("$var" ..)
cmt j'introduit le foreach ici?


Message édité par sabbahh le 22-10-2007 à 10:57:03
Reply

Marsh Posté le 22-10-2007 à 11:26:52    

micfont999 a écrit :

bah c'est du copier coller qui faut réduire. Je suis sur que ton truc peut tenir en une 20 aine de lignes même pas ..


Question:
 à ce niveau là (récupération des données saisies):

Code :
  1. for ($i = 0; $i < (count($_POST["produit"])); $i++){
  2. for($j=0;$j<(count($_POST["pays"][$i]));$j++){
  3.      if(!empty($_POST["produit"][$i])) {$produit[]=trim($_POST["produit"][$i]);} else{$produit[]="";}
  4.   if(!empty($_POST["var1"][$i][$j])) {$var1[]=trim($_POST["var1"][$i][$j]);} else{$var1[]="";}
  5.   if(!empty($_POST["var2"][$i][$j])) {$var2[]=trim($_POST["var2"][$i][$j]);} else{$var2[]="";}
  6.   if(!empty($_POST["var3"][$i][$j])) {$var3[]=trim($_POST["var3"][$i][$j]);} else{$var3[]="";}
  7.   if(!empty($_POST["var4"][$i][$j])) {$var4[]=trim($_POST["var4"][$i][$j]);} else{$var4[]="";}
  8.   if(!empty($_POST["pays"][$i][$j])) {$pays[]=trim($_POST["pays"][$i][$j]);} else{$pays[]="";}
  9. }
  10. }


Est ce qu'il y a moyen d'affecter les "trim($_POST["varX"][$i][$j])" à par exemple une seule variable (tab [X][]) et puis derrière réduire le nombre des lignes, genre:  

Code :
  1. for($j=0;$j<sizeoff(X)..){
  2. $query1= "{$query}{$prodtname[$i]}','{$var[X][$i]}','{$client[$i]}','{$IdCptCle}','{$Mois[X]}')";$resul = requete_SQL($query1);//echo  $query1;
  3. }


 

Reply

Marsh Posté le 22-10-2007 à 11:30:55    

oui c'est possible normalement, tout comme les POST et GET qu'on peut sans dout réduite aussi ... à essayer avec la concaténation aussi

Reply

Marsh Posté le 22-10-2007 à 12:07:38    

micfont999 a écrit :

oui c'est possible normalement, tout comme les POST et GET qu'on peut sans dout réduite aussi ... à essayer avec la concaténation aussi


déjà j'arrive à récupérer les données de cette façon:

Code :
  1. for($z=0;$z<4;$z++){
  2.   if(!empty($_POST["var"][$z][$i][$j])) {$var[$z][]=trim($_POST["var"][$z][$i][$j]);} else{$var[$z][]="";}
  3. }

Reply

Marsh Posté le 22-10-2007 à 12:56:06    

Bonjour,
 
Juste en passant, remplace  

Code :
  1. for ($i = 0; $i < (count($_POST["produit"])); $i++){
  2.   ...
  3. }


 
par :
 

Code :
  1. $max = count($_POST['produit']);
  2. for ($i = 0; $i < $max); ++$i) {
  3.   ...
  4. }


 
Dans ton code, tu parcours ton tableau pour compter le nombre d'éléments, à chaque tour de boucle !
 
Dans l'exemple corrigé, le nombre d'éléments de ton tableau n'est compté qu'une fois.  
Le ++$i induit en outre une optimisation par rapport au $i++, mais ça c'est plus de l'ordre du détail.
 
Voilà je n'ai pas le temps de regarder en détail, mais prends déjà ça... :D

Message cité 1 fois
Message édité par CyberDenix le 22-10-2007 à 13:01:16

---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 22-10-2007 à 13:05:24    

CyberDenix a écrit :

Bonjour,
 
Juste en passant, remplace  

Code :
  1. for ($i = 0; $i < (count($_POST["produit"])); $i++){
  2.   ...
  3. }


 
par :
 

Code :
  1. $max = count($_POST['produit']);
  2. for ($i = 0; $i < $max); ++$i) {
  3.   ...
  4. }



Code :
  1. for($_POST['produit'] as $produit) {
  2.    // ...
  3. }


de rien

CyberDenix a écrit :

Dans ton code, tu parcours ton tableau pour compter le nombre d'éléments, à chaque tour de boucle !


Heuu j'espère bien que non, on est pas en C, dans les langages modernes si les implémenteurs sont pas trop cons ils stockent la taille du tableau directement à côté du tableau dans un cache [:pingouino]

CyberDenix a écrit :


Le ++$i induit en outre une optimisation par rapport au $i++, mais ça c'est plus de l'ordre du détail.


C'est surtout de l'ordre de la connerie, on est pas en ASM là. Même en javascript, ya pas de différence entre les deux dans 3 navigateurs sur 4 (sous MSIE, c'est même l'inverse)


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 22-10-2007 à 13:30:01    

masklinn a écrit :


Code :
  1. for($_POST['produit'] as $produit) {
  2.    // ...
  3. }


de rien


 

Code :
  1. foreach($_POST['produit'] as $produit) {
  2.    // ...
  3. }


de rien


---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 22-10-2007 à 13:38:30    

c'est mieux en effet

Reply

Marsh Posté le 22-10-2007 à 16:33:44    

micfont999 a écrit :

c'est mieux en effet


je m'en sors très bien avec ce petit code sauf k'il me met des warning

Code :
  1. $sq[] = $Mois[$z];
  2. @$resul[] = requete_SQL($sql.$sq[$z]."'" );
  3. @$rows[]=mysql_num_rows($resul[$z]);


j'ai mis les "@" pour voir si ça fonctionne quand même et c'est le cas. pourquoi ces warnings?
pour le premier: Warning: Cannot use a scalar value as an array  
le 2éme: Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in

Message cité 1 fois
Message édité par sabbahh le 22-10-2007 à 16:34:11
Reply

Marsh Posté le 22-10-2007 à 17:04:30    

je pense que pour le num rows il faut mettre $resul[$z] dans une variable avant ..
 
pour le problème de cannot use scalar :  
verifie que tu n'a pas le même nom que dans un champs de ta base de donnée, je ne pense pas mais on ne sais jamais

Message cité 1 fois
Message édité par micfont999 le 22-10-2007 à 17:14:59
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed