Problème de syntaxe avec un echo (pour remplir un select)

Signaler
Messages postés
33
Date d'inscription
jeudi 19 avril 2007
Statut
Membre
Dernière intervention
6 janvier 2009
-
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
-
bonjour,
j'ai un pb de syntaxe avec le code suivant :

<?php
$liste_ville=chargement_select();
echo('<select name="ville_evt" id="ville_evt" style="font-family:Arial">');
//echo('<option value="'.'">'.'</option>');

 while ($ligne=mysql_fetch_object($liste_ville))
{
echo('<OPTION value="'.$ligne->nom_ville .'" <?php if($_SESSION[\'ville_evt\']=="'.$ligne->nom_ville.'") echo \'selected\'="selected"\' ?>  >'.$ligne->nom_ville.'</OPTION>');
}

echo('</select>');
?>

J'obtiens dans mon select les bons champs mais tous précédés par le signe ">" qui coorespond au 2ème > dans le bout de code suivant :
selected"\' ?>  >'.$ligne

(Je précise que ce que je veux obtenir c'est ça :
<SELECT name="categorie_evt" id="categorie_evt" title="" style="font-family:Arial">
<OPTION value="Concert"  <?php if($_SESSION['categorie_evt']=="Concert") echo 'selected="selected"' ?>  >Concert</OPTION>
<OPTION value="Théatre"  <?php if($_SESSION['categorie_evt']=="Théatre") echo 'selected="selected"' ?>  >Théatre</OPTION>
...
<OPTION value="Arts"  <?php if($_SESSION['categorie_evt']=="Arts") echo 'selected="selected"' ?>  >Arts du spectacle (art de rue, cirque,...)</OPTION>
</SELECT>

Si j'utilise une boucle pour le premier select c'est que j'y ai + de 300 options à mettre [javascript:Insert_Emoticon('/imgs2/smile_dissapprove.gif'); ]!)

8 réponses

Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
16
Salut,

A l'intérieur d'une chaine entourée de guillemets simples, il ne faut pas échapper les guillemets doubles.

echo('<OPTION value= "'.$ligne->nom_ville .'" <?php
if($_SESSION[\'ville_evt\']=="'.$ligne->nom_ville.'") echo
\'selected\'="selected"\' ?> 
>'.$ligne->nom_ville.'</OPTION>');

=>

echo('<OPTION value="'.$ligne->nom_ville .'" <?php
if($_SESSION[\'ville_evt\']=="'.$ligne->nom_ville.'") echo
\'selected\'="selected"\' ?> 
>'.$ligne->nom_ville.'</OPTION>');

D'ailleurs c'est marrant, y'a que 2 guillemets doubles que tu échappes, pas les autres...

<hr size ="2" width="100%" />Neige
Messages postés
33
Date d'inscription
jeudi 19 avril 2007
Statut
Membre
Dernière intervention
6 janvier 2009

Merci pour l'info neigedhiver.
Mais en fait c'est parce que je dois obtenir :
'selected'="selected"
(cf comparaison avec l'autre select dans mon premier post )

Et j'ai quand même essayé sans, mais j'obtiens toujours le même
résultat ! J'ai toujours le signe > devant chaque option dans ma
liste
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
16
Ben oui, mais je vois pas où est le problème : pas besoin d'échapper les " dans une chaine avec '.
Quand tu fais :
echo '<option name="bidule" selected="selected" value="truc" />';

tu obtiens bien ça dans ton html :
<option name="bidule" selected="selected" value="truc" />


Si tu veux absolument avoir un \ dans ton html, il faut l'échapper avec un \ : \\

<hr size="2" width="100%" />Neige
Messages postés
33
Date d'inscription
jeudi 19 avril 2007
Statut
Membre
Dernière intervention
6 janvier 2009

ok, je te remercie, je vais les enlever.
mais pas d'idée pour le problème du > (qui correspond à la fin du
<option ) ? Il me l'affiche au lieu de le "prendre " comme la fin
de la balise OPTION ...
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
16
Pardon, j'avais pas regardé assez en détails : ton code est crade...

echo('<OPTION value="'.$ligne->nom_ville .'" <?php
if($_SESSION[\'ville_evt\']=="'.$ligne->nom_ville.'") echo
\'selected\'="selected"\' ?> 
>'.$ligne->nom_ville.'</OPTION>');

=>

echo '<OPTION value="' . $ligne->nom_ville . '"';
if($_SESSION['ville_evt'] == $ligne->nom_ville) {
    echo ' selected="selected" >' . $ligne->nom_ville . '</OPTION>';
}

Je sais pas pourquoi tu mets du php dans le echo avec un bloc if... Ca n'a aucun sens...
<hr size="2" width="100%" />Neige
Messages postés
33
Date d'inscription
jeudi 19 avril 2007
Statut
Membre
Dernière intervention
6 janvier 2009

le problème c'est que :

if($_SESSION['ville_evt'] == $ligne->nom_ville) {

ca veut dire que si le if n'est pas vrai, il ne ferme pas le select
puisque le > de fermeture est dans le if !
Messages postés
33
Date d'inscription
jeudi 19 avril 2007
Statut
Membre
Dernière intervention
6 janvier 2009

...et parce que ce que je voudrais obtenir c'est ça :

<SELECT name="categorie_evt" id="categorie_evt" title="" style="font-family:Arial">
<OPTION value="Concert" <?php if($_SESSION['categorie_evt']=="Concert") echo 'selected="selected"' ?> >Concert</OPTION>
...
</SELECT>

mais comme j'ai 300 champs, je "préfère" faire une boucle pour ce select
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
16
Est-ce que tu as passé un peu de temps à lire la doc de php ?
La structure de contrôle if accepte l'utilisation de else.

Et puis pour fermer le select, tu n'as qu'à le sortir du if. Je pensais pas que c'était si compliqué à faire.

<hr size="2" width="100%" />Neige