Simplifier 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 : Simplifier boucle

par tibious » 14 déc. 2008, 10:17

Impeccable, sa fonctionne!
Encore merci.

par Ryle » 14 déc. 2008, 00:06

Et pourquoi pas tout simplement un :
if  ($type_1 == 'Type A' 
  || $type_2 == 'Type A'  
  || $type_3 == 'Type A'
  || $type_4 == 'Type A'
  || $type_5 == 'Type A') { 
 echo "<tr> 
        <td width='5'><br>&nbsp;<br></td> 
        <td width='200' height='30' class='separation_b'><form action='index.php?numlien=113' method='POST'><input size='20' type=submit value='Lien continuer'> </td> 
        <td align='left' height='30' class='separation_b'>&nbsp;<b>Type A</b></form></td> 
        </tr>"; 
}
Pas besoin de mettre un else s'il n'y a pas d'autres cas à gérer. Pas non plus utile de stocker "type A" dans une variable si c'est uniquement pour l'afficher deux lignes en dessous ;)

par sadeq » 13 déc. 2008, 13:33

Oui je l'ai oublié celui-là, tiens le correctif:

Attention, j'ai modifié les if par des OR en n'utilisant qu'un seul if.
// Déterminer le type à afficher
$type = ""; // valeur par défaut
if  ($type_1 == 'Type A' 
|| $type_2 == 'Type A' 
|| $type_3 == 'Type A'
|| $type_4 == 'Type A' 
|| $type_5 == 'Type A') $type = 'Type A'; 

// Afficher le type déterminé s'il n'est pas vide
if (trim($type) != "") {
 echo "<tr>
        <td width='5'><br>&nbsp;<br></td>
        <td width='200' height='30' class='separation_b'><form action='index.php?numlien=113' method='POST'><input size='20' type=submit value='Lien continuer'> </td>
        <td align='left' height='30' class='separation_b'>&nbsp;<b>$type</b></form></td>
        </tr>";
}
else echo "";
// Fin de l'affichage du type 

par tibious » 13 déc. 2008, 13:17

C'est paraît tellement simple quand c'est écris par quelqu'un d'autre !
Merci pour le coup de main.
J'ai répondu trop vite;
si la case A n'est pas cochée le lien s'affiche quand même alors que je règlais ça avec:

Code : Tout sélectionner

else { echo""; }

par sadeq » 13 déc. 2008, 13:11

Je n'ai pas bien compris comment tu géres l'histoire des types A,B,C et les 24 fois. Mais tu peux sûrement simplifier le code que tu as donné : Il suffit de remarquer que dans tous les blocs "if" tu affiches la même chose avec echo, la seule partie qui change est le type affiché ($type_1, $type_2, ...)

Donc, tu peux simplifier en affichant une seule fois après avoir fait les if auparavant pour déterminer la valeur qui sera affichée.

Voici une proposition de simplification:
// Déterminer le type à afficher
$type = ""; // valeur par défaut
if      ($type_1 == 'Type A') $type = $type_1;
else if ($type_2 == 'Type A') $type = $type_2;
else if ($type_3 == 'Type A') $type = $type_3;
else if ($type_4 == 'Type A') $type = $type_4;
else if ($type_5 == 'Type A') $type = $type_5;

// Afficher le type déterminé
echo "<tr>
        <td width='5'><br>&nbsp;<br></td>
        <td width='200' height='30' class='separation_b'><form action='index.php?numlien=113' method='POST'><input size='20' type=submit value='Lien continuer'> </td>
        <td align='left' height='30' class='separation_b'>&nbsp;<b>$type</b></form></td>
        </tr>";
// Fin de l'affichage du type

NOTA:

Il existe une autre écriture pour reformuler les conditions réalisées par les if, il s'agit d'utiliser l'opérateur ternaire ? au lieu de if.
Puisqu'il s'agit simplement de déterminer une valeur à affecter dans une variable selon des conditions alternatives. Mais ce n'est pas une simplification logique du code. C'est juste une forme d'écriture simplifiée.
La su=yntaxe de l'opérateur ternaire est : $variable = condition ? valeur si vraie : valeur si fausse;

Voici, comment remplacer les if par l'opérateur ternaire ? :
// Déterminer le type à afficher
$type =  ($type_1 == 'Type A') || ($type_2 == 'Type A') || ($type_3 == 'Type A') || ($type_4 == 'Type A') || ($type_5 == 'Type A')  ? 'Type A' :  "";

Simplifier boucle

par tibious » 13 déc. 2008, 12:46

Bonjour à tous, je dois répéter 24 fois (Type A,B,C...) ce genre de boucle:
<?php
if($type_1 == 'Type A')
		{
		echo"
		<tr>
		<td width='5'><br>&nbsp;<br></td>
		<td width='200' height='30' class='separation_b'><form action='index.php?numlien=113' method='POST'><input size='20' type=submit value='Lien continuer'> </td>
		<td align='left' height='30' class='separation_b'>&nbsp;<b>$type_1</b></form></td>
		</tr>
		";
		}
	elseif($type_2 == 'Type A')
    {
		echo"
		<tr>
		<td width='5'><br>&nbsp;<br></td>
		<td width='200' height='30' class='separation_b'><form action='index.php?numlien=113' method='POST'><input size='20' type=submit value='Lien continuer'> </td>
		<td align='left' height='30' class='separation_b'>&nbsp;<b>$type_2</b></form></td>
		</tr>
		";
		}
	elseif($type_3 == 'Type A')
    {
		echo"
		<tr>
		<td width='5'><br>&nbsp;<br></td>
		<td width='200' height='30' class='separation_b'><form action='index.php?numlien=113' method='POST'><input size='20' type=submit value='Lien continuer'> </td>
		<td align='left' height='30' class='separation_b'>&nbsp;<b>$type_3</b></form></td>
		</tr>
		";
		}
	elseif($type_4 == 'Type A')
    {
		echo"
		<tr>
		<td width='5'><br>&nbsp;<br></td>
		<td width='200' height='30' class='separation_b'><form action='index.php?numlien=113' method='POST'><input size='20' type=submit value='Lien continuer'> </td>
		<td align='left' height='30' class='separation_b'>&nbsp;<b>$type_4</b></form></td>
		</tr>
		";
		}
	elseif($type_5 == 'Type A')
    {
		echo"
		<tr>
		<td width='5'><br>&nbsp;<br></td>
		<td width='200' height='30' class='separation_b'><form action='index.php?numlien=113' method='POST'><input size='20' type=submit value='Lien continuer'> </td>
		<td align='left' height='30' class='separation_b'>&nbsp;<b>$type_5</b></form></td>
		</tr>
		";
		}
	else
		{
		echo"";
		}
?>
En fonction du type le lien change.

Y-a-t'il une façon de la simplifier ou peut-être de l'écrire autrement?

Merci d'avance pour votre aide.