erreur dans un formulaire

Le premier forum francophone sur l'éditeur de pages Web multiplateforme (Linux, Mac OS X, Windows) qui monte… KompoZer, héritier de Nvu, permet de créer vos pages Web graphiquement (wysiwyg) sans aucune connaissance du langage HTML.

Modérateur : chinon37

aleka

erreur dans un formulaire

Message par aleka »

Bonjour,
Je suis complètement novice en html et en php. Je suis en train de finir mon premier site, avec Kompozer.

j'ai essayé de construire un formulaire de contact en adaptant celui proposé dans http://info.sio2.be/kpz/5/index.php.
Tou fonctionne jusqu'à l'affichage des données du formulaire dans une page d'envoi.
Mais quand j'insère la partie du code relative à l'envoi de l'e-mail j'ai le message d'erreur suivant : "Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING in C:\Program Files\Utilitaires\EasyPHP 2.0b1\www\MonSite\Envoi.php on line 114".
Pourriez-vous me conseiller ?

ci-dessous le le code du formulaire :

Code : Tout sélectionner

<form method="post" action="Envoi.php" name="Contact">
Nom : &nbsp; &nbsp; &nbsp; <input size="30"
 name="Nom"><br>
  <br>
Prénom : &nbsp;&nbsp;<input size="30" name="Prenom"><br>
  <br>
Fonction :&nbsp; <input size="40" name="Fonction"><br>
  <br>
  <br>
Ville-Pays :&nbsp; <input size="45" name="VillePays"><br>
  <br>
E-mail :&nbsp; <input size="35" name="eMail"><br>
  <br>
Message : <br>
Message : <textarea name="Message" rows="15" cols="55">votre
message</textarea><br>
  <br>
  <br>
  <br>
Valider <input name="val" value="OK" type="submit">
&nbsp;ou&nbsp; <input name="recom"
 value="recommencer" type="reset"><br>
  <br>
  <br>
  <br>
</form>

code de la page d'envoi, (la ligne 114 : echo "Votre e-mail : $eml <br /><br>";)

Code : Tout sélectionner

<br>
<?php $n = htmlentities($_POST['Nom']); $p = htmlentities($_POST['Prenom']); $f = htmlentities($_POST['Fonction']); $vp = htmlentities($_POST['VillePays']);$eml = htmlentities($_POST['eMail']);$ms = htmlentities($_POST['Message']);
echo "Votre nom : $n <br />";
echo "Votre prénom : $p <br /><br>";
echo "Votre fonction : $f <br /><br>";
echo "Vous habitez : $vp <br /><br>";
echo "Votre e-mail : $eml <br /><br>";
echo "Votre message : $ms <br />";
$message = $n."\n";
$message .= $p "\n";
$message .= "Fonction : $f \n";
$message .= "Ville Pays : $vp \n";
$message .= "E-mail : $eml \n";
mail ("monadresse@monFAI", "Contact Web", $message, "From: $n");
echo "Votre avis vient de m'&ecirc;tre envoy&eacute; <br />"; ?><br>
<br>

merci pour votre aide.

logiciels utilisés :
Kompozer version 0.7.10
Windows XP
EasyPHP
IE 7

Message envoyé avec : Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)
Fabrice.Tres.Net
Tyrannosaurus Rex
Messages : 2390
Inscription : 26 juin 2006, 12:50

Message par Fabrice.Tres.Net »

Je ne vois pas...
mais je te suggère de faire un essai en remplaçant $eml par $vp à la ligne 114.

Si cela déconne toujours c'est qu'il y a certainement une erreur de syntaxe que l'on ne voit pas.

Es-tu sûr que le champ Email n'est pas vide?
Ymai
Tyrannosaurus Rex
Messages : 4220
Inscription : 12 mars 2005, 11:36

Message par Ymai »

Fabrice.Tres.Net a écrit :Je ne vois pas...
mais je te suggère de faire un essai en remplaçant $eml par $vp à la ligne 114.
Ou même carrément eMail si l'on en croit le code de la page de formulaire.

Code : Tout sélectionner

E-mail :&nbsp; <input size="35" name="eMail">
Mais ce serait mieux de pouvoir disposer du code intégral des deux pages.

Message envoyé avec : Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.3) Gecko/2008092510 Ubuntu/8.04 (hardy) Firefox/3.0.3
ymai
« Un enfant de cinq ans comprendrait cela ! Allez me chercher un enfant de cinq ans ! »
Groucho Marx.
aleka

erreur dans un formulaire

Message par aleka »

merci pour vos réponses.
1)
je te suggère de faire un essai en remplaçant $eml par $vp à la ligne 114.
j'ai essayé en remplaçant aux 2 lignes concernées (114 et 120), mais toujours le même message d'erreur.

2)
Ou même carrément eMail si l'on en croit le code de la page de formulaire.

a priori je ne comprends pas pourquoi cela marcherait, mais le remplacement ne change rien.

3) j'ai aussi essayé de nommer autrement la variable message utiliséeà la fin pour éliminer un éventuel conflit, en vain.

4) j'avais fait une sélection du code pour ne pas "embarrasser" mais le voici en entier. J'ai profité pour enlever des indications de mise en page en privilégiant ainsi la fonctionnalité (on verra peut-être ensuite la forme). Mais en dehors de cela c'est une ligne différente qui est mise en cause maintenant (echo "Vous habitez : $vp <br /><br>";).

formulaire :

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
  <meta content="text/html; charset=ISO-8859-1"
 http-equiv="content-type">
  <title>Formulaire</title>
</head>
<body>
<br>
<br>
<form method="post" action="Envoi.php" name="Contact">
Nom : &nbsp; &nbsp; &nbsp; <input size="30"
 name="Nom"><br>
  <br>
Prénom : &nbsp;&nbsp;<input size="30" name="Prenom"><br>
  <br>
Fonction :&nbsp; <input size="40" name="Fonction"><br>
  <br>
  <br>
Ville-Pays :&nbsp; <input size="45" name="VillePays"><br>
  <br>
E-mail :&nbsp; <input size="35" name="eMail"><br>
  <br>
Message : <br>
Message : <textarea name="Message" rows="15" cols="55">votre
message</textarea><br>
  <br>
  <br>
  <br>
Valider <input name="val" value="OK" type="submit">
&nbsp;ou&nbsp; <input name="recom"
 value="recommencer" type="reset"><br>
  <br>
  <br>
  <br>
</form>
</body>
</html>



page d'envoi

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
  <meta content="text/html; charset=ISO-8859-1"
 http-equiv="content-type">
  <title>envoi.php</title>
</head>
<body>
Voici le message que vous venez d'envoyer.<br>
<br>
<?php $n = htmlentities($_POST['Nom']); $p = htmlentities($_POST['Prenom']); $f = htmlentities($_POST['Fonction']); $vp = htmlentities($_POST['VillePays']);$eml = htmlentities($_POST['eMail']);$ms = htmlentities($_POST['Message']);
echo "Votre nom : $n <br />";
echo "Votre prénom : $p <br /><br>";
echo "Votre fonction : $f <br /><br>";
echo "Vous habitez : $vp <br /><br>";
echo "Votre e-mail : $eml <br /><br>";
echo "Votre message : $ms <br />";
$message = $n."\n";
$message .= $p "\n";
$message .= "Fonction : $f \n";
$message .= "Ville Pays : $vp \n";
$message .= "E-mail : $eml \n";
$message .= "Message : $ms \n";
mail ("xxxx at yyyyy.fr", "Contact Web", $message, "From: $n");
echo "Votre avis vient de m'&ecirc;tre envoy&eacute; <br />"; ?><br>
<br>
<br>
<br>
<br>
<br>
</body>
</html>
Voilà, je continue à faire des essais de mon côté.

Message envoyé avec : Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Wysigot 6.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Ymai
Tyrannosaurus Rex
Messages : 4220
Inscription : 12 mars 2005, 11:36

Re: erreur dans un formulaire

Message par Ymai »

aleka a écrit : 2)
Ou même carrément eMail si l'on en croit le code de la page de formulaire.

a priori je ne comprends pas pourquoi cela marcherait, mais le remplacement ne change rien.
Parce que dans le code, la variable s'appelait effectivement Email (voir l'extrait cité)

Il y a deux petites fautes aux lignes 18 et 19 de Envoi.php (je n'aime pas cette majuscule :roll: ).
Il faut écrire:

Code : Tout sélectionner

$message = "$n \n";
$message .= "$p \n";
Merci d'avoir eu la délicatesse de ne pas poster des centaines de lignes de texte, au départ. Mais pour pouvoir faire un test, c'était plus simple d'avoir l'ensemble.

Message envoyé avec : Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.0.3) Gecko/2008092510 Ubuntu/8.04 (hardy) Firefox/3.0.3
ymai
« Un enfant de cinq ans comprendrait cela ! Allez me chercher un enfant de cinq ans ! »
Groucho Marx.
aleka

erreur dans un formulaire

Message par aleka »

merci, ça avance : la page d'envoi s'affiche avec le contenu des champs du formulaire.
Néanmoins il y a un messae d'erreur juste après le dernier champ affiché :

Code : Tout sélectionner

Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\Program Files\EasyPHP 2.0b1\www\MonSite\Envoi.php on line 20
Votre avis vient de m'être envoyé 
Peut-être est-ce parce qu'il s'agit d'essais en local et non sur un serveur web ?

Autrement j'ai enregistré l'info concernant le nom des fichiers : pas de majuscule.

En attendant une réponse je vais télécharger Filezilla pour voir comment envoyer ces pages sur le serveur.

Message envoyé avec : Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Wysigot 6.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Ymai
Tyrannosaurus Rex
Messages : 4220
Inscription : 12 mars 2005, 11:36

Re: erreur dans un formulaire

Message par Ymai »

aleka a écrit : Peut-être est-ce parce qu'il s'agit d'essais en local et non sur un serveur web ?
Tout simplement parce qu'il n'y a pas de serveur mail sur la machine locale.
Autrement j'ai enregistré l'info concernant le nom des fichiers : pas de majuscule.
Les majuscules sont permises; mais la casse a de l'importance dans l'adresse URL alors qu'elle n'en a aucune sous Windows seul. Il vaut donc mieux s'en tenir à une norme: tout en majuscules (rare) ou tout en minuscules. Lorsque l'on dicte une adresse, il n'y a alors rien à préciser à son interlocuteur.

Message envoyé avec : Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.0.3) Gecko/2008092510 Ubuntu/8.04 (hardy) Firefox/3.0.3
ymai
« Un enfant de cinq ans comprendrait cela ! Allez me chercher un enfant de cinq ans ! »
Groucho Marx.
aleka

erreur dans un formulaire

Message par aleka »

Ca avance toujours, avec vos conseils.
La page d'envoi s'affiche bien sur le site web (après publication donc), le message part.
Cependant il y qq problèmes à l'arrivée sur le compte de messagerie, le second évoqué étant le plus sérieux.

Dans le corps de l'e-mail :
1) dans le message : les accents sont remplacés par des hiéroglyphes, par exemple "mach&eacute;" pour "maché". Le texte est donc illisible.

2) l'e-mail de l'expéditeur (xxx at mmm.gp) est affiché de cette manière dans le message :
E-mail : <span class="contextEntry" id="xxx at mmm.gp_body">xxx at mmm.gp</span>

(arobase remplacé par at par moi ici)

dans l'en-tête de l'e-mail
3) l'expéditeur indiqué est "Popov at locus.webserversystems.com" alors que j'avais juste mis "Popov" dans le formulaire.

(arobase remplacé par at par moi ici)


Autres questions
4) Y a-t-il des (d'autres) problèmes de sécurité dans cette utilisation de formulaire qui pourraient être réglés/limités facilement par quelqu'un de néophyte ?
5) Dans le même ordre d'idées, est-ce risqué de faire un lien webmaster sur les pages d'un site ? y a-t-il un moyen "sécuritaire" de le faire ou suffit-il de faire un simple lien vers une adresse électronique ?

merci beaucoup

Message envoyé avec : Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Wysigot 6.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Fabrice.Tres.Net
Tyrannosaurus Rex
Messages : 2390
Inscription : 26 juin 2006, 12:50

Message par Fabrice.Tres.Net »

1. Ce ne sont pas des hiéroglyphes, c'est juste le résultat de http://fr2.php.net/htmlentities, à toi de les décoder à l'arrivée!

4. Voir http://www.phpsecure.info/v2/article/Ma ... Inject.php
Ymai
Tyrannosaurus Rex
Messages : 4220
Inscription : 12 mars 2005, 11:36

Message par Ymai »

Fabrice.Tres.Net a écrit :1. Ce ne sont pas des hiéroglyphes, c'est juste le résultat de http://fr2.php.net/htmlentities, à toi de les décoder à l'arrivée!
Le problème est que c'est dans un mail... Guère d'action possible à ce niveau.
On peut contourner le problème en utilisant htmlspecialchars au lieu de htmlentities


Message envoyé avec : Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.3) Gecko/2008092510 Ubuntu/8.04 (hardy) Firefox/3.0.3
ymai
« Un enfant de cinq ans comprendrait cela ! Allez me chercher un enfant de cinq ans ! »
Groucho Marx.
Fabrice.Tres.Net
Tyrannosaurus Rex
Messages : 2390
Inscription : 26 juin 2006, 12:50

Message par Fabrice.Tres.Net »

1. :oops: :lol:

En fait, TB décode cela "correctement" même si le message est affiché en texte seul!
Par exemple

Code : Tout sélectionner

\"&eacute;&eacute;&agrave;&agrave;&egrave;&ccedil;&ccedil; >>><<<\" \'\'<br /><em>essai  &eacute;&eacute;&agrave;&agrave;&egrave;&ccedil;&ccedil; >>><<<  et "guillemets"<br />
'simple quote' < >></em>
s'affiche

essai \"ééààèçç >>><<<\" \'\'
essai ééààèçç >>><<< et "guillemets"
'simple quote' < >>

Concernant la sécurité du formulaire, les spammeurs vont essayer de l'utiliser pour envoyer des mails.
J'ai choisi de ne pas envoyer de mail automatique de confirmation à l'émetteur, rendant inutile ce formulaire pour des spammeurs.
Bien entendu, il faut veiller à verrouiller les autres champs du mail pouvant recevoir de l'injection de "code"!
aleka

erreur dans un formulaire

Message par aleka »

Merci beaucoup pour vos réponses.

Moi qui pensais être au bout du tunnel !
Je précise : je suis néophyte. Je ne prétends donc pas faire des choses très compliquées sans un minimum d'apprentissage. Cependant, à voir les nombreux tutoriels, je pensais naïvement que les formulaires fonctionnaient généralement, avec qq des pbs de sécurité. Il semble que cela ne soit pas le cas...

Je reprends la numérotation des questions.

1) si je comprends bien ce n'est pas le résultat d'une erreur : on doit utiliser htmlentities pour des questions de sécurité mais avec des effets secondaires importants.
En fait, TB décode cela "correctement" même si le message est affiché en texte seul!
J'imagine qu'il s'agit de Thunderbird. En fait pour des raisons de sécurité c'est sur un webmail que les messages sont consultés et non en local.
A propos, faut-il aussi utiliser htmlentities dans ce cas ?

On peut contourner le problème en utilisant htmlspecialchars au lieu de htmlentities
Mais s'ils jouent le même rôle...?

Je pose ces questions à chaud, mais je vais essayer de comprendre le document sur "l'injection de headers dans la fonction mail() de PHP", sans garantie de résultat.
Concernant la sécurité du formulaire, les spammeurs vont essayer de l'utiliser pour envoyer des mails.
J'ai choisi de ne pas envoyer de mail automatique de confirmation à l'émetteur, rendant inutile ce formulaire pour des spammeurs. .
Je ne comprends pas. Le formulaire que j'essaie d'implémenter devrait permettre à l'internaute d'établir un contact pendant la consultation du site, sans avoir à passer par sa propre messagerie, sans avoir nécessairement d'adresse électronique perso. Ici il n'y a pas, à ma connaissance, d'envoi de mail automatique de confirmation, juste l'affichage d'une page récapitulant les infos envoyées.
5) Dans le même ordre d'idées, est-ce risqué de faire un lien webmaster sur les pages d'un site ? y a-t-il un moyen "sécuritaire" de le faire ou suffit-il de faire un simple lien vers une adresse électronique ?
Avez-vous des conseils en la matière ? Une possibilité de contact direct est nécessaire sur mon site.

encore merci pour votre assistance

Message envoyé avec : Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Wysigot 6.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
alekam

erreur dans un formulaire

Message par alekam »

En fait alekam=aleka car depuis mon enregistrement je ne peux plus utiliser aleka.

En attendant de voir plus clair dans la conception d'un formulaire, j'ai mis une première version du site en ligne avec juste un mailto sur une adresse créée pour la circonstance et donc jetable
Merci d'aller le visiter et de me faire part de vos remarques (sécurité, ergonomie...) : [modo:site effacé à la demande de l'utilisateur].
Je vais maintenant plonger plus profondément dans le dossier "formulaire", le plus urgent dans les amélorations à apporter.

Message envoyé avec : Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Wysigot 6.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Fabrice.Tres.Net
Tyrannosaurus Rex
Messages : 2390
Inscription : 26 juin 2006, 12:50

Message par Fabrice.Tres.Net »

htmlentities encode tous les caractères spéciaux (html) + caractères non ASCII (éàç...)

htmlspecialchars encode seulement les spéciaux, donc les accentués apparaîtront normalement!

Concernant ton site, je le trouve sobre et très agréable.

Sous le capot, c'est déjà de bonne qualité.

Si on veut faire mieux, il est possible d'améliorer:
* les mises en forme à coup de retour à la ligne en utilisant la balise paragraphe <p>. Par une simple définition css des paragraphes on évitera qu'il se touche.
* les mises en formes css en ligne comme:

Code : Tout sélectionner

<td style="font-weight: bold;">Union européenne</td>
<td style="text-align: center;">10 €<br>
aleka
Salamandre
Messages : 26
Inscription : 01 nov. 2008, 23:22

erreur dans un formulaire

Message par aleka »

Merci,
encore des questions pour clore (j'espère) ce dossier.

1)
htmlspecialchars encode seulement les spéciaux, donc les accentués apparaîtront normalement!

qu'en est-il alors de la sécurité, est-elle amoindrie ?
et à ce sujet, je répète ma question : pour des raisons anti-spam c'est sur un webmail que les messages seront consultés et non en local, faut-il quand même utiliser htmlentities (ou htmlspecialchars) dans ce cas ?


2) Je pense en avoir compris l'essentiel du document sur "l'injection de headers dans la fonction mail() de PHP" (http://www.phpsecure.info/v2/article/Ma ... Inject.php).
Ce document m'ayant été conseillé j'imagine qu'il faut mieux suivre la solution proposée ? Il s'agit d'ajouter les dernières lignes à la première :

Code : Tout sélectionner

$from=$_POST["expediteur"]; 
if (eregi("\r",$from) || eregi("\n",$from)){
die("Why ?? :(");
}


Message envoyé avec : Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Wysigot 6.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité