8797 sujets

Développement web côté serveur, CMS

Bonjour à tous j'ai un problème avec mes formulaires php
La modification principale qui a eu lieu chez php concerne register_globals et tous mes formulaires plantes.
voici comment se présente les formulaires.
$pseudo = AddSlashes (htmlentities($pseudo));
$model = AddSlashes (htmlentities($model));

mysql_query("INSERT Into annonce_immo VALUES ('','$date','$pseudo','$model'") or die ("erreur requète");

d'apres ce que j'ai compris il sont passé en utf 8 php et mais formulaire ne fonctionen plus ;o(


Rien compris Smiley ohwell

Register global c'est vraiment pas la bonne chose à faire ...

tu ferais mieux d'utiliser $_POST['nom_de_la_variable']

Pour ce qui est de l'utf 8, php travaille effectivement en interne en UTF8 mais tu n'as pas à t'en soucier (du moins dans ce cas ci)

:)
Au fait , c'est mon hébergeur qui a tous passé à l'UTF8 et depuis lors mes formulaires ne fonctionne pas .
Merci pour ta répnse TriadPtale mais je ne vois pas comment faire mon formulaires avec $_POST['nom_de_la_variable']
merci de votre aide. Smiley ohwell
serv a écrit :
je ne vois pas comment faire mon formulaires avec $_POST['nom_de_la_variable']

Par exemple utilise $_POST['pseudo'] au lieu de $pseudo, pour récupérer la valeur envoyée via le formulaire.
Oui en gros,
les registrer_glob a OFF tu ne peu plus utiliser les variable qui ont le nom du champs du formulaire.
Il faut dire a PHP que cette variable provient du formulaire.
Voici ce que cela donne sur ton code:
$pseudo = AddSlashes (htmlentities($_POST['pseudo']));
$model = AddSlashes (htmlentities($_POST['model']));

mysql_query("INSERT Into annonce_immo VALUES ('','$date','$pseudo','$model'") or die ("erreur requète");

C'est exactement pareil pour les variable de formulaire qui passe dans l'URL avec un formulaire en method="get", il faut dire a PHP
$_GET['mavariable'] et non $mavariable
Ceci ne vient pas de l'encodage mais plutôt du passage a une nouvelle version de php... regarde la doc nexen il explique bien comment récupérer les variables envoyé (post et get) ainsi que les variables serveur...
a écrit :
php travaille effectivement en interne en UTF8


Je sais pas où tu as vu ça, vu que les fonctions comme strlen ou substr, ou même htmlentities partent du principe que tu travailles en Latin1, ou du moins dans un langage codé sur 8 bits (ce qui n'est pas le cas de l'utf-8). Pour bosser en utf-8, on a besoin d'une extension dédiée, comme par exemple mb_string.

Pour ton problème, la solution est simple : remplace htmlentitites() par htmlspecialchars(). Il ne faut jamais utiliser htmlentities(), cette fonction est le mal incarné. Remplacez-la systématiquement par htmlspecialchars(), vous n'aurez aucun problème supplémentaire. (htmlentities() part du principe que vous utilisez du Latin1, et transforme, en plus des caractères réservés par HTML, tous les octets dont la valeur est supérieure à 127 en entités... Or un caractère multi-octet UTF-8 aura justement des octets d'une valeur plus grande que 127, donc ça coince). htmlspecialchars se contente de transformer les caractères réservés, donc aucun problème.
htmlentities() est tout à fait utilisable en UTF-8 sachant que cette fonction possède un 3ème argument permettant de spécificier l'encodage.

Et puis, vu d'ensemble, htmlentities() et non pas htmlspecialchars() peut permettre d'éviter certains casse-têtes, par exemple lors d'un changement d'encodage.
"l'encodage n'est pas tout" et des fois il vaut mieux prévoir, les entités HTML c'est juste quelques caractères de plus.

Enfin, tout ça pour dire que htmlentities() n'est pas forcément le mal absolu Smiley langue
Les deux fonctions sont tout à fait respectables, chacune peut être plus approprié dans un certain contexte, mais les différences d'utilisation restent de toutes façons très minimes...

Sinon en effet, PHP a une ignorance quasi-totale de l'UTF-8, alors il est assez improbable qu'il travaille en interne avec Smiley lol
J'aime pas utiliser les arguments absconds (c'est moche et ... abscond), au moins avec htmlspecialchars je n'ai pas de surprises Smiley cligne
Merci à tous de votre aide précieuse.
9a marche, j'ai remplacé par
$pseudo = AddSlashes (htmlentities($_POST['pseudo']));
. Smiley smile
Merci.