Fatal error et réaffichage champs Formulaire
Résolu/Fermé
rjl
Messages postés
543
Date d'inscription
mardi 16 mars 2004
Statut
Membre
Dernière intervention
25 mai 2019
-
Modifié par rjl le 5/08/2012 à 21:03
Utilisateur anonyme - 13 août 2012 à 09:31
Utilisateur anonyme - 13 août 2012 à 09:31
A voir également:
- Fatal error et réaffichage champs Formulaire
- Formulaire de réclamation facebook - Guide
- Cmos checksum error ✓ - Forum Carte-mère/mémoire
- Formulaire instagram compte suspendu - Guide
- Hls.js error networkerror - fatal true - manifestloaderror ✓ - Forum Réseaux sociaux
- Le formulaire rempli - Guide
24 réponses
rjl
Messages postés
543
Date d'inscription
mardi 16 mars 2004
Statut
Membre
Dernière intervention
25 mai 2019
49
12 août 2012 à 13:38
12 août 2012 à 13:38
De plus en plus hermétique pour moi... A force de bidouillage, j'ai même perdu le maintien du choix bouton radio lors des rafraîchissements de page (après erreur).
Mais, ce qui me chagrine, c'est que je n'ai pas réussi (mauvaise utilisation ?) avec les fonctions que tu m'as indiquées.
Pour les majuscules, je ne suis qu'à moitié surpris, car je l'avais déjà essayée et avait lu qu'elle ne traitait pas les minuscules accentuées... Malgré tout, j'ai trouvé cette fonction améliorée uc_strtouper_fr() qui n'a pas fonctionné non plus (d'où ma tendance à penser mauvaise utilisation) :.
Je te transmets une image qui montre l'antislash resté en zone adresse (ad1) et la fonction et son utilisation.
[IMG]http://img857.imageshack.us/img857/4559/bd2812.jpg[/IMG]
Par ailleurs, tu peux voir que les caractères accentués ne passent pas en majuscules malgré la fonction améliorée... Pourtant, celle-ci est bien sollicitée puisque les autres minuscules sont modifiées (cf. image).
Merci, bon dimanche et @+ RJL2812
Mais, ce qui me chagrine, c'est que je n'ai pas réussi (mauvaise utilisation ?) avec les fonctions que tu m'as indiquées.
Pour les majuscules, je ne suis qu'à moitié surpris, car je l'avais déjà essayée et avait lu qu'elle ne traitait pas les minuscules accentuées... Malgré tout, j'ai trouvé cette fonction améliorée uc_strtouper_fr() qui n'a pas fonctionné non plus (d'où ma tendance à penser mauvaise utilisation) :.
<?php //fonction stroupper en français //Pour appeler la fonction: /*echo uc_strtouper_fr($variable); //par exemple $variable="je suis indigné"; echo utf8_maj_fr($variable); // renvoit : JE SUIS INDIGNÉ function uc_strtoupper_fr($chaine) { $chaine=strtoupper($chaine);$chaine=utf8_decode($chaine);$chaine=trim($chaine); $chaine = strtr($chaine, "äâàáåãéèëêòóôõöøìíîïùúûüýñçþÿæoeðø","ÄÂÀÁÅÃÉÈËÊÒÓÔÕÖØÌÍÎÏÙÚÛÜÝÑÇÞÝÆOEÐØ"); $chaine=utf8_encode($chaine); return $chaine; } function RecupChaine ($chaine) { if (get_magic_quotes_gpc()) return stripslashes($chaine); return $chaine; } ?> // et une utilisation des fonctions : <input id="nomadh" name="nomadh" type="text" required="required" size="30" value="<?php echo RecupChaine ((uc_strtoupper_fr($_POST['nomadh'])));?>" />
Je te transmets une image qui montre l'antislash resté en zone adresse (ad1) et la fonction et son utilisation.
[IMG]http://img857.imageshack.us/img857/4559/bd2812.jpg[/IMG]
Par ailleurs, tu peux voir que les caractères accentués ne passent pas en majuscules malgré la fonction améliorée... Pourtant, celle-ci est bien sollicitée puisque les autres minuscules sont modifiées (cf. image).
Merci, bon dimanche et @+ RJL2812
Utilisateur anonyme
12 août 2012 à 18:13
12 août 2012 à 18:13
Pour le passage en majuscule, comme je te l'avais dit, il faut utiliser les fonction multioctet mb_...
Utiliser utf8_decode, puis faire un traitement, puis à nouveau utf8_encode risque de te donner des résultats décevants, puisque tu ramènes sur un codage à un octet (256 caractères possibles) un codage à plusieurs octets, qui admet des dzaines (centaines ?) de milliers de caractères différents.Par exemple, tu perds le € et le oe. Il FAUT utiliser mb_strtoupper() pour convertir en majuscules une chaîne utf8.
C'est normal que ta fonction uc_strtoupper_fr ne marche pas, l'explication est un peu longue, mais je pourrai te la donner si tu y tiens.
Quant à la fonction RecupChaine, tu ne l'utilises pas de la même manière dans le script ci-dessus et dans l'image jointe. Je t'ai dit de l'appliquer aux données récupérées par POST, c'est bien ce que tu fais dans l'image jointe, alors que dans le script ci-dessus tu l'appliques au résultat de la fonction uc_strtoupper_fr, ce qui n'est déjà plus la données récupérée par post.
N'empêche que ça aurait dû marcher quand même. On voit le problème sur le champ Adresse, et dans l'image on ne voit pas que tu appliques la fonction à l'adresse. Si tu es sûr de le faire, tu peux m'envoyer le code en MP ?
Utiliser utf8_decode, puis faire un traitement, puis à nouveau utf8_encode risque de te donner des résultats décevants, puisque tu ramènes sur un codage à un octet (256 caractères possibles) un codage à plusieurs octets, qui admet des dzaines (centaines ?) de milliers de caractères différents.Par exemple, tu perds le € et le oe. Il FAUT utiliser mb_strtoupper() pour convertir en majuscules une chaîne utf8.
C'est normal que ta fonction uc_strtoupper_fr ne marche pas, l'explication est un peu longue, mais je pourrai te la donner si tu y tiens.
Quant à la fonction RecupChaine, tu ne l'utilises pas de la même manière dans le script ci-dessus et dans l'image jointe. Je t'ai dit de l'appliquer aux données récupérées par POST, c'est bien ce que tu fais dans l'image jointe, alors que dans le script ci-dessus tu l'appliques au résultat de la fonction uc_strtoupper_fr, ce qui n'est déjà plus la données récupérée par post.
N'empêche que ça aurait dû marcher quand même. On voit le problème sur le champ Adresse, et dans l'image on ne voit pas que tu appliques la fonction à l'adresse. Si tu es sûr de le faire, tu peux m'envoyer le code en MP ?
rjl
Messages postés
543
Date d'inscription
mardi 16 mars 2004
Statut
Membre
Dernière intervention
25 mai 2019
49
Modifié par rjl le 12/08/2012 à 23:18
Modifié par rjl le 12/08/2012 à 23:18
Bonsoir le père,
Je vais enregistrer mes résultats avec les essais correspondants pour les commenter en parallèle, car, après 3 ou 4 essais, j'ai difficile à me souvenir de ce que j'ai modifié pour chaque essai plus encore à revenir à l'état initial si ça s'est détérioré !
Je commence par le test avec mb_strtoupper() sachant que j'ai maintenu (sauf pour $nomadh $ville et $ad1) la fonction RecupChaine () ; j'avais déjà fait ce test et l'ai repris toujours sans succès il y a 5mn ; je reprends maintenant exclusivement sur les résultats du $_POST :
J'ai pour mes 3 zones test :
$nomadh=Cédaïde ; $ad1=rue de l'Hôtel de l'Hôpital ; $ville=châteauroux ;
Après envoi du Formulaire, je récupère :
$nomadh=CéDAïDE ; $ad1=rue de l'Hôtel de l'Hôpital ; $ville=CHâTEAUROUX;
Première remarque : RecupChaine () a marché et, j'espère que ce ne sont pas les 2 apostrophes qui me valent cela ?
Pour mb_strtoupper(), j'aurai été surpris qu'au 4ème ou 5ème test ça fonctionne !
Pour autant, je vais faire un test supplémentaire avec quasiment les mêmes données (sauf $ad1) pour lever un doute.
$nomadh=Cédaïde ; $ad1=rue de l'Hôtel ; $ville=châteauroux ;
Le résultat est $nomadh=C?DA?DE ; $ad1=rue de l'Hôtel de l'Hôpital ; $ville=CH?TEAUROUX ;
Mon pré-sentiment n'est pas loin sauf que j'ai travaillé comme si j'envoyais mon enregistrement pour la BD ; je corrige pour un nouvel essai avec les mêmes données en entrée :
Nouveau résultat est $nomadh=CéDAïDE ; $ad1=rue de l'Hôpital ; $ville=CHâTEAUROUX ;
Cette fois, j'avais travaillé, non plus avec utf8_encode() mais avec utf8_encode() soit donc :
<input id="ville" name="ville" type="text" required="required" size="30" value="<?php echo mb_strtoupper(utf8_encode($_POST['ville']));?>" /><br />
C'est donc que le champ serait bien en utf8, ce qui n'améliore pas pour ma compréhension de l'enregistrement en BD.
Un nouvel essai devient donc nécessaire sans encode, ni decode mais en modifiant la fonction en mb_strtoupper_fr() :
Il fallait le faire mais le résultat reste le même !
Un dernier test... à tout hasard (toujours les mêmes entrées) ;
Un résultat inattendu, correct mais dont je te laisserai interpréter le pourquoi :
Au niveau appel, j'ai modifié comme annoncé la fonction :
<input id="nomadh" name="nomadh" type="text" required="required" size="30" value="<?php echo $nomadh= mb_strtoupper_fr($_POST['nomadh']);?>" />Elle a cependant fonctionné avec une fonction dont j'avais retiré les utf8_encode et decode :
Ce que j'ai retiré pour un résultat : $nomadh=CÉDAÏDE ; $ad1=rue de l'Hôpital ; $ville=CHÂTEAUROUX ;
Le GAG : Tous les résultats enregistrés sur la BD... sont erronés : 1947 Mme Cédaïde Josée rue de l\'Hôpital 36000 Châteauroux 2012 0000 0 2012-08-12 521 (minuscules et antislash) !
Je n'analyserai le pourquoi que demain... mais simple question : est-ce que dans le <input id="nomadh" name="nomadh" type="text" required="required" size="30" value="<?php echo $nomadh= mb_strtoupper_fr($_POST['nomadh']);?>" />, le echo $nomadh= mb_strtoupper_fr($_POST['nomadh']); instruit bien le $nomadh ?
Ce qui est sûr c'est que par cette méthode, je ne repasse pas par les mêmes fonctionnalités pour enregistrer...
Reste une question cruciale...
Pourquoi me faut-il passer par utf8_decode() pour enregistrer correctement les caractères accentués ?
Une évolution intéressante mas pas sans poser question. Merci d'avance de tes avis RJL2812
Je vais enregistrer mes résultats avec les essais correspondants pour les commenter en parallèle, car, après 3 ou 4 essais, j'ai difficile à me souvenir de ce que j'ai modifié pour chaque essai plus encore à revenir à l'état initial si ça s'est détérioré !
Je commence par le test avec mb_strtoupper() sachant que j'ai maintenu (sauf pour $nomadh $ville et $ad1) la fonction RecupChaine () ; j'avais déjà fait ce test et l'ai repris toujours sans succès il y a 5mn ; je reprends maintenant exclusivement sur les résultats du $_POST :
<label for="nomadh">Nom *.................. : </label> <input id="nomadh" name="nomadh" type="text" required="required" size="30" value="<?php echo mb_strtoupper ($_POST['nomadh']);?>" />
J'ai pour mes 3 zones test :
$nomadh=Cédaïde ; $ad1=rue de l'Hôtel de l'Hôpital ; $ville=châteauroux ;
Après envoi du Formulaire, je récupère :
$nomadh=CéDAïDE ; $ad1=rue de l'Hôtel de l'Hôpital ; $ville=CHâTEAUROUX;
Première remarque : RecupChaine () a marché et, j'espère que ce ne sont pas les 2 apostrophes qui me valent cela ?
Pour mb_strtoupper(), j'aurai été surpris qu'au 4ème ou 5ème test ça fonctionne !
Pour autant, je vais faire un test supplémentaire avec quasiment les mêmes données (sauf $ad1) pour lever un doute.
$nomadh=Cédaïde ; $ad1=rue de l'Hôtel ; $ville=châteauroux ;
Le résultat est $nomadh=C?DA?DE ; $ad1=rue de l'Hôtel de l'Hôpital ; $ville=CH?TEAUROUX ;
Mon pré-sentiment n'est pas loin sauf que j'ai travaillé comme si j'envoyais mon enregistrement pour la BD ; je corrige pour un nouvel essai avec les mêmes données en entrée :
Nouveau résultat est $nomadh=CéDAïDE ; $ad1=rue de l'Hôpital ; $ville=CHâTEAUROUX ;
Cette fois, j'avais travaillé, non plus avec utf8_encode() mais avec utf8_encode() soit donc :
<input id="ville" name="ville" type="text" required="required" size="30" value="<?php echo mb_strtoupper(utf8_encode($_POST['ville']));?>" /><br />
C'est donc que le champ serait bien en utf8, ce qui n'améliore pas pour ma compréhension de l'enregistrement en BD.
Un nouvel essai devient donc nécessaire sans encode, ni decode mais en modifiant la fonction en mb_strtoupper_fr() :
Il fallait le faire mais le résultat reste le même !
Un dernier test... à tout hasard (toujours les mêmes entrées) ;
Un résultat inattendu, correct mais dont je te laisserai interpréter le pourquoi :
Au niveau appel, j'ai modifié comme annoncé la fonction :
<input id="nomadh" name="nomadh" type="text" required="required" size="30" value="<?php echo $nomadh= mb_strtoupper_fr($_POST['nomadh']);?>" />Elle a cependant fonctionné avec une fonction dont j'avais retiré les utf8_encode et decode :
//fonction mb_stroupper en français //Pour appeler la fonction: /*echo mb_strtouper_fr($variable); //par exemple $variable="je suis indigné"; echo mb_strtouper_fr($variable); // renvoit : JE SUIS INDIGNÉ function mb_strtoupper_fr($chaine) { $chaine= mb_strtoupper($chaine);/*$chaine=utf8_decode($chaine);*/$chaine=trim($chaine); $chaine= strtr($chaine, "äâàáåãéèëêòóôõöøìíîïùúûüýñçþÿæoeðø","ÄÂÀÁÅÃÉÈËÊÒÓÔÕÖØÌÍÎÏÙÚÛÜÝÑÇÞÝÆOEÐØ"); /*$chaine=utf8_encode($chaine);*/ return $chaine; }
Ce que j'ai retiré pour un résultat : $nomadh=CÉDAÏDE ; $ad1=rue de l'Hôpital ; $ville=CHÂTEAUROUX ;
Le GAG : Tous les résultats enregistrés sur la BD... sont erronés : 1947 Mme Cédaïde Josée rue de l\'Hôpital 36000 Châteauroux 2012 0000 0 2012-08-12 521 (minuscules et antislash) !
Je n'analyserai le pourquoi que demain... mais simple question : est-ce que dans le <input id="nomadh" name="nomadh" type="text" required="required" size="30" value="<?php echo $nomadh= mb_strtoupper_fr($_POST['nomadh']);?>" />, le echo $nomadh= mb_strtoupper_fr($_POST['nomadh']); instruit bien le $nomadh ?
Ce qui est sûr c'est que par cette méthode, je ne repasse pas par les mêmes fonctionnalités pour enregistrer...
Reste une question cruciale...
Pourquoi me faut-il passer par utf8_decode() pour enregistrer correctement les caractères accentués ?
Une évolution intéressante mas pas sans poser question. Merci d'avance de tes avis RJL2812