|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |||
|
Invité de passage
![]() Inscription : avril 2007 Messages : 9 ![]() |
Bonjour,
Je me pose plusieurs questions à l'égard du script PHP/HTML plus bas (depuis Alice) : 1. Je ne comprends pas pourquoi s'affiche systématiquement Missing fields ! après l'envoi du formulaire, que tous les champs soient renseignés ou non. Par ailleurs le message du nouveau formulaire contient : Citation:
3. Comment ce script peut-il être optimisé (erreurs, failles, allègements sémantique et syntaxique, etc) ? Merci d'avance à ceux qui prendront le temps de répondre. Code :
|
|||
|
|
00
|
|
|
#2 | ||
![]() ![]() Gérard ErnaelstenDBA & Dev PHP Inscription : juin 2005 Messages : 3 182 ![]() |
N'ayant pas ta fonction formulaire sous les yeux.
je dirais que dans ce bout de code Code :
sont vide !
__________________
Il faut toujours viser la lune, car même en cas d'échec on arrive dans les étoiles. O.Wilde Mes Articles/Critiques : Merise - Guide pratique PHPExcel PostgreSQL : Administration et exploitation d'une base de données PostgreSQL : Entraînez-vous à créer et programmer une base de données relationnelle |
||
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : avril 2007 Messages : 9 ![]() |
MaitrePylos,
La fonction formulaire() définit l'affichage du formulaire par le bout de code HTML contenu dans entre les balises <form>. Même lorsque tous mes champs sont remplis (et l'email valide), Missing Fields ! est retourné alors que le message devrait m'être mailé (il ne l'est d'ailleurs jamais). Quelqu'un a-t-il une idée ? |
|
|
00
|
|
|
#4 | ||||
![]() ![]() Gérard ErnaelstenDBA & Dev PHP Inscription : juin 2005 Messages : 3 182 ![]() |
dans ton form, déjà tu as une erreur
Code :
Code :
__________________
Il faut toujours viser la lune, car même en cas d'échec on arrive dans les étoiles. O.Wilde Mes Articles/Critiques : Merise - Guide pratique PHPExcel PostgreSQL : Administration et exploitation d'une base de données PostgreSQL : Entraînez-vous à créer et programmer une base de données relationnelle |
||||
|
|
00
|
|
|
#5 |
|
En attente de confirmation mail
![]() Inscription : juin 2002 Messages : 6 164 ![]() |
S'agit-il d'un script recyclé, j'entends par là modifié suite à une modification de la directive register_globals à Off car certaines de vos variables ne sont jamais définies ($name, $subject, $email par exemple) ?
Les fonctions ereg* sont dépréciées en faveur des fonctions preg_* Les variables $HTTP_REFERER, $REMOTE_ADDR, $HTTP_USER_AGENT et $PHP_SELF s'écrivent maintenant $_SERVER['HTTP_REFERER'], etc (rejoint la première remarque) |
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Inscription : avril 2007 Messages : 9 ![]() |
N'ayant jamais fait de PHP j'ai adapté un script de formulaire PHP/HTML (ici) à l'utilisation simple que je souhaite en faire.
Je comprends que si Missing fields ! est retourné en permanence cela signifie bêtement qu'au moins une des variable suivantes $Vname, $message, $email, $subject est 'vide' en permanence. D'ailleurs pourquoi $Vname et non $name ? ou pourquoi pas $Vsubject au lieu de $subject ? Considérons Code :
<tr><td>Subject</td><td><input type="text" name="subject" size="68" value="<?php echo trim(htmlentities($subject)) ?>" /></td></tr> Cela ne signifie-t-il pas qu'on affecte à la variable $subject le 'sujet' du message laissé par le visiteur ? Auquel cas, la variable $subject prend cette valeur. |
|
|
00
|
|
|
#7 | |
|
En attente de confirmation mail
![]() Inscription : juin 2002 Messages : 6 164 ![]() |
Citation:
Note : il est facile de vérifier la valeur du paramètre register_globals, il suffit de consulter la sortie de la fonction phpinfo. |
|
|
|
00
|
|
|
#8 | ||
|
Invité de passage
![]() Inscription : avril 2007 Messages : 9 ![]() |
Après quelques ajustements, j'utilise ce nouveau script (allégé) :
Code :
En fait la définition et l'utilisation des variables $V... me perturbent. Pourquoi ce $Vname=trim(htmlentities($_POST["name"])); ? |
||
|
|
00
|
|
|
#9 | ||
|
En attente de confirmation mail
![]() Inscription : juin 2002 Messages : 6 164 ![]() |
C'est plutôt que vous n'utilisez pas les mêmes noms de variable partout :
Code :
|
||
|
|
00
|
|
|
#10 | ||
|
Invité de passage
![]() Inscription : avril 2007 Messages : 9 ![]() |
Le script ci-dessous semble enfin fonctionner en supprimant la re-définition des variables par trim() et htmlentities(). Ne perd-on pas du coup les bienfaits de ces 2 fonctions ?
Code :
Merci pour vos conseils et votre sagacité. |
||
|
|
00
|
|
|
#11 | |||
|
En attente de confirmation mail
![]() Inscription : juin 2002 Messages : 6 164 ![]() |
S'il fonctionne comme vous l'avez redonné c'est que register_globals est à On et je parlais de supprimer les traitements redondants (trim + htmlentities) dans la fonction formulaire.
Citation:
Code Javascript :
Note : il ne faut pas oublier que le Javascript peut être désactivé. |
|||
|
|
00
|
|
|
#12 | ||
|
Invité de passage
![]() Inscription : avril 2007 Messages : 9 ![]() |
Même en modifiant mon script selon vos remarques, il s'avère que seul le script suivant retourne un formulaire viable.
Code :
* Si j'écris $msg="Provenance : $_SERVER['HTTP_REFERER']\n"; au lieu de $msg="Provenance : $HTTP_REFERER\n"; => erreur : Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in contact.php3 on line 42 * Si j'écris $name=trim(htmlentities($_POST['name'])); au lieu de // $name=trim(htmlentities($_POST['name'])); => erreur : 'Fields are missing' s'affiche systématiquement (le script est également toujours réinitialisé). En bref, le script semble tourner bien que faisant fi de nombre de vos remarques. Je souhaiterais qu'il prenne en compte vos remarques pour l'optimiser davantage. Comprenez-vous les 3 observations ci-dessus ? |
||
|
|
00
|
|
|
#13 |
|
En attente de confirmation mail
![]() Inscription : juin 2002 Messages : 6 164 ![]() |
J'ai ma réponse : ils utilisent une version 4.0.5 et register_globals est à On. Donc exit $_POST et donc si vous tenez à spécifier la provenance de votre variable :
|
|
|
00
|
|
|
#14 |
|
Invité de passage
![]() Inscription : avril 2007 Messages : 9 ![]() |
Merci pour l'info.
Cela veut-il dire que lorsqu'Alice passera la directive register_globals à Off, mon script deviendra 'moins bien' écrit et sera plus vulnérable ? |
|
|
00
|
|
|
#15 | |
|
En attente de confirmation mail
![]() Inscription : juin 2002 Messages : 6 164 ![]() |
Citation:
|
|
|
|
00
|
|
|
#16 | ||
|
Invité de passage
![]() Inscription : avril 2007 Messages : 9 ![]() |
Je me suis mal exprimé : mon code actuel (qui marche) n'utilise pas le nom de la méthode d'où proviennent les variables (ex : $_POST['name'] au lieu de $name). Cela ne pose pas de pb puisque register_globals est à On. Que se passera-t-il lorsqu'Alice le passera à Off ? Utiliser $HTTP_SERVER_VARS, $HTTP_ENV_VARS, $HTTP_POST_VARS, y changera-t-il quelque chose ?
Code :
|
||
|
|
00
|
|
|
#17 | |
|
En attente de confirmation mail
![]() Inscription : juin 2002 Messages : 6 164 ![]() |
Citation:
|
|
|
|
00
|
|
|
#18 |
|
Invité de passage
![]() Inscription : avril 2007 Messages : 9 ![]() |
Si jamais je récuperais le numéro d'Alice, c'est pas la 1ère chose que je lui demanderai une upgrade >= 4.2.0...
julp, j'ose encore une fois vous demander conseil : certains caractères (en l'occurrence 'é', '§', 'è', 'ç', 'à', 'ù', 'µ', '¨' et '£') sont retranscrits '??' dans le mail que je reçois. Quelques uns sont courants. Une idée comment les autoriser ? |
|
|
00
|
|
|
#19 |
|
En attente de confirmation mail
![]() Inscription : juin 2002 Messages : 6 164 ![]() |
Un problème d'encodage : vous semblez utiliser de l'UTF-8 pour votre page donc je pense que vous devriez ajouter l'en-tête "Content-type: text/html; charset=utf-8" dans votre mail ou changer l'encodage de votre page (iso-8859-1) ou encore appliquer la fonction utf8_decode :
Code :
if (mail($recipient,$subject,utf8_decode($msg))) { |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com