Optimisation d'une requête complexe via boucle for() [Résolu]

Messages postés
132
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
13 mai 2013
- - Dernière réponse : chino18
Messages postés
82
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
1 avril 2011
- 15 juin 2010 à 15:45
J'ai une requête qui affiche une certaine récurrence, mais j'ai du mal à inventer une incrémentation de type +1 dans des noms de variables php est-ce possible ?

Quoiqu'il en soit j'ai un code extrêmement lourd :

    <option value="<? echo $idtete;?>" selected="selected"><? echo $fet2['name'];?></option>
    <?
if ($fetch['slot1'] == NULL)
{}
else
{
$slot1 = $fetch['slot1'];
$equip2 = mysql_query("SELECT name,id FROM elfik_objet WHERE id='$slot1' AND type='pied'") or die(mysql_error());
$aff = mysql_fetch_assoc($equip2);
$row = mysql_num_rows($equip2);
if($row>0)
{
echo '<option value="',$aff['id'],'">',$aff['name'],'</option>';
}
}
if ($fetch['slot2'] == NULL)
{}
else
{$slot2 = $fetch['slot2'];
$equip3 = mysql_query("SELECT name,id FROM elfik_objet WHERE id='$slot2' AND type='tete' ") or die(mysql_error());
$aff2 = mysql_fetch_assoc($equip3);
$row2 = mysql_num_rows ($equip3);
if($row2>0)
{
echo '<option value="',$aff2['id'],'">',$aff2['name'],'</option>';
}
}
if ($fetch['slot3'] == NULL)
{}
else
{$slot3 = $fetch['slot3'];
$equip4 = mysql_query("SELECT name,id FROM elfik_objet WHERE id='$slot3' AND type='tete' ") or die(mysql_error());
$aff3 = mysql_fetch_assoc($equip4);
$row3 = mysql_num_rows ($equip4);
if($row2>0)
{
echo '<option value="',$aff3['id'],'">',$aff3['name'],'</option>';
}
}
if ($fetch['slot4'] == NULL)
{}
else
{$slot4 = $fetch['slot4'];
$equip5 = mysql_query("SELECT name,id FROM elfik_objet WHERE id='$slot4' AND type='tete' ") or die(mysql_error());
$aff4 = mysql_fetch_assoc($equip5);
$row4 = mysql_num_rows ($equip5);
if($row4>0)
{
echo '<option value="',$aff4['id'],'">',$aff4['name'],'</option>';
}
}
if ($fetch['slot5'] == NULL)
{}
else
{$slot5 = $fetch['slot5'];
$equip6 = mysql_query("SELECT name,id FROM elfik_objet WHERE id='$slot5' AND type='tete' ") or die(mysql_error());
$aff5 = mysql_fetch_assoc($equip6);
$row5 = mysql_num_rows ($equip6);
if($row5>0)
{
echo '<option value="',$aff5['id'],'">',$aff5['name'],'</option>';
}
}
if ($fetch['slot6'] == NULL)
{}
else
{$slot6 = $fetch['slot6'];
$equip7 = mysql_query("SELECT name,id FROM elfik_objet WHERE id='$slot6' AND type='tete' ") or die(mysql_error());
$aff6 = mysql_fetch_assoc($equip7);
$row6 = mysql_num_rows ($equip7);
if($row6>0)
{
echo '<option value="',$aff6['id'],'">',$aff6['name'],'</option>';
}
}
if ($fetch['slot7'] == NULL)
{}
else
{$slot7 = $fetch['slot7'];
$equip8 = mysql_query("SELECT name,id FROM elfik_objet WHERE id='$slot7' AND type='tete' ") or die(mysql_error());
$aff7 = mysql_fetch_assoc($equip8);
$row7 = mysql_num_rows ($equip8);
if($row7>0)
{
echo '<option value="',$aff7['id'],'">',$aff7['name'],'</option>';
}
}
if ($fetch['slot8'] == NULL)
{}
else
{$slot8 = $fetch['slot8'];
$equip9 = mysql_query("SELECT name,id FROM elfik_objet WHERE id='$slot8' AND type='tete' ") or die(mysql_error());
$aff8 = mysql_fetch_assoc($equip9);
$row8 = mysql_num_rows ($equip9);
if($row8>0)
{
echo '<option value="',$aff8['id'],'">',$aff8['name'],'</option>';
}
}
if ($fetch['slot9'] == NULL)
{}
else
{$slot9 = $fetch['slot9'];
$equip10 = mysql_query("SELECT name,id FROM elfik_objet WHERE id='$slot9' AND type='tete' ") or die(mysql_error());
$aff9 = mysql_fetch_assoc($equip10);
$row9 = mysql_num_rows ($equip10);
if($row9>0)
{
echo '<option value="',$aff9['id'],'">',$aff9['name'],'</option>';
}
}
if ($fetch['slot10'] == NULL)
{}
else
{$slot10 = $fetch['slot10'];
$equip11 = mysql_query("SELECT name,id FROM elfik_objet WHERE id='$slot10' AND type='tete' ") or die(mysql_error());
$aff10 = mysql_fetch_assoc($equip11);
$row10 = mysql_num_rows ($equip11);
if($row10>0)
{
echo '<option value="',$aff10['id'],'">',$aff10['name'],'</option>';
}
}
?>



Est-il possible d'optimiser cela via une boucle for() car ma page contient 6 fois ce type d'exemple et c'est ahurissant ^^ ?

Merci pour votre lecture :)
Afficher la suite 

10 réponses

Meilleure réponse
Messages postés
82
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
1 avril 2011
1
3
Merci
Mmm bon.

Pour commencer, n'écris pas
$fetch['$slotx']

mais
$fetch[$slotx]



Ensuite, qu'est-ce que tu entends par "ca ne marche pas"?

As-tu un message d'erreur, ou un warning, etc ?

Je te conseille de vérifier ta requête. Fais un "echo" pour tester si elle est correcte.



-- message approuvé par Jean-Claude Van Damme --

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 202 internautes nous ont dit merci ce mois-ci

Commenter la réponse de chino18
Messages postés
82
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
1 avril 2011
1
0
Merci
Salut.
Si tu veux créer des variables dynamiques, et pour reprendre un peu ton exemple, tu peux faire quelque chose comme:


for($i=1; $i<10; $i++){
  $nom_de_ta_variable = "slot".$i;

  // création de la variable
  ${$nom_de_ta_variable} = "valeur bidon";

  /*
    ton traitement...
  */
}


A chaque passage de boucle, tu auras $slot1, $slot2, $slot3...

A+

-- message approuvé par Jean-Claude Van Damme --
Commenter la réponse de chino18
Messages postés
132
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
13 mai 2013
1
0
Merci
Hum oki, bon j'en suis là :


<option value="<? echo $idtete;?>" selected="selected"><? echo $fet2['name'];?></option>
<?

for($i=1; $i<10; $i++)
{
$slotx = "slot".$i;
$fetchs = "fetch".$i;
if ($fetchs['$slotx'] == NULL)
{}
else
{
$slots = "slot".$i;
${$slots} = $fetchs['$slotx'];

$equips = "equip".$i;
${$equips} = mysql_query("SELECT name,id FROM elfik_objet WHERE id='$slots' AND type='pied'") or die(mysql_error());

$affs = "aff".$i;
${affs} = mysql_fetch_assoc($equips);

$rows = "row".$i;
${rows} = mysql_num_rows($equips);
if($rows>0)
{
echo '<option value="',$affs['id'],'">',$affs['name'],'</option>';
}
}
}
?>

Sauf que ça ne marche pas, j'ai du faire une erreur :'(
Je vous tiens au courant dès que j'ai trouvé. Ya peut être des choses que je peux pas écrire comme je l'ai fais. Si quelqu'un détecte des erreurs de syntaxes. :)
Commenter la réponse de monoski
Messages postés
132
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
13 mai 2013
1
0
Merci
Petite correction :

 <option value="<? echo $idtete;?>" selected="selected"><? echo $fet2['name'];?></option>
    <?

for($i=1; $i<10; $i++)
{	
$slotx = "slot".$i;	
$fetchs = "fetch".$i;
if ($fetchs['$slotx'] == NULL)
{}
else
{
${$slotx} = $fetchs['$slotx'];
   
$equips = "equip".$i;
${$equips} = mysql_query("SELECT name,id FROM elfik_objet WHERE id='$slotx' AND type='pied'") or die(mysql_error());

$affs = "aff".$i;
${affs} = mysql_fetch_assoc($equips);

$rows = "row".$i;
${rows} = mysql_num_rows($equips);
if($rows>0)
{
echo '<option value="',$affs['id'],'">',$affs['name'],'</option>';
}
}
}	
Commenter la réponse de monoski
Messages postés
132
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
13 mai 2013
1
0
Merci
PS : ça ne marche toujours pas :p
Commenter la réponse de monoski
Messages postés
132
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
13 mai 2013
1
0
Merci
Ca marche toujours pas mais j'ai corrigé une erreur supplémentaire :
 <?

for($i=1; $i<10; $i++)
{	
$slotx = "slot".$i;	
$fetchs = "fetch".$i;
if ($fetch['$slotx'] == NULL)
{}
else
{
${$slotx} = $fetch['$slotx'];
   
$equips = "equip".$i;
${$equips} = mysql_query("SELECT name,id FROM elfik_objet WHERE id='${$slotx}' AND type='pied'") or die(mysql_error());

$affs = "aff".$i;
${affs} = mysql_fetch_assoc(${$equips});

$rows = "row".$i;
${rows} = mysql_num_rows(${$equips});
if(${rows}>0)
{
echo '<option value="',${affs}['id'],'">',${affs}['name'],'</option>';
}
}
}	
?>
Commenter la réponse de monoski
Messages postés
132
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
13 mai 2013
1
0
Merci
La même... Mais là je sèche !
 <option value="<? echo $idtete;?>" selected="selected"><? echo $fet2['name'];?></option>

<?

for($i=1; $i<11; $i++)
{
$slotx = "slot".$i;
$fetchs = "fetch".$i;
if ($fetch['$slotx'] == NULL)
{}
else
{
${$slotx} = $fetch['$slotx'];

$equips = "equip".$i;
${$equips} = mysql_query("SELECT name,id FROM elfik_objet WHERE id='${$slotx}' AND type='pied'") or die(mysql_error());

$affs = "aff".$i;
${$affs} = mysql_fetch_assoc(${$equips});

$rows = "row".$i;
${$rows} = mysql_num_rows(${$equips});
if(${$rows}>0)
{
echo '<option value="',${$affs}['id'],'">',${$affs}['name'],'</option>';
}
}
}
?>
Commenter la réponse de monoski
Messages postés
132
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
13 mai 2013
1
0
Merci
Je trouve vraiment rien d'autre, si vous avez une solution ...
Commenter la réponse de monoski
Messages postés
132
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
13 mai 2013
1
0
Merci
Génial ça marche maintenant :)

Merci beaucoup coco :)
Commenter la réponse de monoski
Messages postés
82
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
1 avril 2011
1
0
Merci
No problemo.

Penses à cliquer sur "Réponse acceptée".

a+

-- message approuvé par Jean-Claude Van Damme --
Commenter la réponse de chino18