Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

traitement d'un formulaire et envoi en BAL

21 réponses
Avatar
docanski
Bonsoir,
J'ai retrouvé dans mes archives le code aimablement fourni ici même par
un contributeur et testé en interne sous EsayPHP. Le formulaire à
traiter est ici : http://armorance.free.fr/formulaire.html .
Pour les essais en interne, sa première ligne de code est toutefois :
<form action="traitement.php" method="post" name="form1" id="form1"> et
le script PHP est le suivant :

<?php if(isset($ok)){
$dest="monmail@free.fr";
// on recupere les infos
$referer= getenv("HTTP_REFERER");
// envoi du resultat par email
$sujet= "Utilisation du formulaire Armorance";
$body="\n*** Resultat du formulaire ***\n";
if(count($HTTP_POST_VARS)){
while (list($key, $val) = each($HTTP_POST_VARS)){
$body.="$key : $val\n";
}
}
if(count($HTTP_GET_VARS)){
while (list($key, $val) = each($HTTP_GET_VARS)){
$body.="$key : $val\n";
}
}
$body.="*************************\n";
$headers = "From: monmail@free.fr";
mail($dest,$sujet,$body,$headers);
?>

Problème : lors des tests, EasyPHP me donne :
Parse error: parse error in g:\program files\easyphp1-8\www\armorance en
php\armorancephp\traitement.php on line 23
sachant évidemment que le chemin cité est celui du fichier sur une de
mes partitions.
Qu'est-ce qui cloche et, évidemment, est-ce que la méthode est bonne ou
y a-t'il une erreur au niveau du script (mise en page du traitement
envoyé par Email, notamment car je n'y vois aucun "print", retour
automatique du visiteur sur la page d'accueil après envoi du formulaire,
etc.) pour l'usage voulu ?

Cordialement,
--
docanski

- Les Côtes du nord de la Bretagne par le sentier des douaniers
- Memento des champignons : le guide le plus complet du Web
- Et d'autres sujets encore sur ----> http://armorance.free.fr

10 réponses

1 2 3
Avatar
Olivier Miakinen

le script PHP est le suivant :
[ un script de 21 ou 22 lignes ]

Problème : lors des tests, EasyPHP me donne :
Parse error: [...] on line 23


Tu as un test qui commence par « if(isset($ok)){ » mais qui ne se
termine jamais (aucune accolade fermante ne correspond à l'accolade
ouvrante).

Qu'est-ce qui cloche


Il doit te manquer la fin du script.

Avatar
docanski
Alors que les eleveurs et agriculteurs polluent toujours la Bretagne,
Olivier Miakinen nous narre ce qui suit en ce 19/04/2007 20:40 :

Il doit te manquer la fin du script.


En réalité, la réponse avait été donnée avec installation du script
*dans* le code du formulaire.
Je reproduis le tout ci-dessous, ce sera peut-être plus compréhensible :

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
<html xmlns="http://www.w3.org/1999/xhtml"&gt;
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<link href="armclair.css" rel="stylesheet" type="text/css" />
<title>formulaire</title>
</head>
<body>
<div id="formto"><p style="text-indent:0;text-decoration:underline
overline;color:red;font-weight:bold;text-align:center;margin-top:13px">|
Attention : les champs marqués d'un astérisque rouge doivent être
obligatoirement remplis ! |</p>
<form action="traitement.php" method="post" name="form1" id="form1">
<?php if(isset($ok)){
$dest="monmail";
// on recupere les infos
$referer= getenv("HTTP_REFERER");
// envoi du resultat par email
$sujet= "Prise de contact sur le site xxxxxxx";
$body="n*** Resultat du formulaire ***n";
if(count($HTTP_POST_VARS)){
while (list($key, $val) = each($HTTP_POST_VARS)){
$body.="$key : $valn";
}
}
if(count($HTTP_GET_VARS)){
while (list($key, $val) = each($HTTP_GET_VARS)){
$body.="$key : $valn";
}
}
$body.="*************************n";
$headers = "From: monmail";
mail($dest,$sujet,$body,$headers);
?>
<p>ICI Afficher "le formulaire a bien été envoyé"</p>
<?php
}
else{
?>
<p><input type="hidden" name="Mail Subj" value="Formulaire Armorance" /></p>
<div id="formga">
<input type="text" name="Nom" value="" class="cnil" /> Nom <span
class="rouge">*</span><br />
<input type="text" name="Association" value="" class="cnil" />
Association <span class="rouge">*</span><br />
<input type="text" name="Adresse" value="" class="cnil" /> Adresse<br />
<input type="text" name="Localité" value="" class="cnil" /> Localité<br />
<input type="text" name="Département" value="" class="cnil" />
Département<br />
<input type="text" name="Code postal" value="" class="cnil" /> Code
postal<br />
<input type="text" name="Pays" value="" class="cnil" /> Pays<br />
<input type="text" name="Email" value="" class="cnil" /> E-mail <span
class="rouge">*</span><br />
<hr />
Vous avez trouvé ce site par :<br />
<br />
<select name="Moteurs" style="width:220px">
<option label="Liste des moteurs et annuaires :">Liste des moteurs et
annuaires
<option label="&nbsp;">~~~~~~~~~~~~~~~~~~~~
<option label="Google">Google
<option label="Yahoo">Yahoo
<option label="Dmoz">Dmoz
<option label="Lokace">Lokace
<option label="Nomade">Nomade
<option label="Voila">Voila
<option label="Excite">Excite
<option label="MSN(Microsoft)">MSN(Microsoft)
<option label="Altavista">Altavista
<option label="Skynet_Belgique">Skynet Belgique
<option label="Francite_Canada">Francite Canada
<option label="Toile_du_Quebec">La Toile du Quebec
<option label="Ecila">Ecila
<option label="Lycos">Lycos
<option label="Hot_Bot">Hot Bot
<option label="Autre_moteur">Un autre moteur ou annuaire
<option label="Anneau">Un anneau (Ring)
<option label="Forum_FAQ">Un forum ou une FAQ
<option label="Lien_sur_site">Un lien sur un autre site
<option label="Autre">Autre
</select><br />
<hr />
Quel type d'ordinateur utilisez-vous ?<br />
<input type="radio" name="Ordi" value="PC Intel" /> PC à base de CPU
Intel<br />
<input type="radio" name="Ordi" value="PC Amd" /> PC à base de CPU
AMD<br />
<input type="radio" name="Ordi" value="PC autre CPU" /> PC à base
d'autre CPU<br />
<input type="radio" name="Ordi" value="Macintosh" /> Macintosh<br />
<input type="radio" name="Ordi" value="TV ou WAP" /> TV ou WAP/GSM<br />
<hr />
Quel navigateur utilisez-vous ?<br />
<input type="radio" name="Navi" value="IE 5.x" /> Internet Explorer
série 5<br />
<input type="radio" name="Navi" value="IE 6.x" /> Internet Explorer
série 6<br />
<input type="radio" name="Navi" value="IE 7.x" /> Internet Explorer
série 7<br />
<input type="radio" name="Navi" value="IE et surcouche" /> Surcouche
IE (Maxthon ou autre)<br />
<input type="radio" name="Navi" value="Opera 7.0" /> Opera 7.0 ou
supérieur<br />
<input type="radio" name="Navi" value="Mozilla ou Galeon" /> Mozilla,
Firefox ou Galeon<br />
<input type="radio" name="Navi" value="Autre navigateur" /> Autre
navigateur<br />
<hr />
Etes-vous sous système Linux ? <input type="radio" name="Linux"
value="Oui" /> Oui <input type="radio"
name="Linux" value="Non" /> Non<br /></div>
<div id="formdr">Quelle est la rubrique qui vous a intéressé ? <span
class="rouge">*</span><br />
<select name="Rubriques" style="width:360px">
<option label="Choix">Faites votre choix parmi les rubriques proposées :
<option label="&nbsp;">~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<option label="Vallee_de_la_Rance_maritime">La vallée de la Rance maritime
<option label="Cotes_du_Nord_de_l_Armorique">Les côtes du Nord de
l'Armorique
<option label="Memento_des_champignons">Le memento des champignons
<option label="Creer_un_site_Web">Comment créer un site Web
</select><br />
<hr />
Quel est votre avis à propos de ce site ? <span class="rouge">*</span><br />
<textarea name="Votre avis" rows="7" cols="39">
</textarea>
<br />
<br />
Avez-vous des suggestions à formuler ?<br />
Si c'est le cas, veuillez les proposer ci-dessous :<br />
<textarea name="Suggestions" rows="7" cols="39">
</textarea>
<br />
<br />
Vous trouvez la navigation et l'affichage des pages :<br /><br />
<input type="radio" name="surf" value="lent" /> lente
<input type="radio" name="surf" value="moyen" /> moyenne
<input type="radio" name="surf" value="rapide" /> rapide
<hr />
Vous estimez le rare accompagnement sonore<br /><br />
<input type="radio" name="musique" value="agreable" /> agréable
<input type="radio" name="musique" value="desagreable" /> désagréable
<input type="radio" name="musique" value="indifferent" /> indifférent
<br />
<hr />
<p style="font-family:cursive;Arial,sans-serif;text-indent:65px">Merci
d'avoir accepté de répondre !</p>
<p style="color:blue;font-family:verdana;text-indent:140px">Docanski</p>
</div>
<hr style="visibility:hidden;clear:both" />
<div id="formli"><br />
<input type="submit" name="submit" value=" Envoyer " /> <input
type="reset" value="Recommencer"
name="reset" /></div>
<div style="text-align:center"><h5><a href="index.htm"
class="Lien">Retour au sommaire général</a></h5>
<div id="cnil">Rassurez-vous : ces renseignements ne seront pas intégrés
à une base de données et ne seront
donc pas suivis de courrier indésirable <strong>sauf</strong> si vous le
souhaitez expressément (mises à jour
uniquement) !</div><br /></div>
<input name="ok" type="hidden" id="ok" value="1" />
<?php } ?>
</form>
</div>
</body></html>

L'action du formulaire étant d'être dirigée vers "traitement.php", je
supposais qu'il devait contenir ce script. Je n'y avais pas ajouté la
dernière accolade située dans les balises d'ouverture et de fermeture
situées à la fin du formulaire, croyant qu'il s'agissait d'une erreur :
dans mon ignorance, je croyais qu'elles étaient vides, l'accolade ne
m'ayant pas frappé. Si je les ajoute, le résultat n'est toutefois pas
probant : si je double le script en le nommant "traitement.php", le
résultat est l'affichage de elui-ci en clair :-( ... et rien d'autre et
si "traitement.php" n'existe pas, c'est évidemment une erreur d'URL qui
est affichée.

Cordialement,
--
docanski

- Les Côtes du nord de la Bretagne par le sentier des douaniers
- Memento des champignons : le guide le plus complet du Web
- Et d'autres sujets encore sur ----> http://armorance.free.fr

Avatar
P'tit Marcel
En réalité, la réponse avait été donnée avec installation du script
*dans* le code du formulaire.
Je reproduis le tout ci-dessous, ce sera peut-être plus compréhensible :
(...)

L'action du formulaire étant d'être dirigée vers "traitement.php", je
supposais qu'il devait contenir ce script. Je n'y avais pas ajouté la
dernière accolade située dans les balises d'ouverture et de fermeture
situées à la fin du formulaire, croyant qu'il s'agissait d'une erreur :
dans mon ignorance, je croyais qu'elles étaient vides, l'accolade ne
m'ayant pas frappé. Si je les ajoute, le résultat n'est toutefois pas
probant : si je double le script en le nommant "traitement.php", le
résultat est l'affichage de elui-ci en clair :-(


à vue de nez ce script complet ne contient pas d'erreur (les accolades
manquantes que signalait Olivier ont été ajoutées).

Si le problème est que le formulaire se réaffiche quand on clique sur
Envoyer, sans qu'aucun mail soit émis, alors je subodore un problème de
register_global (voir la faq ici http://faqfclphp.free.fr/#rub2.7).

Je te suggère donc de remplacer
if(isset($ok))
par
if(isset($_POST['ok']))


a+
--
P'tit Marcel
stats sur les forums modérés http://www.centrale-lyon.org/ng/

Avatar
docanski
Alors que les eleveurs et agriculteurs polluent toujours la Bretagne,
P'tit Marcel nous narre ce qui suit en ce 20/04/2007 18:38 :

à vue de nez ce script complet ne contient pas d'erreur (les
accolades manquantes que signalait Olivier ont été ajoutées).


Et pourtant, il ne fonctionne pas.
J'ai remis en page, séparé le script PHP du formulaire et mis en ligne
pour essayer, aucun résultat : ni envoi de l'email avec le résultat du
traitement, ni affichage du message de remerciement sur le poste du
visiteur.
Voici le script de traitement.php :

<?php
if(isset($ok)){
$dest="";
// on recupere les infos
$referer= getenv("HTTP_REFERER");
// envoi du resultat par email
$sujet= "Utilisation du formulaire Armorance";
$body="n*** Resultat du formulaire ***n";
if(count($HTTP_POST_VARS)){
while (list($key, $val) = each($HTTP_POST_VARS)){
$body.="$key : $valn";
}
}
if(count($HTTP_GET_VARS)){
while (list($key, $val) = each($HTTP_GET_VARS)){
$body.="$key : $valn";
}
}
$body.="*************************n";
$headers = "From: ";
mail($dest,$sujet,$body,$headers);
?>
<div style="position:relative;background:#ffffcc;border:1px red
groove;width:600px;padding:20px;height:auto;margin:auto;margin-top:169px;text-align:center">
<h3>Merci d'avoir accepté de remplir ce formulaire !</h3>
<h4>Pour poursuivre votre visite et retourner au sommaire général
cliquez ici : <a href="index.htm" style="color:blue">Armorance</a></h4>
</div>
<?php
}
else{
?>
<input name="ok" type="hidden" id="ok" value="1" />
<?php } ?>

et voici l'adresse du formulaire : http://armorance.free.fr/formperso.html" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://armorance.free.fr/formperso.html

Ces deux fichiers sont en ligne pour permettre les essais.
Si quelques spécialistes pouvaient me dépanner : je cale :-(

Je te suggère donc de remplacer if(isset($ok)) par
if(isset($_POST['ok']))


Pas de différence :-(

Cordialement,
--
docanski

- Les Côtes du nord de la Bretagne par le sentier des douaniers
- Memento des champignons : le guide le plus complet du Web
- Et d'autres sujets encore sur ----> http://armorance.free.fr

Avatar
Olivier Miakinen

Voici le script de traitement.php :

<?php
if(isset($ok)){


Je te conseille d'écrire :
if (isset($_REQUEST['ok'])) {

Même si actuellement tu as un php.ini qui autorise ça (ce qui est
déconseillé depuis quelques années quand même), tu sera embêté le
jour où tu voudras corriger tous tes scripts. Alors autant le faire
tout de suite.

[...]

et voici l'adresse du formulaire : http://armorance.free.fr/formperso.html


Pas moins de 54 erreurs de validation pour une page en XHTML. Je
suppose donc que tu ne la déclares pas en application/xhtml+xml
pour les navigateurs qui le supportent, sinon elle ne s'afficherait
même pas !

Il est très possible que la non fermeture des éléments "option" empêche
le formulaire d'être lu jusqu'au bout, ce qui expliquerait tes ennuis.

Essaye déjà de corriger ces erreurs. Surtout, plutôt que de faire un
document XHTML (Transitional en plus !!!) qui sera lu comme une soupe de
balises SGML, tu devrais passer à HTML 4.01 Transitional d'abord, puis à
HTML 4.01 Strict. Ce sera beaucoup plus propre.

Avatar
Olivier Miakinen

et voici l'adresse du formulaire : http://armorance.free.fr/formperso.html


Pas moins de 54 erreurs de validation pour une [soupe de balises SGML].


Au passage, et quoique ce ne soit pas le sujet de ta question, je te
signale qu'il te manque quelques cas à tes choix multiples.

Quel type d'ordinateur utilisez-vous ?
PC à base de CPU Intel
PC à base de CPU AMD
PC à base d'autre CPU
Macintosh
TV ou WAP/GSM


Autre : machines Bull ou IBM avec AIX, machines Sun avec Solaris,
machines HP avec HP/UX, etc. (Cray ?)

Vous estimez le rare accompagnement sonore
agréable désagréable indifférent


inexistant


Il y a aussi une petite coquille.

Vous trouvez la navigation et l'affichage des pages :
lente moyenne rapide


lents moyens rapides


Avatar
docanski
Alors que les eleveurs et agriculteurs polluent toujours la Bretagne,
Olivier Miakinen nous narre ce qui suit en ce 23/04/2007 19:19 :

Je te conseille d'écrire :
if (isset($_REQUEST['ok'])) {


C'est fait.

Pas moins de 54 erreurs de validation pour une page en XHTML.


Voui, je m'en doutais : pressé d'avancer, j'avais réécrit ce formulaire
en vitesse et attribué une DTD transitionnelle "au cas où". J'aurais dû
prendre le temps de vérifier, en effet, les balises <option> n'étaient
pas fermées.
Mea Culpa mais c'est corrigé là aussi et il est désormais publié avec
une DTD stricte.

Il est très possible que la non fermeture des éléments "option" empêche
le formulaire d'être lu jusqu'au bout, ce qui expliquerait tes ennuis.


Ben non, c'est pas ça : malgré ces corrections, toujours aucun résultat.

Surtout, plutôt que de faire un
document XHTML (Transitional en plus !!!) qui sera lu comme une soupe de
balises SGML, tu devrais passer à HTML 4.01 Transitional d'abord, puis à
HTML 4.01 Strict. Ce sera beaucoup plus propre.


Je sais : j'écris toutes mes pages en XHTML Strict mais ici j'ai pêché
par excès de précipitation et balancé une "transitionnelle" vite fait.
Mébon, ce n'était de toute façon que pour les tests.
Reste que je suis toujours dans la m.... :-(
Une autre piste everybody ?

Cordialement,
--
docanski

- Les Côtes du nord de la Bretagne par le sentier des douaniers
- Memento des champignons : le guide le plus complet du Web
- Et d'autres sujets encore sur ----> http://armorance.free.fr

Avatar
Olivier Miakinen

Il est très possible que la non fermeture des éléments "option" empêche
le formulaire d'être lu jusqu'au bout, ce qui expliquerait tes ennuis.


Ben non, c'est pas ça : malgré ces corrections, toujours aucun résultat.


Dommage. J'aurais aimé que ce soit aussi simple que ça.

Surtout, plutôt que de faire un
document XHTML (Transitional en plus !!!) qui sera lu comme une soupe de
balises SGML, tu devrais passer à HTML 4.01 Transitional d'abord, puis à
HTML 4.01 Strict. Ce sera beaucoup plus propre.


Je sais : j'écris toutes mes pages en XHTML Strict mais ici j'ai pêché
par excès de précipitation et balancé une "transitionnelle" vite fait.
Mébon, ce n'était de toute façon que pour les tests.


<petit troll>
Ok, cela valide maintenant en XHTML 1.0 Strict, mais il n'empêche que
cela reste de la soupe de balises pour les navigateurs puisque tu
déclares dans les entêtes que c'est du HTML (qui plus est sans préciser
de charset).
</petit troll>

Reste que je suis toujours dans la m.... :-(
Une autre piste everybody ?


Pas encore, mais je vais y regarder d'un peu plus près maintenant.


Avatar
Olivier Miakinen

Voici le script de traitement.php :

<?php
if(isset($ok)){
[ code PHP pour envoyer le courriel et bout de source HTML ]
<?php
}
else{
?>
<input name="ok" type="hidden" id="ok" value="1" />
<?php } ?>


Aucune des deux parties de ce script n'est une page HTML complète.

En outre, ...

et voici l'adresse du formulaire : http://armorance.free.fr/formperso.html


... ce formulaire ne positionne pas la valeur "ok", ce qui fait que dans
traitement.php c'est toujours la 2e branche du « else » qui est choisie.


Alors vite fait, juste pour que ça fasse enfin quelque chose, même si
c'est moche et tout, remplace « if (isset($ok) » par « if (1) ».

Ensuite tu vireras tout le code inutile (if { ... } else { ... }) et tu
rajouteras le reste du HTML. Mais il sera temps de le faire quand enfin
tu nous auras dit « ça y est, le courriel est envoyé », pas avant.

Avatar
docanski
Alors que les eleveurs et agriculteurs polluent toujours la Bretagne,
Olivier Miakinen nous narre ce qui suit en ce 24/04/2007 1:12 :

Alors vite fait, juste pour que ça fasse enfin quelque chose, même si
c'est moche et tout, remplace « if (isset($ok) » par « if (1) ».
Ensuite tu vireras tout le code inutile (if { ... } else { ... }) et
tu rajouteras le reste du HTML. Mais il sera temps de le faire quand
enfin tu nous auras dit « ça y est, le courriel est envoyé », pas
avant.


Le formulaire constitue une page HTML ne contenant aucune ligne de code
en php et renvoie donc vers le script final "traitement.php" présent sur
le serveur qui est désormais :

<?php
if (1) {
$dest="";
// on recupere les infos
$referer= getenv("HTTP_REFERER");
// envoi du resultat par email
$sujet= "Utilisation du formulaire Armorance";
$body="n*** Resultat du formulaire ***n";
if(count($HTTP_POST_VARS)){
while (list($key, $val) = each($HTTP_POST_VARS)){
$body.="$key : $valn";
}
}
if(count($HTTP_GET_VARS)){
while (list($key, $val) = each($HTTP_GET_VARS)){
$body.="$key : $valn";
}
}
$body.="*************************n";
$headers = "From: ";
mail($dest,$sujet,$body,$headers);
?>
<div style="position:relative;background:#ffffcc;border:1px red
groove;width:600px;padding:20px;height:auto;margin:auto;margin-top:169px;text-align:center"><h3>Merci
d'avoir accepté de remplir ce formulaire !</h3>
<h4>Pour poursuivre votre visite et retourner au sommaire général
cliquez ici : <a href="index.htm" style="color:blue">Armorance</a></h4>
</div>
<input name="ok" type="hidden" id="ok" value="1" />
<?php } ?>

Mais ...
:-( : le courriel n'est pas envoyé et le serveur me renvoie l'erreur
suivante :

Warning: mail() [function.mail]: Spam detecte, mail non envoye. in
/mnt/141/sdb/6/1/monmail/traitement.php on line 21

Bien entendu, l'adresse "monmail" dans le script est évidemment
remplacée par la véritable adresse du destinataire que je ne reproduis
pas ici pour éviter d'éventuels futurs spams.
Je sens que ça vient ;-) ... mais ce n'est pas encore ça.

Cordialement,
--
docanski

- Les Côtes du nord de la Bretagne par le sentier des douaniers
- Memento des champignons : le guide le plus complet du Web
- Et d'autres sujets encore sur ----> http://armorance.free.fr

1 2 3