Problème insert MYSQL avec accent

  • Auteur de la discussion Auteur de la discussion passion
  • Date de début Date de début
WRInaute accro
Bonjour,

Je suis un peu perdu là, j'aurai besoin de vos lumières parce qu'à force d'être dessus, je ne vois plus... 8O

Voilà, je viens de faire la migration d'un site d'un serveur dédié DEBIAN squeeze 6.0 vers un serveur DEBIAN WHEEZY 7.0.
Je ne comprends pas car j'ai vraiment essayé de garder les mêmes caractéristiques du serveur MYSQL et PHPMYADMIN pour que la migration se passe bien mais pas au moment de tester le site en ajoutant un article :(

En faite, dès l'instant que je vais mettre un mot avec accent, le champ de ma table restera vide.

Voici mes caractéristiques:
1/ Ma config apache ancienne et nouvelle est en : iso-8859-1
2/ mes pages sont (meta http-equiv="content-type" content="text/html; charset=iso-8859-1")
3/ la fonction que j'utilise avant de faire un ajout en base de données:
Code:
<?php
public function textLibre($element){
	$element1 = htmlentities ($element, ENT_QUOTES);
	$element2 = stripslashes($element1);
	$element2 = trim($element2);
	return $element2;
}
}
?>
4/ En suite, pour ma table : le moteur (MyISAM) et le charset : (latin1_swedish_ci)

PS1 : je précise qu'avant la migration et depuis plusieurs années, cela a toujours marché et c'est uniquement depuis cette migration.
PS2 : en faite, mon insertion se passe bien tant que je ne mets pas de mots avec accent.
 
WRInaute accro
Encore cette légende urbaine d'enregistrer les entités HTML dans la DB (htmlentities lors du save => FAIL)...
Et si tu copies/colles ta query générée dans ton client MySQL préféré, ça donne ?
 
WRInaute accro
Merci de ta réponse :)

Bah en faite, j'ai créé volontairement une erreur dans mon script PHP pour qu'elle puisse me générer une erreur visible, justement pour voir quelle type de requête, je m'apprête à faire et bah... c'est là, que je ne pige pas... 8O

Si je mets exemple : [bonjour] => ça passe. Maintenant si je mets : [as-tu été à l'école?] ==> ma variable POST sera vide??!!

Donc cela vient obligatoirement de ma fonction mais pourquoi??
Je ne fais rien extraordinaire?
Cela a toujours fonctionné?!

Est-ce un module spécifique qui n'est pas activé sur apache2?
J'ai l'impression, c'est une histoire de caractères spéciaux mais traités PHP pas MYSQL puisque c'est ma variable POST qui ne récupère pas les données!
Merci
 
WRInaute accro
Et tu peux nous montrer le code PHP d'insertion ? Afin de s'assurer de voir que tu échappes les données (mysql_real_escape_string() ou autre) ?
Si ça tombe c'est juste ça, parce que par exemple avant tu avais les magic_quotes activées.

Edit: ah carrément dans la variable $_POST ?
 
WRInaute accro
lol oui... c'est ma variable POST qui ne récupère pas mes données issues de mon formulaire dès l'instant que je vais mettre des caractères spéciaux.

J'ai créé une erreur dans mon script PHP pour qu'elle puisse me générer visuellement le type de requête que je m'apprête à faire.
C'est là que je me suis aperçu que si je mets de simple mot sans accent, sans caractères spéciaux => ma variable concernée est ok mais sinon, la variable est vide??!!

Je ne comprends pas en quoi ma fonction puisse merder?! :?
Est-ce un module à activer dans apache2?
Est-ce que cela vient de WHEEZY?
Comprends pas??!!

C'est vraiment une migration, je n'ai pas touché au code source!
 
WRInaute accro
Et dans Firebug ou le débogueur de Chrome, tu peux tout analyser, le request à l'air correct?
 
WRInaute accro
Merci de ton aide :oops:

Franchement, j'y comprends rien??!
J'ai analysé mon php.ini si cela venait de là mais j'ai rien vu de particulier :(

Avec firebug, il me précise bien les données issues de mon formulaire en POST, je te mets ce qui pourrait aider:
Pour infos:
Code:
Content-Type	text/html; charset=iso-8859-1
Date	Fri, 24 May 2013 16:53:50 GMT
Expires	Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive	timeout=5, max=100
Pragma	no-cache
Server	Apache/2.2.22 (Debian)
Vary	Accept-Encoding
X-Powered-By	PHP/5.4.4-14

Maintenant, ce que me donne firebug:
J'ai bien toutes mes données puisqu'il me précise [requiredD ==> c'est école].
Le champ de mon formulaire "requiredD" passe bien mes données avec caractères spéciaux.
Mais un simple:
Code:
<?php
echo $_POST['requiredD'];
?>
Affiche mes données avec ou sans caractères spéciaux!

Maintenant, si j'utilise "htmlentities()", cela ne me renvoi plus rien !

J'en déduis (je pense) qu'il y a un module ou une info qui ne doit pas être chargée sur apache ou php parce que là, c'est carrément une fonction de base qui n'a pas l'air d'être reconnue => "htmlentities()"

Non?!
 
WRInaute accro
Bon... mon problème avance...
En faite, dans la doc PHP, l'encodage utilisé par php pour htmlentities est ISO-8859-1 pour les versions anterieur à PHP 5.4.0 et UTF-8 a partir de PHP 5.4.0.

Donc la raison, je l'ai trouvé.

La solution bourrin serait de rajouter une instruction dans mon htmlentities() de la sorte:
Code:
htmlentities($mavariable, ENT_QUOTES, 'iso-8859-1');
J'ai testé, ça marche !

Mais je préfèrerai choisir une méthode plus propre parce que je n'ai pas envie de passer sur tout mon code. Alors, j'ai modifié mon php.ini pour lui mettre:
; PHP's default character set is set to empty.
; http://php.net/default-charset
default_charset = "ISO-8859-1"

J'ai redémarré apache mais toujours le même problème?!
 
Nouveau WRInaute
Bonjour

j'ai le meme soucis, que j'avais solutionné une fois, c'est bien dans la config serveur pas la peine de tout reecrire ..
je me souviens plus, est ce que tu as trouvé ?
 
Discussions similaires
Haut