Enregistrer correctement des caractères dans une BD

.Steff

Membre expert
Club iGen
6 Septembre 2005
1 294
104
Bonjour,
J'ai crée un guestbook sur un site internet , et le problème c'est que durant l'envoi des données, j'enregistre dans la base de données n'importe quoi pour des caractères comme "é,è,à,ù" etc..
Je vous donne le code du header de verfication :
Bloc de code:
<?php
if  (($_POST['pseudo']!="") AND ($_POST['message']!="") AND ($_POST['pass']=="XXX")) {
    $pseudo = (htmlentities($_POST['pseudo'], ENT_QUOTES)); 
    $url = $_POST['url'];    
    $message = nl2br(htmlentities($_POST['message'], ENT_QUOTES));
    $ip = $_SERVER['REMOTE_ADDR'];
    $date = date("d-m-Y");
    $heure = date("H:i");
    include("include/connect.php");
    mysql_query("insert into guest VALUES('', '" . $pseudo . "', '" . $message . "','" . $url ."','" . $ip ."','" . $date ."','" . $heure ."')") or die ("mysqlerror()");
	mysql_close();
    header('Location: guestbook.php');
}
else {	
    header('Location: guesterreur.php');
}
?>

Je retrouve n'importe quoi dans la base..
Quelqu'un aurait un idée ?

D'avance merci !
 
Bonjour,
J'ai crée un guestbook sur un site internet , et le problème c'est que durant l'envoi des données, j'enregistre dans la base de données n'importe quoi pour des caractères comme "é,è,à,ù" etc..
Je vous donne le code du header de verfication :
Bloc de code:
<?php
if  (($_POST['pseudo']!="") AND ($_POST['message']!="") AND ($_POST['pass']=="XXX")) {
    $pseudo = (htmlentities($_POST['pseudo'], ENT_QUOTES)); 
    $url = $_POST['url'];    
    $message = nl2br(htmlentities($_POST['message'], ENT_QUOTES));
    $ip = $_SERVER['REMOTE_ADDR'];
    $date = date("d-m-Y");
    $heure = date("H:i");
    include("include/connect.php");
    mysql_query("insert into guest VALUES('', '" . $pseudo . "', '" . $message . "','" . $url ."','" . $ip ."','" . $date ."','" . $heure ."')") or die ("mysqlerror()");
	mysql_close();
    header('Location: guestbook.php');
}
else {	
    header('Location: guesterreur.php');
}
?>

Je retrouve n'importe quoi dans la base..
Quelqu'un aurait un idée ?

D'avance merci !
il nous en faut plus pour t'aider.
Ta page web est encod&#233; en quoi ? et ta base de donn&#233;es ??


Dans la plupart des cas, un petit coup de utf8_decode() &#231;a passe bien :)
 
salut,
Bloc de code:
insert into guest VALUES('', '" . $pseudo . "', '" . $message . "',
'" . $url ."','" . $ip ."','" . $date ."','" . $heure ."')") 
or die ("mysqlerror()");
juste comme &#231;a en passant, pourquoi est-ce que ta requ&#234;te comporte des valeurs avec simple quote, double quote et point de concat&#233;nation ???
 
Une autre remarque &#224; propos de la s&#233;curit&#233;. Tu ne v&#233;rifies pas ce que tu mets dans ta requ&#234;te SQL et tu es attaquable avec une SQL injection.
 
  • J’aime
Réactions: .Steff
Alors ma base , il y a marqu&#233; :
"Jeu de caract&#232;res pour MySQL: UTF-8 Unicode (utf8)"
et Interclassement pour la connexion MySQL:
"utf8_unicode_ci"

Ensuite je comprends pas trop quand tu me demande en quoi est encod&#233; ma page p4bl0.

@fredmac75 : bidouillage de desespoir...

@molgow : Je me penche l&#224; dessus de suite :up:
 
Alors ma base , il y a marqué :
"Jeu de caractères pour MySQL: UTF-8 Unicode (utf8)"
et Interclassement pour la connexion MySQL:
"utf8_unicode_ci"

Ensuite je comprends pas trop quand tu me demande en quoi est encodé ma page p4bl0.

Je peux me tromper (je débute) mais si ta base est en UTF-8 et que tu manipule les chaînes de caractères tu dois utiliser des fonctions spéciale pour ça. De même pour ta page web qui doit être dans le même encodage avec le bon header. Mais p4bl0 t'expliquera mieux que moi… :zen:

Bloc de 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=UTF-8" />
 
Je peux me tromper (je débute) mais si ta base est en UTF-8 et que tu manipule les chaînes de caractères tu dois utiliser des fonctions spéciale pour ça. De même pour ta page web qui doit être dans le même encodage avec le bon header. Mais p4bl0 t'expliquera mieux que moi… :zen:

Bloc de 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=UTF-8" />
Ben je ne voit rien &#224; ajouter :

En gros si ta base est en UTF8 (tr&#232;s bon choix), alors encode tes pages en UTF8 aussi, tout devrait bien se passer.


Utilise la balise meta que gloup gloup (enfin un avatar :rateau: ) t'as montr&#233; et r&#232;gle ton &#233;diteur de texte pour qu'il enregistre tes fichiers en UTF8.

&#224; priori tu n'aura plus de probl&#232;me. :)
 
  • J’aime
Réactions: .Steff
Si je passe par un fichier header en php pour voir les erreurs de saisie etc... il faut aussi que celle l&#224; soit d&#233;clar&#233; en utf8 ?
Car pour le moment ma page header n'a que du code php a l'int&#233;rieur.
Ou alors, il suffit que je mette en utf8 l&#224; o&#249; je fais remplir les champs du formulaire ?

en tout cas merci de vos attentions !
 
Puisque ta base fonctionne en UTF-8, toutes tes pages, aussi bien celles contenant les formulaires pour entrer les donn&#233;es que celles affichant le contenu de la base doivent &#234;tre en UTF-8. Pour cela tu dois envoyer un header HTTP &#224; l'agent utilisateur (en g&#233;n&#233;ral le navigateur) pour dire quel jeu de caract&#232;re tu utilises :

Bloc de code:
<?php header("Content-Type: text/html; charset= UTF-8"); ?>
Ce header doit &#234;tre envoy&#233; en premier avant toute autre informations, caract&#232;res, etc.

Comme d&#233;j&#224; sp&#233;cifi&#233; plus avant tu dois aussi inscrire l'encodage dans le HEAD de tes pages html.

Bloc de code:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />