Page 1 sur 1

Liste déroulante

Posté : 27 sept. 2007, 10:58
par tunsia
bonjour,
j'ai un problème de compréhention de code pour ajouter des choix dans une liste déroulante. Voici le code:
if($config['label_type'] >= 1) {
			 	echo "          <tr>";
			 	echo "            <td width=\"40%\" height=\"25\"><span class=\"doc\">"._TYPEAD."</span></td>";
			 	echo "            <td width=\"60%\" height=\"25\">";
			 	echo " 				<select class=\"doc-SELECT\" size=\"1\" name=\"typead\">";
			 	if($row['type'] == 1) $sel="selected=\selected\""; else $sel="";
				echo "              	<option value=1 ".$sel.">"._TOSALE."</option>";
				if($row['type'] == 0) $sel="selected=\"selected\""; else $sel="";
				echo "              	<option value=0 ".$sel.">"._TOSEARCH."</option>";
				echo "            	</select>";
				echo "          </tr>";
				}
Ce qui a pour résultat 2 sélections possibles: ._TOSALE. donne "je vend"(défini dans le global.php) et ._TOSEARCH. donne "je recherche"(défini dans le global.php).
Je souhaite rajouter 5 autres sélections mais c'est là que je sollicite votre aide, qulle est la syntaxe à adoper?
le code souligné suvant me pose problème:
if($row['type'] [u]== 1)[/u] $sel="selected=\selected\""; else $sel="";
				echo "              	<option [u]value=1 [/u]".$sel.">"._TOSALE."</option>";
Que dois je mettre pour avoir une liste déroulante à 7 choix?
Merci de votre aide
Cordialement

Re: Liste déroulante

Posté : 27 sept. 2007, 12:07
par Ryle
Modération :
tunsia, afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ

Que dois je mettre pour avoir une liste déroulante à 7 choix?
Il te suffit de mettre 7 balises de type option au lieu de 2. Quant à la syntaxe à adopter, il te suffit de te baser sur celle des 2 premières pour les 5 suivantes :)

Posté : 27 sept. 2007, 14:18
par Invité
merci de me répondre, je suis désolée pour les balises, je vais les utiliser.
les lignes suivantes pourraient être:
if($row['type'] == 1) $sel="selected=\selected\""; else $sel=""; 
echo " <option value=1 ".$sel.">"._TOBUILD."</option>"; 
if($row['type'] == 0) $sel="selected=\"selected\""; else $sel=""; 
echo " <option value=0 ".$sel.">"._TOSEE."</option>";
ce qui donnerait donc au final pour 4 sélections:
if($config['label_type'] >= 1) { 
echo " <tr>"; 
echo " <td width=\"40%\" height=\"25\"><span class=\"doc\">"._TYPEAD."</span></td>"; 
echo " <td width=\"60%\" height=\"25\">"; 
echo " <select class=\"doc-SELECT\" size=\"1\" name=\"typead\">"; 
if($row['type'] == 1) $sel="selected=\selected\""; else $sel=""; 
echo " <option value=1 ".$sel.">"._TOSALE."</option>"; 
if($row['type'] == 0) $sel="selected=\"selected\""; else $sel=""; 
echo " <option value=0 ".$sel.">"._TOSEARCH."</option>";
if($row['type'] == 1) $sel="selected=\selected\""; else $sel=""; 
echo " <option value=1 ".$sel.">"._TOBUILD."</option>"; 
if($row['type'] == 0) $sel="selected=\"selected\""; else $sel=""; 
echo " <option value=0 ".$sel.">"._TOSEE."</option>";
echo " </select>"; 
echo " </tr>"; 
} 
Est-ce bien cela? A dire vrai, c'est le 0 et le 1 qui me pertube!
Merci encore
cordialement

Posté : 27 sept. 2007, 14:39
par Ryle
Les 0 et 1 qui sont utilisés dans ton select correspondent à des "identifiants" associés aux types _TOSEARCH et _TOSALE. Ainsi si ta variable $row['type'] a la valeur 1, tu sais qu'il s'agit d'un type _TOSALE, et tu peux ajouter l'attribut 'selected' dans l'option correspondante pour qu'elle soit sélectionnée par défaut :)

Si tu veux rajouter de nouveaux types, il te faut leur affecter une valeur arbitraire qui te permettra de les reconnaitre et de les sélectionner. Par exemple si tu octrois la valeur "2" au type _TOBUILD, ton option devra être ainsi (j'en profite pour la reformater un peu ;)) :
if ($row['type'] == 2) // si la valeur de $row['type'] correspond au type _TOBUILD soit "2" ici
  $sel = 'selected="selected"'; // on ajoute l'attribut "selected"
else 
  $sel = '';  // sinon on laisse vide

echo '<option value="2" '. $sel .'>'. _TOBUILD. '</option>'; // on définie également la valeur "2" pour l'option
Nota : une chaine délimitée entre apostrophes te permet d'utiliser des guillemets sans avoir besoin de les protéger d'un antislash, ça rend le code plus lisible surtout lorsque tu affiches du html :)

Et pour simplifier un peu l'écriture du if, tu peux utiliser l'opérateur ternaire (voire la faq pour plus d'infos)
$sel = ($row['type'] == 2) ? 'selected="selected"' : '';
echo '<option value="2" '. $sel .'>'. _TOBUILD. '</option>'; 

suite aprés correction

Posté : 28 sept. 2007, 11:26
par tunsia
bonjour,
J'ai suivi tes conseils de code pas à pas, ce qui donne ça:
if($config['label_type'] >= 1) {  
echo " <tr>";  
echo " <td width=\"40%\" height=\"25\"><span class=\"doc\">"._TYPEAD."</span></td>";  
echo " <td width=\"60%\" height=\"25\">";  
echo " <select class=\"doc-SELECT\" size=\"1\" name=\"typead\">";
if($row['type'] == 1)
 $sel = 'selected="selected"'; 
else  
 $sel = '';   
echo ' <option value="1" '. $sel .'>'. _TOSALE. '</option>'; 
if($row['type'] == 0)
 $sel = 'selected="selected"'; 
else  
 $sel = '';   
echo ' <option value="0" '. $sel .'>'. _TOSEARCH. '</option>'; 
if($row['type'] == 2)
 $sel = 'selected="selected"'; 
else  
 $sel = '';   
echo ' <option value="2" '. $sel .'>'. _TOBUILD. '</option>'; 
if($row['type'] == 3)
 $sel = 'selected="selected"'; 
else  
 $sel = '';   
echo ' <option value="3" '. $sel .'>'. _TOSEE. '</option>';
echo " </select>";  
echo " </tr>";  
} 
puis ça au final
if($config['label_type'] >= 1) {  
echo " <tr>";  
echo " <td width=\"40%\" height=\"25\"><span class=\"doc\">"._TYPEAD."</span></td>";  
echo " <td width=\"60%\" height=\"25\">";  
echo " <select class=\"doc-SELECT\" size=\"1\" name=\"typead\">";
$sel = ($row['type'] == 1) ? 'selected="selected"' : ''; 
echo '<option value="1" '. $sel .'>'. _TOSALE. '</option>';
$sel = ($row['type'] == 0) ? 'selected="selected"' : ''; 
echo '<option value="0" '. $sel .'>'. _TOSEARCH. '</option>';
$sel = ($row['type'] == 2) ? 'selected="selected"' : ''; 
echo '<option value="2" '. $sel .'>'. _TOBUILD. '</option>';
$sel = ($row['type'] == 3) ? 'selected="selected"' : ''; 
echo '<option value="3" '. $sel .'>'. _TOSEE. '</option>';
echo " </select>";  
echo " </tr>";  
} 
Est ce bien comme il faut?
A bientôt

suite liste déroulante

Posté : 01 oct. 2007, 11:50
par tunsia
voir sujet
http://www.phpfrance.com/forums/voir_sujet-33059.php
voila j'ai d'autres petits soucis liés à la problématique de départ je remets donc la syntaxe du fichier d'origine:
if($label_type) {
 	echo "          <tr>\n";
 	echo "            <td width=\"40%\" height=\"25\"><b>"._TYPEAD."</b></td>\n";
 	echo "            <td width=\"60%\" height=\"25\">\n";
 	echo " 				<select size=\"1\" name=\"type\">\n";
 	if($row['type'] == 1) $sel="selected"; else $sel="";
	echo "              	<option value=1 $sel>"._TOSALE."</option>\n";
	if($row['type'] == 0) $sel="selected"; else $sel="";
	echo "              	<option value=0 $sel>"._TOSEARCH."</option>\n";
	echo "            	</select>\n";
	echo "          </tr>\n";
	}
modifier la liste c'est bon mais j'ai d'autres expressions liées a cela:
if($config['label_type'] >= 1) {
				if($type == 1) $displaytype = _ABREVTOSALE;
				else $displaytype = _ABREVTOSEARCH;
			   	echo "<font color=red>".$displaytype."</font>&nbsp;";
			}
_ABREVTOSALE= AV. affiché en rouge et _ABREVTOSEARCH=R.
je souhaite donc rajouter 2 abréviations:_ABREVTOBUID=C. et _ABREVTOSEE=V.
Quelle est la syntaxe à adopter?
ensuite, j'ai dans un autre fichier
f($config['label_type'] >= 1) {
		if($type == 1) $displaytype = _ABREVTOSALE;
		else $displaytype = _ABREVTOSEARCH;
	   	echo "<font color=red>".$displaytype."</font>&nbsp;";
	}
puis autre fichier
if($config['label_type'] >= 1) {
echo "		<tr><td align=\"right\">\n";
echo "			<span class=\"doc-sub\"><font color=red>" . _ABREVTOSALE . "</font> : " . _TOSALE2 . " - <font color=red>" . _ABREVTOSEARCH . "</font> : " . _TOSEARCH2 . "</span>\n";
echo "    	</td></tr>\n";
}
tout ceci ne concernant donc que les abréviations. Comme vous pouvez le voir, j'ai aussi _TOSALE2 =vente et _TOSEARCH2=recherche
le but et pour moi de rajouter_TOBUILD2=construire et _TOSEE2=voir
mais j'ai vraiment du mal avec la syntaxe, voici le code:
fichier1
if($config['label_type'] >= 1) {
if($typead == 1) $typetext = _TOSALE2;
else $typetext = _TOSEARCH2;
$message .= ""._TYPEAD." : $typetext\n";
}
fichier2
f($type == 1) $typetext = _TOSALE2;
		else $typetext = _TOSEARCH2;
fichier3
if($config['label_type'] >= 1) {
			if($ad['type'] == 1) $type = _TOSALE2;
			else 				$type = _TOSEARCH2;
			$display_type .= ""._TYPE." : $type<br />\n";
			
		}
fichier 4
if($row['type'] == 1) $typetext = _TOSALE2;
				else $typetext = _TOSEARCH2;
				$cat_id = $row['cat_id'];
fichier5
if($config['label_type'] >= 1) {
			echo "		<tr><td align=\"right\">";
	        echo "			<span class=\"doc-sub\"><font color=red>"._ABREVTOSALE."</font> : "._TOSALE2." - <font color=red>"._ABREVTOSEARCH."</font> : "._TOSEARCH2."</span>";
	        echo "    	</td></tr>";
       	}
Quelqu'un pourrait-il m'aider s'il vous plait? :oops:

Posté : 01 oct. 2007, 13:27
par Ryle
Essayes de comprendre ce qui est fait et d'exprimer ce que tu souhaites, tu verras que la syntaxe viendra naturellement. Par exemple essayons de déchiffrer ce code ci :
if($config['label_type'] >= 1) { 
                if($type == 1) $displaytype = _ABREVTOSALE; 
                else $displaytype = _ABREVTOSEARCH; 
                   echo "<font color=red>".$displaytype."</font>&nbsp;"; 
            } 
Littéralement, ça nous donne

Code : Tout sélectionner

SI la variable $config['label_type'] a une valeur supérieure ou égale à 1 : SI la variable $type est égale à 1 on stocke la valeur de _ABREVTOSALE dans la variable $displaytype SINON on stocke la valeur de _ABREVTOSEARCH dans la variable $displaytype AFFICHE la chaine html pour mettre la variable $displaytype en rouge.
Ce que tu veux faire, c'est rajouter des conditions, au lieu d'un simple SI/SINON, il te faut un SI/SINON SI/.../SINON pour pouvoir intégrer tes autres valeurs. Regarde la documentation des structures conditionnelles. Tu peux utiliser if/elseif/else, mais également un switch/case ..

Bref, une fois ce que tu veux faire clairement formulé, la syntaxe ne devrait pas te poser de problème :)

Posté : 01 oct. 2007, 15:22
par tunsia
Tout d'abord, merci d'être revenu sur le sujet et de tes explications.
j'ai donc regardé la doc sur les structures conditionnelles et je pense avoir saisie.
En reprenant notre exemple voici le code possible avec if/elseif/else
if($config['label_type'] >= 1) {  
                if($type == 1) $displaytype = _ABREVTOSALE;
                elseif($type == 2) $displaytype = _ABREVTOBUILD;
                elseif($type == 3) $displaytype = _ABREVTOSEE;
                else $displaytype = _ABREVTOSEARCH;  
                   echo "<font color=red>".$displaytype."</font>&nbsp;";  
            } 
d'autre part, je souhaiterai savoir ou je peux aller à la ligne dans l'expression suivante
f($config['label_type'] >= 1) { 
            echo "        <tr><td align=\"right\">"; 
            echo "            <span class=\"doc-sub\"><font color=red>"._ABREVTOSALE."</font> : "._TOSALE2." - <font color=red>"._ABREVTOSEARCH."</font> : "._TOSEARCH2." - <font color=red>"._ABREVTOBUILD."</font> : "._TOBUILD2." - <font color=red>"._ABREVTOSEE."</font> : "._TOSEE2."</span>"; 
            echo "        </td></tr>"; 
           } 
J'avoue quand même avoir un doute sur le premier code au niveau des acolades car j'ai trouvé ça
if (condition réalisée) {
   liste d'instructions
}

elseif (autre condition réalisée) {
	   autre série d'instructions
}

 ...
else (dernière condition réalisée) {
	 série d'instructions
}

Posté : 01 oct. 2007, 15:53
par Ryle
Impec pour le if/elseif/else :)

Lorsque tu utilises un if(), une boucle for(), while(), etc. ils ne s'appliquent qu'à l'instruction qui les suit immédiatement (illustré ici par l'indentation) :
if ($type == 1) 
  echo 'Hello';
echo 'World';
Seule l'instruction "echo 'Hello'" est soumise au if() et ne sera affichée que si $type est égal à 1. L'instruction "echo 'World'" en revanche sera exécutée à chaque fois. Les accolades te permettent de définir un groupe d'instructions :
if ($type == 1) {
  echo 'Hello';
  echo 'World';
}
Ainsi, contrairement à tout à l'heure, la seconde instruction ("echo 'World'") sera dépendante du if() et ne sera exécuté que si $type est égal à 1 :)


Pour tes retours à la ligne (si j'ai bien compris la question) à l'intérieur d'une chaine cela n'a pas d'importance, tu en mets où tu veux. En effet, lorsque le code html est interprété par le navigateur, les retours à la ligne sont ignorés car c'est le navigateur qui va les gérer en fonction de la place dont il dispose. A toi ensuite de voir où il est judicieux d'en mettre pour que ton code soit lisible et compréhensible facilement. Par exemple :
echo "<span class=\"doc-sub\">
    <font color=red>"._ABREVTOSALE."</font> : "._TOSALE2."
    - <font color=red>"._ABREVTOSEARCH."</font> : "._TOSEARCH2."
    - <font color=red>"._ABREVTOBUILD."</font> : "._TOBUILD2."
    - <font color=red>"._ABREVTOSEE."</font> : "._TOSEE2."
  </span>";
Sachant que tu peux aussi découper ta chaine en plusieurs echo, fermer les balises php et passer en html, etc. après c'est surtout une question de confort personnel :)

suite et fin de ce sujet

Posté : 08 oct. 2007, 09:43
par tunsia
bonjour Ryle,
suite au test réalisé aprés modification du code et en suivant tes conseils, tout fonctionne normalement génial :D
Si je souhaitai afficher sur 2 lignes:
echo "<span class=\"doc-sub\"> 
    <font color=red>"._ABREVTOSALE."</font> : "._TOSALE2." 
    - <font color=red>"._ABREVTOSEARCH."</font> : "._TOSEARCH2." 
    - <font color=red>"._ABREVTOBUILD."</font> : "._TOBUILD2." 
    - <font color=red>"._ABREVTOSEE."</font> : "._TOSEE2." 
  </span>";
Je pense qu'il faudrait ajouter une balise <br> comme suit:
echo "<span class=\"doc-sub\"> 
    <font color=red>"._ABREVTOSALE."</font> : "._TOSALE2." 
    - <font color=red>"._ABREVTOSEARCH."</font> : "._TOSEARCH2." <br>
    - <font color=red>"._ABREVTOBUILD."</font> : "._TOBUILD2." 
    - <font color=red>"._ABREVTOSEE."</font> : "._TOSEE2." 
  </span>";
Sinon j'ai une autre question peut être devrais-je ouvrir un autre sujet, mais je te la pose quand même voici le code de départ:
echo "<center><span class=\"classifieds-accountmenu\">[ <a href=\"index.php?name=".$ModName."&file=account\">"._INFOGEN."</a>";
		echo " | <a href=\"index.php?name=".$ModName."&file=account&page=account\">"._INFOPERSO."</a>";
		
		if( $config['activenotify'] == 1 ) {
			echo " | <a href=\"index.php?name=".$ModName."&file=notify\">"._NOTIFYAUTO."</a> ]</span><br>";
		}
		else
			echo " ]</span><br>";
Je souhaite remplacer l'affichage des [ et | et ] par des espaces, il y en a 4, comment puis je procéder?

Posté : 08 oct. 2007, 10:58
par AB
utilises &nbsp pour insérer des espaces insécables en lieu et place de tes [ | et ]

suite et fin

Posté : 08 oct. 2007, 12:03
par tunsia
merci AB
c'est ce que j'ai fais au départ mais j'avais oublié un petit détail c'est le ;
maintenant c'est résolu:
&nbsp;
A bientôt peut être avec un autre sujet
Ouverture d'image en popup