L'encodage dans une page....

Eléphant du PHP | 440 Messages

14 janv. 2008, 13:58

Bonjour à tous,

Je réalise une page en php, donc voici le code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>...</title>
</head>
<body>
Selectionné votre matiere premiere que vous voulez modifier:

<?php

$server="****";
$user="*****";
$pass="*****";
$db="pdr";

/* On récupère si elle existe la valeur de la gamme envoyée par le formulaire */
$matiere_type = isset($_POST['matiere_type'])?$_POST['matiere_type']:null;
$matiere = isset($_POST['matiere'])?$_POST['matiere']:null;


$connexion = mysql_connect($server, $user, $pass);
if($connexion != false)
{
    $choixbase = mysql_select_db($db, $connexion);
    $sql1 = "SELECT id_matiere_type, ref_matiere_type, nom_matiere_type FROM matiere_type ORDER BY id_matiere_type";
 
$query = mysql_query($sql1);
?>

<form  action="modmatiere.php" method="post" id="chgsgamme" >
<u>Sélectionnez la type de matiere</u>
<br>
<select name="matiere_type" id="matiere_type" onChange="document.forms['chgsgamme'].action = '<?php echo $_SERVER['PHP_SELF']; ?>'; document.forms['chgsgamme'].submit();">
  <option value="-1">- - - Choisissez une gamme - - -</option>
<?php

while ( $list = mysql_fetch_array( $query ) ) {
echo '<option value="'.$list["id_matiere_type"].'"'; 
if ($matiere_type == $list["id_matiere_type"]) echo " SELECTED"; 
echo '>'.$list["ref_matiere_type"].' '.$list['nom_matiere_type'].'</option>';
} 
}
echo "</SELECT>";
echo "<br>";

	if(isset($matiere_type) && $matiere_type != -1)
   {
		//print("<center> selection $gamme</center>");
		// Cération de la requête pour avoir les sous gammes de cette gamme 
		$sql2 = "SELECT code_m, nom_m FROM matiere WHERE id_matiere_type = '$matiere_type' ORDER BY code_m";
		//echo $sql2;
		if($connexion != false)
		{
			$query2 = mysql_query($sql2) or die('erreur2');
			$nb2= mysql_num_rows($query2);
	
//recupere le nombre de ligne de la variable contenue dans la variable query. Impeccable
		if ($nb2 == null){
// si le nombre de ligne est egal a ensemble vide cela ecrit dans la list deroulante selectionner
			echo "Pas de  sous gamme.";
		
		} else {
			echo '<br>';
			echo '<select name="matiere" id="matiere">';
			while ( $list2 = mysql_fetch_array( $query2 ) ) {
			echo '<option value="'.$list2["code_m"].'"'; 
			if ($matiere == $list2["code_m"]) echo " SELECTED"; 
			echo '>'.$list2["nom_m"].' </option>';
				}
			echo "</SELECT>";				
				}

//on ferme la liste-->
	}
        /* Un petit coup de balai */
       mysql_free_result($query2);
	}
//echo '<FORM ACTION="../v0.1a/matiere.php">';
echo '<br><input type="submit" name="ok" id="ok" value="Envoyer" />';
//echo '<input type="hidden" name="test" value="'.$matiere.'">';
echo '</form>';

//echo '<br /><input type="submit" name="ok" id="ok" value="Envoyer" />';
//echo '<input type="hidden" name="test" value="'.$matiere.'">';
echo '</form>';


    // Terminé, on ferme la connexion */
    mysql_close($connexion);
	
print_r($_POST)


?>

</body>
</html>

Est que l'encodage au début de page est-il bon?

Car au niveau de ma liste déroulante alimenter par une requete les caractere "é" resort en "?". Exemple "supérieur" est écrit correctement dans ma base mais s'affiche dans la liste déroulante avec un "?".

Je pense qu'il doit me manquer un petit paramètre pour qu'il interprète ce caractère.

Merci d'avance pour votre aide qui m'aide énormément.

guigui69

ViPHP
ViPHP | 4039 Messages

14 janv. 2008, 14:10

T'as pas peur de créer de nouveaux sujets toi, hein ? tu devrais tenir un index pour mieux s'y retrouver :D


:arrow:Problème d'encodage
:arrow:Côté DB
:arrow: Et maintenant côté script.


Tu pourrais peut-être spécifier le jeu de caractères employé (avec mysql_set_charset() ), ou essayer un utf8_decode dessus (vu que ta db est en utf8)
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphant du PHP | 440 Messages

14 janv. 2008, 15:23

Oui je sais désolé mais je préfère bien séparer pour éviter de polluer la section.

J'ai essayer utf8_decode dans ma page, a la place des noms dans la listes déroulante ceux ci ont été remplacé par des A.


Je vais regarder l'autre commande.

Merci

guigui69

ViPHP
ViPHP | 4039 Messages

14 janv. 2008, 15:28

C'est un bon début..

Et si tu changes ta balise méta en quelque chôse de plus approprié ?

Code : Tout sélectionner

<meta http-equiv=Content-Type content="text/html; charset=UTF-8">
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

14 janv. 2008, 15:45

Tu peux aussi commencer par regarder quel est le charset utilisé dans ta base de données et utiliser le même ou mettre en place l'encodage/décodage correspondant :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 4039 Messages

14 janv. 2008, 16:35

Tu peux aussi commencer par regarder quel est le charset utilisé dans ta base de données et utiliser le même ou mettre en place l'encodage/décodage correspondant :)
C'est ce qu'on a déjà fait, c'est UTF-8. :wink: (http://www.phpfrance.com/forums/viewtop ... highlight=)
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

14 janv. 2008, 17:42

Oh bah oui mais s'il faut aller chercher dans le forum sql les informations qui manquent à sa question, on va plus s'en sortir :)

Lancez 1D6. Sur un score de 1 à 4, rendez-vous dans le forum méthodologie.
Sur 5 et + vous affrontez le démon Ajax et perdez un point de vie, retournez au forum FAQ pour vous équiper... ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 440 Messages

15 janv. 2008, 10:56

Merci pour vos réponses mais ca n'a pas l'air de fonctionner.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type"content="text/html;charset=UTF-8" />

<title>...</title>
</head>
<body>
Selectionné votre matiere premiere que vous voulez modifier:

<?php

$server="*******";
$user="******";
$pass="*******";
$db="pdr";

/* On récupère si elle existe la valeur de la gamme envoyée par le formulaire */
$matiere_type = isset($_POST['matiere_type'])?$_POST['matiere_type']:null;
$matiere = isset($_POST['matiere'])?$_POST['matiere']:null;


$connexion = mysql_connect($server, $user, $pass);
if($connexion != false)
{
    $choixbase = mysql_select_db($db, $connexion);
    $sql1 = "SELECT id_matiere_type, ref_matiere_type, nom_matiere_type FROM matiere_type ORDER BY id_matiere_type";
 
$query = mysql_query($sql1);
?>

<form  action="modmatiere.php" method="post" id="chgsgamme" >
<u>Sélectionnez la type de matiere</u>
<br>
<select name="matiere_type" id="matiere_type" onChange="document.forms['chgsgamme'].action = '<?php echo $_SERVER['PHP_SELF']; ?>'; document.forms['chgsgamme'].submit();">
  <option value="-1">- - - Choisissez une gamme - - -</option>
<?php

while ( $list = mysql_fetch_array( $query ) ) {
echo '<option value="'.$list["id_matiere_type"].'"'; 
if ($matiere_type == $list["id_matiere_type"]) echo " SELECTED"; 
echo '>'.$list["ref_matiere_type"].' '.$list['nom_matiere_type'].'</option>';
} 
}
echo "</SELECT>";
echo "<br>";

	if(isset($matiere_type) && $matiere_type != -1)
   {
		//print("<center> selection $gamme</center>");
		// Cération de la requête pour avoir les sous gammes de cette gamme 
		$sql2 = "SELECT code_m, nom_m FROM matiere WHERE id_matiere_type = '$matiere_type' ORDER BY code_m";
		//echo $sql2;
		if($connexion != false)
		{
			$query2 = mysql_query($sql2) or die('erreur2');
			$nb2= mysql_num_rows($query2);
	
//recupere le nombre de ligne de la variable contenue dans la variable query. Impeccable
		if ($nb2 == null){
// si le nombre de ligne est egal a ensemble vide cela ecrit dans la list deroulante selectionner
			echo "Pas de  sous gamme.";
		
		} else {
			echo '<br>';
			echo '<select name="matiere" id="matiere">';
			while ( $list2 = mysql_fetch_array( $query2 ) ) {
			echo '<option value="'.$list2["code_m"].'"'; 
			if ($matiere == $list2["code_m"]) echo " SELECTED"; 
			echo '>'.$list2["nom_m"].' </option>';
				}
			echo "</SELECT>";				
				}

//on ferme la liste-->
	}
        /* Un petit coup de balai */
       mysql_free_result($query2);
	}
//echo '<FORM ACTION="../v0.1a/matiere.php">';
echo '<br><input type="submit" name="ok" id="ok" value="Envoyer" />';
//echo '<input type="hidden" name="test" value="'.$matiere.'">';
echo '</form>';

//echo '<br /><input type="submit" name="ok" id="ok" value="Envoyer" />';
//echo '<input type="hidden" name="test" value="'.$matiere.'">';
echo '</form>';


    // Terminé, on ferme la connexion */
    mysql_close($connexion);
	
print_r($_POST)


?>

</body>
</html>
les "é" apparaissent toujours en "?":

Image


A quel niveau ce situe le problème?

Merci d'avance

guigui69

ViPHP
ViPHP | 4039 Messages

15 janv. 2008, 11:16

Bon bon.. je dirais qu'il faut repartir sur des bases saines.. on à un joli cas la..

Le problême actuel, c'est que ta page (le fichier texte dans lequel est enregistré ton code) est probablement encodée en iso (et non pas en utf8). A moins de pouvoir changer cela (avec ton éditeur de texte), tu peux remettre le charset en iso (comme avant).

Théoriquement, plus de problèmes d'accent sur le texte encodé en dur dans le fichier.

Maintenant, ton fichier, ta page est en iso, mais les données dans ta DB en utf8.

Tout revient donc à ce petit bout de code:
echo '<option value="'.$list2["code_m"].'"'; 
if ($matiere == $list2["code_m"]) echo " SELECTED"; 
echo '>'.$list2["nom_m"].' </option>'; 
et plus particulièrement à la dernière ligne (puisque code_m est,j'imagine, numérique).

Les données contenues dans nom_m sont en utf8 (puisqu'elles proviennent de ta db en utf8).
Et je serais plutôt d'avis que simplement ceci:
echo '>'.utf8_decode($list2["nom_m"]).' </option>'; 
Devrait résoudre tes soucis.

Sinon, et sans utiliser utf8_decode, mettre ceci après que la connexion est établie:
mysql_set_charset("latin1");
Devrait (j'imagine) informer mysql du jeu de caractères utilisé par ton script, et le laisser gérer le transfert.. mais je ne l'ais jamais utilisé.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphant du PHP | 440 Messages

15 janv. 2008, 13:50

Merci pour ta réponse, je pense avoir trouver d'où venait le problème.

En faite le problème venait appache2 il y avait une ligne à dé commenté pour qu'il interprète correctement.
#AddDefaultCharset ISO-8859-1
Voici le code de ma page:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />

<title>...</title>
</head>
<body>
Selectionné votre matiere premiere que vous voulez modifier:

<?php

$server="l*****";
$user="******";
$pass="*****";
$db="pdr";

/* On récupère si elle existe la valeur de la gamme envoyée par le formulaire */
$matiere_type = isset($_POST['matiere_type'])?$_POST['matiere_type']:null;
$matiere = isset($_POST['matiere'])?$_POST['matiere']:null;


$connexion = mysql_connect($server, $user, $pass);
if($connexion != false)
{
    $choixbase = mysql_select_db($db, $connexion);
    $sql1 = "SELECT id_matiere_type, ref_matiere_type, nom_matiere_type FROM matiere_type ORDER BY id_matiere_type";
 
$query = mysql_query($sql1);
?>

<form  action="modmatiere.php" method="post" id="chgsgamme" >
<u>Sélectionnez la type de matiere</u>
<br>
<select name="matiere_type" id="matiere_type" onChange="document.forms['chgsgamme'].action = '<?php echo $_SERVER['PHP_SELF']; ?>'; document.forms['chgsgamme'].submit();">
  <option value="-1">- - - Choisissez une gamme - - -</option>
<?php

while ( $list = mysql_fetch_array( $query ) ) {
echo '<option value="'.$list["id_matiere_type"].'"'; 
if ($matiere_type == $list["id_matiere_type"]) echo " SELECTED"; 
echo '>'.$list["ref_matiere_type"].' '.$list['nom_matiere_type'].'</option>';
} 
}
echo "</SELECT>";
echo "<br>";

	if(isset($matiere_type) && $matiere_type != -1)
   {
		//print("<center> selection $gamme</center>");
		// Cération de la requête pour avoir les sous gammes de cette gamme 
		$sql2 = "SELECT code_m, nom_m FROM matiere WHERE id_matiere_type = '$matiere_type' ORDER BY code_m";
		//echo $sql2;
		if($connexion != false)
		{
			$query2 = mysql_query($sql2) or die('erreur2');
			$nb2= mysql_num_rows($query2);
	
//recupere le nombre de ligne de la variable contenue dans la variable query. Impeccable
		if ($nb2 == null){
// si le nombre de ligne est egal a ensemble vide cela ecrit dans la list deroulante selectionner
			echo "Pas de  sous gamme.";
		
		} else {
			echo '<br>';
			echo '<select name="matiere" id="matiere">';
			while ( $list2 = mysql_fetch_array( $query2 ) ) {
			echo '<option value="'.$list2["code_m"].'"'; 
			if ($matiere == $list2["code_m"]) echo " SELECTED"; 
			echo '>'.$list2["nom_m"].' </option>';
				}
			echo "</SELECT>";				
				}

//on ferme la liste-->
	}
        /* Un petit coup de balai */
       mysql_free_result($query2);
	}
//echo '<FORM ACTION="../v0.1a/matiere.php">';
echo '<br><input type="submit" name="ok" id="ok" value="Envoyer" />';
//echo '<input type="hidden" name="test" value="'.$matiere.'">';
echo '</form>';

//echo '<br /><input type="submit" name="ok" id="ok" value="Envoyer" />';
//echo '<input type="hidden" name="test" value="'.$matiere.'">';
echo '</form>';


    // Terminé, on ferme la connexion */
    mysql_close($connexion);
	
print_r($_POST)


?>

</body>
</html>

J'ai mis le codage charset=ISO-8859-1, ma page s'affiche correctement tant dans les données en dur dans ma feuille que celle dans ma liste déroulante.

Donc cela semble bon? non?

Merci de votre aide, et désolé de vous avoir fait perdre votre temps à cause d'un problème logiciel.

guigui69

ViPHP
ViPHP | 4039 Messages

15 janv. 2008, 14:48

ha, ben si ça va et que tu as trouvé, tant mieux..
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.