Problèmes d'accents dans liste de choix

Gustavio
Invité n'ayant pas de compte PHPfrance

09 sept. 2005, 18:53

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

Mammouth du PHP | 19672 Messages

09 sept. 2005, 19:07

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>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Gustavio
Invité n'ayant pas de compte PHPfrance

21 sept. 2005, 13:06

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]

Mammouth du PHP | 19672 Messages

21 sept. 2005, 13:15

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";
};
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Tho
Eléphant du PHP | 58 Messages

21 sept. 2005, 15:23

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...).

Gustavio
Invité n'ayant pas de compte PHPfrance

24 sept. 2005, 16:39

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

Mammouth du PHP | 19672 Messages

24 sept. 2005, 16:41

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: