Page 1 sur 1

Problèmes d'accents dans liste de choix

Posté : 09 sept. 2005, 18:53
par Gustavio
Bonjour,

Je travaille à la conception d'un forumulaire, qui comprendra une liste déroulante dynamique.

La syntaxe utilisée est la suivante :

Dans l'en-tête :
require ("params.inc.php");
$connexion= mysql_connect($hote,$login,$mdp);
mysql_select_db($bd, $connexion);
$rq="SELECT DISTINCT ville FROM region ORDER BY ville";
$result=mysql_query($rq)
or die ("exécution de la requête impossible");
Dans le body, après les balises d'usage pour un formulaire :
while ($ligne = mysql_fetch_array($result))
{extract ($ligne);
echo "<option value='$ville'>$ville\n";
};
Or, dans ma table MySql region, j'ai des noms de localité accentués. Je souhaiterai que la page Html renvoit les caractères spéciaux accentués, pour rester compatible.

Comment puis-je m'y prendre ? J'ai essayé avec
htmlentities
mais cette fonction semble modifier radicalement mon code Php, qui n'est plus interprété par le navigateur.

Merci mille fois pour vos conseils.

Gustavio

Posté : 09 sept. 2005, 19:07
par Cyrano
Normalement, si les noms sont enregistrés avec des accents dans la base, ils doivent ressortir de la même manière. Tu peux simplifier un peu ton code de génération des options en revanche et en profiter pour générer un html conforme, si tu dois un jour migrer l'application vers du XHTML, ce sera du temps de gagné qui ne prend qu'une seconde de plus maintenant. L'utilisation de htmlentities() devrait produire des caractères spéciaux.
while ($ligne = mysql_fetch_assoc($result))
{
    $ville = htmlentities($ligne['ville']);
    echo "<option value=\"". $ville ."\">". $ville ."</option>\n";
};
J'ai fait ce court exemple pour vérifier :
<?php
$villes = array("La Ferté", "Megève");
foreach ($villes as $ville)
{
    $ville = htmlentities($ville);
    echo("<option value=\"". $ville ."\">". $ville ."</option>\n");
}
?>
Le code obtenu est ce qui suit :
<option value="La Fert&eacute;">La Fert&eacute;</option>
<option value="Meg&egrave;ve">Meg&egrave;ve</option>

Question complémentaire (champ select)

Posté : 21 sept. 2005, 13:06
par Gustavio
Bonjour,

Merci d'avoir répondu à ma question avec efficacité.

Comme conseillé, j'ai recouru à la syntaxe
$rqregion="SELECT DISTINCT regions FROM region ORDER BY regions";
$rsregion=mysql_query($rqregion)
while ($ligne = mysql_fetch_assoc($rscivil)) 
{ 
$region = htmlentities($ligne['region']); 
echo "<option value=\"". $region ."\">". $region ."</option>\n"; 
};
et ça fonctionne.

Néanmoins, je me pose une question complémentaire : comment proposer un champ "select" par défaut à ma liste de choix dynamique (par exemple, ici, Ile de France) ?

Merci.

Gustavio[/php]

Posté : 21 sept. 2005, 13:15
par Cyrano
Partons du principe que la région que tu veux présélectionner est dans une variable $choix:
$choix = "Ile de France";
while ($ligne = mysql_fetch_assoc($rscivil))
{
    $region = htmlentities($ligne['region']);
    /* On vérifie si la région à afficher est celle qui doit être pré-sélectionnée */
    $selected = $region == $choix ? "selected = \"selected\"" : null;
    echo "<option value=\"". $region ."\"". $selected .">". $region ."</option>\n";
};

Posté : 21 sept. 2005, 15:23
par Tho
Par contre je te conseille fortement d'utiliser un identifiant plutôt que le nom dans value. Ca évite le problème d'accent que tu risques de retrouver dans un autre cas de figure (autre serveur, etc...).

Posté : 24 sept. 2005, 16:39
par Gustavio
Merci, Cyrano ! Grâce à toi, mon bonheur est presque complet... Hélas, mon ignorance n'a d'égale que mon perfectionnisme, et je me pose une ultime question.

Quand j'utilise la syntaxe que tu m'as chaudement recommandé, j'obtiens dans le code source de ma page, par exemple pour la rubrique civilité :

<select name="civil" id="civil" tabindex="2" class="champselect" />
<option value="Madame">Madame</option>
<option value="Mademoiselle"selected = "selected">Mademoiselle</option>
<option value="Monsieur">Monsieur</option>
</select>

Je suis chagriné, car mon il n'y pas d'espace entre "Mademoiselle"et selected (ligne n° 3).

Comment y remédier ? Cette absence d'espace va-t-elle invalider ma page en Xhtml si je demande sa vérification par le W3C ?

Encore merci.

Cordialement,

Gustavio

Posté : 24 sept. 2005, 16:41
par Cyrano
rajoute l'espace dans la chaine qui compose la variable:
exemple sur la base de mon précédent code:
$selected = $region == $choix ? " selected = \"selected\"" : null;
Tout simplement.