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

Signaler
Messages postés
132
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
13 mai 2013
-
Messages postés
82
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
1 avril 2011
-
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 :)

10 réponses

Messages postés
82
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
1 avril 2011
1
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 --
Messages postés
82
Date d'inscription
jeudi 22 avril 2004
Statut
Membre
Dernière intervention
1 avril 2011
1
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 --
Messages postés
132
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
13 mai 2013
1
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. :)
Messages postés
132
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
13 mai 2013
1
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>';
}
}
}	
Messages postés
132
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
13 mai 2013
1
PS : ça ne marche toujours pas :p
Messages postés
132
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
13 mai 2013
1
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>';
}
}
}	
?>
Messages postés
132
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
13 mai 2013
1
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>';
}
}
}
?>
Messages postés
132
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
13 mai 2013
1
Je trouve vraiment rien d'autre, si vous avez une solution ...
Messages postés
132
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
13 mai 2013
1
Génial ça marche maintenant :)

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

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

a+

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