Problème complexe formulaire

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

26 oct. 2008, 12:36

Et c'est plutôt BOM que BOOM non ;-)
Non, non. C'est bien BOOOOOOM !!!
Parce que...
c'est un chewing-gum sur une fuite d'un générateur nucléaire
:lol:

Plus sérieusement, le BOM est (en gros) un marqueur invisible placé dans l'entête du fichier
qui permet d'identifier le jeu de caractères / l'encodage utilisé dans ledit fichier.

Préciser UTF-8 ne suffit donc pas forcément puisqu'il existent "UTF-8 avec BOM" et "UTF-8 sans BOM".
Mais le BOM risquant d'être interprété comme un caractère parasite et donc mal exploité,
mieux vaut s'en passer en optant pour le "UTF-8 sans BOM".

J'ignore si Dreamweaver fait clairement la différence.
Si tu as un doute tu peux télécharger SciTE, un petit éditeur gratuit qui fait très bien la distinction.

Fin de la parenthèse, je repasse le clavier à HyWaN... ;)

ViPHP
AB
ViPHP | 5818 Messages

26 oct. 2008, 20:58

Au passage, tu changes l'encodage une fois avoir convertis tes fichiers. Si tu ouvres un fichier en latin1 alors qu'il est censé l'ouvrir en utf-8, tu auras n'importe quoi. Et si tu l'enregistres, ça va mettre un bordel pratiquement irréparable. Donc fait une sauvegarde de tout ça avant :).
Je vois pas trop ce que tu veux dire. Si tu parle de dreamweaver, il s'agit du choix de l'encodage par défaut. Mais cela respecte les fichiers spécifiant un codage. D'ailleurs il y a une case à ne pas cocher (ou à décocher, je ne me souvient plus du réglage initial) pour éviter d'appliquer ce codage par défaut pour l'ouverture des fichiers ne spécifiant pas de codage.
Mais bon, le conseil de tout sauvegarder avant de faire les modifs est de toutes façons une sage précaution :wink:
J'ignore si Dreamweaver fait clairement la différence
Ben je vois pas à quoi serviraient tous ces régalges s'il ne la faisait pas... puisqu'une option dans le formulaire de normalisation unicode permet ou non d'inclure une signature unicode :-k

Et c'est plutôt BOM que BOOM non ;-)
Non, non. C'est bien BOOOOOOM !!!
Parce que...
c'est un chewing-gum sur une fuite d'un générateur nucléaire
:lol:
Mais le BOM risquant d'être interprété comme un caractère parasite et donc mal exploité...
...faisant bugguer nos zolies lignes de code. On est donc tous d'accord ça fait bien BOOM :lol:

Fin de la parenthèse, je repasse le clavier à HyWaN... ;)
De même :)

Eléphanteau du PHP | 15 Messages

26 oct. 2008, 20:58

Salut a tous merci pour vos messages. Je vais essayer de procéder dans l'ordre. Je vais refaire toutes les pages sur les conseils d'AB en re-créant chaque page avec par défaut l'unicode utf-8. Pour ça pas de problème dans Dreamweaver je sais faire (si si). Mais une question après avoir lancé chaque nouvelle page est-ce que je peux faire un simple copié collé du contenu body de ma page originale ou faut-il que je réécrive manuellement tout le code pour chaque page ?

HyWaN j'ai tenté une mise à jour de mon code PHP mais étant nullard à 2000% évidemment çà ne marche pas. J'ai essayé de remplcer la variable :
while (list($key, $val) = each($HTTP_POST_VARS)) {  
  $message .= "$key : $val\n";  
}
par
foreach($_POST as $key => $value) 
    var_dump($key, $value);
Ne connaissant rien de rien de rien en syntaxte PHP j'ai forcement raté quelque chose. Les mails arrivent bien mais sans aucun contenu.

Mon code original :
<?php 
$TO = "[email protected]"; 
$subject = "Retour formulaire RU"; 
$h = "From: Mon site"; 
$message = ""; 
while (list($key, $val) = each($HTTP_POST_VARS)) { 
  $message .= "$key : $val\n"; 
} 
mail($TO, $subject, $message, $h); 
header("Location:  [ Lien ]"); 
?> 
après correction
<?php
$to      = '[email protected]'; 
$subject = 'Retour Formulaire RU'; 
$message = null; 
foreach($_POST as $key => $value) 
    $message .= $key . ' : ' . $value . "\n";  
$headers = 'From: [email protected]' . "\r\n" . 
           'Reply-To: [email protected]' . "\r\n" . 
           'Content-Type: text/plain; charset=utf-8' . "\r\n"; 	
mail($TO, $subject, $message, $h);
header("Location: http://www.monsite.fr/retour_form-ru.html");
?>
J'ai également essayé de déterminer la version de mon PHP par
var_dump(phpversion());
mais ça fait deux plombes que j'y suis je ne vois pas comment faire. J'ai créé une page PHP en intégrant cette syntaxe mais ça ne donne rien. Je comprends que dalle.

pour continuer à suivre tes conseils l'entête de chaque page une fois refaites devient çà est-ce que c'est bon ?

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8" /> <meta http-equiv="content-script-type" content="text/javascript; charset=utf-8" /> <meta http-equiv="content-style-type" content="text/css; charset=utf-8" />
Voilà où j'en suis à cette heure.

ViPHP
ViPHP | 4674 Messages

27 oct. 2008, 00:18

La technique que je t'ai donné avec iconv n'est pas un hasard. Elle t'évite de retaper tout ton contenu, pour une simple et bonne raison : si tu fais un copier/coller de ta page originale avec le mauvais encodage vers la nouvelle page avec le bon encodage, ça ne marchera pas (sinon ce serait juste terrible) …
Tu es donc obligé de changer l'encodage du fichier et le programme que je t'ai donné fait ça. Il te prend ton ancien fichier, en crée un autre avec le bon encodage et verse le premier dans le second en modifiant l'encodage pour correspondre. C'est ce qu'il faut faire et tu n'as pas le choix. C'est ça ou tout réécrire à la main.

Je veux bien qu'il y ait une urgence et que tu n'es pas le temps de t'enfiler toute la syntaxe de PHP, mais elle reste très simple. Si tu ne sais pas à quoi sert la boucle que je t'ai donné, tu peux néanmoins observer le résultat. Je t'ai donné deux versions de la boucle foreach. La première affiche le contenu des variables via var_dump() (fonction de débuggage la plus usitée), et la seconde te concatène le contenu de ton formulaire à ton message.
Le code que tu as indiqué comme étant « après correction » devrait fonctionner d'après moi. Ou sinon, quelle est l'erreur ?

Pour le numéro de version de PHP, il suffit de mettre le code que je t'ai proposé dans un fichier et de l'exécuter (dans ton navigateur par exemple). Si la page ne contient que ça, ça ira très bien … Mais c'est pas compliqué quand même. Si tu utilises PHP en local à travers un programme comme EasyPHP ou WAMP, tu trouves facilement l'information (si tu as réussi à installer PHP manuellement, alors tu es très capable de connaître sa version …). Et si tu utilises PHP sur un hébergement, ton hébergeur te le précise. Donc même sans écrire de code, tu peux théoriquement le savoir.

Enfin, j'ai l'impression que tu ne connais pas plus l'HTML que le PHP. Dans le code que tu me présentes, tu as deux fois l'information content-type, ce n'est pas étrange ? Il suffit d'écrire :

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> <head> <title>Page principale — Mon Site</title> <meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8" /> <meta http-equiv="content-script-type" content="text/javascript; charset=utf-8" /> <meta http-equiv="content-style-type" content="text/css; charset=utf-8" /> …
J'ai ajouté la précision de la langue (à travers xml:lang). Si tu ne comprends pas ce que ça vient faire là, tu peux l'enlever. Ce n'est pas capital même si c'est préférable de l'avoir … Mais vu où on en est …
Aussi tu noteras que spécifier le charset pour les fichiers Javascript et CSS n'est pas obligatoire. C'est juste histoire d'uniformiser encore plus le travail et si tu fais quelque chose de particulier avec Javascript et CSS. C'est une sécurité, et ça t'assures de ne pas avoir de mauvaise surprise.

De plus, ne m'envoie pas de message privé. Si ton code doit être publié, fait le ici pour que tout le monde puisse t'aider. Je ne suis pas le seul à t'aider (AB et albat sont de la partie), il mérite aussi d'avoir les codes (à moins que tu n'aies envoyé un message privé à ces deux p'tits gars ?).

Bonne chance.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphanteau du PHP | 15 Messages

27 oct. 2008, 01:54

Nouvelle avancée des travaux. J'ai passé la journée à essayer de déterminer la version de mon PHP et j'ai pas réussi. J'ai copié le code dans une page html, puis dans une page PHP mais rien ne s'affiche sauf le mot phpinfo(); dans un écran vide. Je suis toujours au même problème la façon de faire. Je comprends les choses à faire, je comprends les fonctions à utiliser mais c'est la mise en oeuvre concrète qui me bloque à chaque fois ; qu'est-ce que j'écris concrètement dans mon code pour appeller cette fonction ? C'est peu comme quelqu'un qui te dirais phonétiquement une lettre chinoise et que toi tu doives la retrouver par écrit dans l'alphabet chinois. J'en suis là. Lorsque tu me dis qu'il faut que je mette phpinfo(); dans mon navigateur est-ce qu'il faut que je fasse une page web, une application PHP, une page txt et faire ouvrir avec IExplorer ? je ne le sais pas, j'essaye toutes les possibilités que je connais mais rien ne marche. J'essaye d'ingurgiter dans l'urgence le maximum d'infos mais là je sature je n'avance pas d'un millimètre et surtout je ne comprends pas ce que je fais ; je fais du vague copié coller en comprenant très bien le fond des changement à apporter aux codes mais pas du tout la forme.

Pour la correction du code PHP soumis lors de mon précédent message le mail est toujours bien envoyé mais avec un contenu vide.

Autre exemple j'ai bien placé la fonction
iconv -f [encodage de départ] -t utf-8 [fichier(s)] > test.html 
dans le code html. J'ai tout a fait compris l'utilité de cette fonction mais je ne vois pas le fichier créé avec le bon encodage je ne sais pas où il a été créé je ne le trouves pas.

Il faut être lucide on va prendre la décision demain mais on va sans doute abandonner le formulaire avec les caractères cyrilliques car il faut que je me rende à l'évidence je dois être à plus de 200 heures de boulot juste sur ce problème et je n'arrive même pas à avoir la version PHP que j'utilise ni mettre à jour mon script PHP d'envoi de mail alors que tout le monde m'a donné les nouvelles fonctions à utiliser. Rien n'est indiqué dans Dreamweaver seul mon hébergeur me dit "PHP4 PHP5 oui". A cette vitesse il va me falloir deux ou trois ans pour régler ce problème.

Rien n'est décidé mais comme le formulaire russe est très important on va sans doute s'orienter a prendre contact avec un programmeur indépendant qui va nous pondre juste le code pour les mails russe. On a posté des messages un peu partout sur le net pour trouver un programmeur qui pourrait nous faire le code contre rémunération mais personne n'est intéressé.

Donc ce soir c'est sans doute ma dernière soirée pour tenter de passer ces "putains" de caractères cyrilliques demain il va falloir que l'on décide de quelque chose à faire le site devant être à l'origine opérationnel mi septembre pour commencer à bosser avec les russes pour noël.

Merci pour votre aide à tous.

ViPHP
ViPHP | 4674 Messages

27 oct. 2008, 12:55

La version de PHP, c'est pas ultra important mais nécessaire toutefois.
Il suffit d'écrire ça :
<?php var_dump(phpversion()); phpinfo(); ?>
dans un fichier vierge que tu appelles test.php et c'est fini … Tu le mets sur ton serveur, et tu le lances depuis ton navigateur, fin de l'histoire.

La fonction iconv n'est pas une fonction de PHP mais une ligne de commande … Je pensais que c'était évidement vu sa forme :? (d'ailleurs, il me semblait l'avoir précisé) … Mais utilise le programme que je t'ai donné, ce sera plus facile. Commence par là quoi, je veux dire, tu dis n'avoir rien fait alors qu'il suffit de télécharger le programme, de l'ouvrir, de placer un fichier en entrée, et un en sortie, tu cliques 3 fois, et c'est fini, il t'a converti ton fichier. Ça n'a rien de sorcier et ça te permettrait d'avancer au moins. Tu ne te concentres pas sur les bonnes choses. Une grosse partie consiste à utiliser ce programme pour changer l'encodage. Une fois que c'est fait, tu serais nettement plus tranquille.

Commence par là. Fait cette opération pour chaque fichier et passe à l'étape suivante que je t'ai indiqué. Si ce n'est pas clair, dit-le moi mais je ne vois pas où ce n'est pas clair.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphanteau du PHP | 15 Messages

27 oct. 2008, 18:10

Salut à toi. Merci pour ton message clair et je suis désolé de vous saouler avec des trucs évident mais vu mon niveau zéro en programmation le simple truc est complexe. Juste pour info nous avons décidé de lancer le site pour le moment sans les formulaires en russe mais avec un renvoi vers le formulaire anglais. On doit arriver au bout des formulaires russes mais je gagne un peu plus temps maintenant.

Je pars en RDV mais dès ce soir je m'y remts en suivant tes conseils. A+.

ViPHP
AB
ViPHP | 5818 Messages

27 oct. 2008, 21:59

… Mais utilise le programme que je t'ai donné, ce sera plus facile. Commence par là quoi, je veux dire, tu dis n'avoir rien fait alors qu'il suffit de télécharger le programme, de l'ouvrir, de placer un fichier en entrée, et un en sortie, tu cliques 3 fois, et c'est fini, il t'a converti ton fichier.
Heu pour info on pourrait savoir de quel programme il s'agit ?

ViPHP
ViPHP | 4674 Messages

27 oct. 2008, 22:06

Je me cite :lol: :
Je suis allé sur iconv.org car il met en place une interface graphique Web pour faire ça au lieu de le faire en ligne de commande, et je suis tombé sur Charco. Je ne l'ai pas testé mais c'est un programme qui fait la même chose que ma ligne de commande sauf que c'est un programme avec une interface graphique et il existe sous Win, Mac et Linux. Je viens de le tester en fait, ça marche bien et c'est très simple à utiliser. Tu devrais t'y retrouver.
Faut lire attentivement ;-).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

ViPHP
AB
ViPHP | 5818 Messages

27 oct. 2008, 22:50

Je me cite :lol: :
Je suis allé sur iconv.org car il met en place une interface graphique Web pour faire ça au lieu de le faire en ligne de commande, et je suis tombé sur Charco. Je ne l'ai pas testé mais c'est un programme qui fait la même chose que ma ligne de commande sauf que c'est un programme avec une interface graphique et il existe sous Win, Mac et Linux. Je viens de le tester en fait, ça marche bien et c'est très simple à utiliser. Tu devrais t'y retrouver.
Faut lire attentivement ;-).
S'cuser votre honneur, y'a eu beaucoup de post depuis et je ne relis pas tout à chaque fois depuis le début :wink:

ViPHP
ViPHP | 4674 Messages

28 oct. 2008, 00:44

Je m'en doute, c'était plus une boutade :). Je ne lis pas non plus tous les postes, c'est normal.
Et ça fait un bon rappel pour notre ami en perdition :P.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphanteau du PHP | 15 Messages

31 oct. 2008, 05:12

Salut. j'ai pas répondu ces dernières heures car j'ai refait tout le site page par page en encodant directement en utf-8 pour être sur que celà soit bon même si j'ai trouvé le programme Charco très bien et...simple.

J'ai essayé de tester la version de PHP. Merci pour l'aide mais voyez dans mon ignorance lorsque l'on parlait de la version PHP utilisée je pensée la à une version éditée par mon Dreamweaver et non pas celle utilisée par le serveur. Il faut vraiment tout m'expliquer de a à z je suis désolé. Bref j'ai bien créé un fichier PHP appelé test.php appelé par une page html et j'obtiens ce résultat :

string(13) "4.4.4-8+etch6"
Warning: phpinfo() has been disabled for security reasons in /users/user106323/sites/monsite.fr/test.php on line 9

Les codes étaient faits comme celà :

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Document sans nom</title> </head> <body> <A href="test.php">Test</a> </body> </html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
</head>

<body>
<?php var_dump(phpversion()); phpinfo(); ?>
</body>
</html>
Voilà je vais finir vite la mise en page du site afin de le rendre fonctionnel très vite et pour continuer à m'atteler aux caractères russes.

ViPHP
AB
ViPHP | 5818 Messages

02 nov. 2008, 21:18

C'est la bonne façon de faire.
Une étape après l'autre et quand ça bug quelque part ne pas hésiter à tester les fonctions séparément dans un fichier isolé pour bien comprendre leur fonctionnement :wink:

Dans les pages php, n'hésites pas à inclure ce code :
header('Content-type: text/html; charset=UTF-8');
ça coute pas cher (gratuit), c'est pas compliqué et au moins cela indique le bon charset, sinon par défaut le serveur risque d'envoyer une entête au format iso qui prendra le pas sur l'entête que tu indiques dans le code HTML.

Eléphanteau du PHP | 15 Messages

03 nov. 2008, 00:03

Bonjour me revoici pour la suite des évènements. Et ben l'envoi des mails en russe fonctionne parfaitement. Je vais vous dire ce que nous avons fait. L'autre jour on a essayer d'envoyer directement des mails russe depuis différents sites de gestion de mails, notamment celui que nous devions utiliser pour le site et également depuis le serveur de mails fourni avec le pack d'hébergement et on s'est aperçu que les caractères russes ne passaient toujours pas. On en a essayé 4 ou 5 comme çà et toujours le même problème on a commençé a avoir un doute sur notre formulaire.

Et l'autre soir j'ai par dépi j'ai essayé d'envoyer notre formulaire sur Yahoo mail que notamment ma femme (qui est russe) utilise pour converser avec sa famille. Et là bingo les formulaires arrivent en respectant les caractères russes et ukrainiens parfaitement.

Donc depuis le début je m'exite sur les codes HTML et PHP de notre site pour faire passer ces caractères alors qu'apparament le problème viendrait de la boite de recption. Je parle au conditionnel sous votre controle. Un truc bizarre on a ouvert un compte mail sur un site russe exclusivement russe (rambler.ru) et les formulaires n'arrivent pas bien non plus là. Il n'y a que sur Yahoo que les retours de formulaires sont bons. Donc on va utiliser Yahoo et je serais heureux de lire vos analyses histoire de mourir un peu moins idiot.

Autre chose je vais être un gros lourd mais tant qu'à faire je vais tenter de mettre à jour mon script PHP d'envoi de formulaires qui a été jugé obsolète par tous ceux à qui je l'ai présenté.

Mon script d'origine qui marche bien :
<?php  
$TO = "[email protected]";  
$subject = "Retour formulaire RU";  
$h = "From: Mon site";  
$message = "";  
while (list($key, $val) = each($HTTP_POST_VARS)) {  
  $message .= "$key : $val\n";  
}  
mail($TO, $subject, $message, $h);  
header("Location:  [ Lien ]");  
?> 
et voici la correction indiquée par HyWaN les mails arrivent bien mais totalement vides :
<?php 
$to      = '[email protected]';  
$subject = 'Retour Formulaire RU';  
$message = null;  
foreach($_POST as $key => $value)  
    $message .= $key . ' : ' . $value . "\n";   
$headers = 'From: [email protected]' . "\r\n" .  
           'Reply-To: [email protected]' . "\r\n" .  
           'Content-Type: text/plain; charset=utf-8' . "\r\n";      
mail($TO, $subject, $message, $h); 
header("Location: http://www.monsite.fr/retour_form-ru.html"); 
?> 
Je dois avoir fait une petite erreur de syntaxe mais mon niveau m'empêche de la trouver. Merci.

ViPHP
ViPHP | 4674 Messages

03 nov. 2008, 00:53

Si tu fais ceci :
var_dump($message);
avant l'appel à la fonction mail(), qu'est-ce que cela t'affiche ?

L'impression que ça me donne, c'est que $_POST est vide. Est-ce que tu pourrais faire suivre ton var_dump par :
print_r($_POST);
pour vérification.

Merci d'indiquer les résultats.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).