{MySQL} Bloquage Accent.

Fermé
pierlucm Messages postés 19 Date d'inscription lundi 9 juillet 2007 Statut Membre Dernière intervention 9 décembre 2011 - 5 janv. 2010 à 15:39
dam75 Messages postés 1041 Date d'inscription lundi 4 mai 2009 Statut Webmaster Dernière intervention 21 février 2023 - 5 janv. 2010 à 17:24
Bonjour,

Je suis présentement en pleine construction d'une page de gestion pour mon site internet.
Cet page me permettera de modifier mon site très rapidement.


J'insert mes données dans ma base sql en utilisant 1 formulaire et une page d'insertion php.
Je récupère par la suite le texte pour l'afficher sur les pages respectives.


Tout fonctionne parfaitement j'éprouve seulement 1 petit problème avec les accents.
En premier lieux, je n'arrivais pas à faire afficher ceux-ci... J'ai régler en utilisant charset=iso-8859-1.

Maintenant, c'est lorsque j'essai de modifier mes données que cela ne fonctionne pas. (Si mon texte
ne comporte aucun accent je n'éprouve aucun problème).

Voici la ligne en question :
$sql = "UPDATE db_accueil SET data='$data' WHERE 1 ;";


Merci beaucoup,
pierlucm

1 réponse

dam75 Messages postés 1041 Date d'inscription lundi 4 mai 2009 Statut Webmaster Dernière intervention 21 février 2023 67
5 janv. 2010 à 17:24
Bonjour,

Il y a plusieurs endroits où tu dois gérer le codage des caractères :
- le codage de la page HTML, défini par la fonction header(...) de PHP (ex : header('Content-Type: application/xhtml+xml; charset=iso-8859-1',true);) , ainsi que par la balise <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
- le codage de la base de données, défini lors de la création des tables et des champs (voir la documentation de Mysql)
- le codage de la connexion au serveur Mysql, défini SET NAMES

Le mieux pour éviter les ennuis est que l'ensemble de ces paramètres soient tous mis à la même valeur, je te recommande UTF8, qui permet de gérer correctement l'ensemble des langues possibles (ce qui n'est pas le cas de iso-8859 !)

Par ailleurs sur ta requête $sql = "UPDATE db_accueil SET data='$data' WHERE 1 ;";
3 choses :
1/ Tu dois absolument "protéger" les chaînes via mysql_real_escape_string ou, au pire, mysql_escape_string. Sinon, le moindre ' dans la chaîne suffira à faire échouer la requête, sans compter les risques d'injection SQL (utilisation de cette faille pour faire passer une requête normalement interdite au système, je n'en dis pas plus :) )

2/ Normalement, et si tu respectes bien le point 1/, tu ne devras avoir besoin de rien.
Au pire, tu peux aussi forcer l'encodage via les fonctions PHP utf8_encode ou utf8_decode par exemple.

3/ Ca n'a rien à voir, mais tu es sûr de ton WHERE 1 ?? cela signifie que TOUS les enregistrements seront mis à jour, ce qui est rarement souhaité :)

Bon courage,
0