Page 1 sur 2

Aide pour formulaire svp

Posté : 14 juin 2013, 01:17
par Doula-Die
Bonjour,

Je suis nouvelle sur ce forum venant tout juste de m'enregistrer. De plus, je suis néophytes en php ayant plutôt une petite expérience en html.

J'ai voulu exposer mon problème mais j'ai ce message: This message was flagged as spam and has been denied.

Re: Aide pour formulaire svp

Posté : 14 juin 2013, 01:29
par Doula-Die
Je vais me ré-essayer...

J'ai créé un site web dont une page comporte un formulaire de contact.
Le tout fonctionne avec mon fichier "contact.html" et mon "send_form_email.php".

J'ai voulu insérer une question antispam et c'est là que ça se gâche.
Voici mon essai... j'ai modifié les noms de fichiers pour ne pas corrompre mes originaux.

Le formulaire en ligne: (lien retiré) mais pour avoir de l'aide de votre part, je l'ai mis en fichier texte: (voir fichier joint)
quand on clic sur le bouton "envoyer" j'ai un message d'erreur:
Parse error: syntax error, unexpected '!' in /home2/ldxxxx/public_html/send_form_email.php on line 123

Quant au fichier de traitement du formulaire, en texte pour vous, c'est ici: (voir fichier joint)

Pourriez-vous me dire où est mon problème ?

J'apprécierais grandement votre aide et je vous remercie d'avance.
________________________________________________________________

EDIT: J'ai eu le même message de "denied". J'imagine que vous ne permettez pas aux nouveaux de poster des liens. Alors je vais tenter de mettre en fichiers joints

Bon... vous ne permettez pas de joindre un fichier texte.

Dommage... j'aurais bien aimé obtenir votre aide mais je ne sais comment vous montrer mes fichiers.

_________________________________________________________________

Voici la petite partie du formulaire.html où le code antispam est inscrit:
<th bgcolor="#E8E8E8" scope="col"><div align="left"><font color="#000000"><b>Question antispam: Combien fait 4 multipli&eacute; par 4</b></font></div></th>
                </tr>
                <tr>
                  <th bgcolor="#E8E8E8" scope="col"><div align="left"><font color="#000000">
                      [color=#800000]<input name="antispam"[/color] type="text" id="name" size="70">
                      </font></div></th>
                </tr>
Mais pour mettre mon code php du fichier send_form_mail c'est long comme code. Comme le message dit ligne 23, je vais me contenter de vous donner quelques lignes de 120 à 130 mais je ne sais si ça sera suffisant. Vous me direz comment faire alors.
   if(!isset($_POST['courriel']) || 
      !isset($_POST['nom']) || 
      !isset($_POST['message'])
	  !isset($_POST['antispam']))
	  {
      died('Tous les champs sont obligatoires.'); 
   } 
   $courriel = $_POST['courriel']; //required
   $nom = $_POST['nom']; //required
   $message = $_POST['message']; //required
   $antispam = $_POST['antispam']; //required

Re: Aide pour formulaire svp

Posté : 14 juin 2013, 08:12
par Lyssorus
Bonjour,

Tout d'abord moi aussi j'ai eu du mal au début ^^', il y a tellement de protection anti-bot et anti-spam qu'il devient parfois difficile pour un nouveau de poser vraiment sa question ^^'

Maintenant ton code.
<span style="color: #800000"><input name="antispam"</span> type="text" id="name" size="70">
Il me semble bizarre déjà qu'il y ai le /span qui se promène au milieux comme ça. Essaie déjà de le mettre en fin de ligne, et voir ce que ça donne. :)

Re: Aide pour formulaire svp

Posté : 14 juin 2013, 09:20
par Spols
Le problème de php vient bien de la ligne 123.

Je l'ai corrigé ci dessous
   if(!isset($_POST['courriel']) || 
      !isset($_POST['nom']) || 
      !isset($_POST['message']) || //ICI il manquait un "OR" (||)
	  !isset($_POST['antispam']))
	  {
      died('Tous les champs sont obligatoires.'); 
   } 
   $courriel = $_POST['courriel']; //required
   $nom = $_POST['nom']; //required
   $message = $_POST['message']; //required
   $antispam = $_POST['antispam']; //required
pour ton HTML, corrige le comme ceci

<span style="color: #800000"><input name="antispam" type="text" id="name" size="70"></span>

Re: Aide pour formulaire svp

Posté : 14 juin 2013, 09:27
par Lyssorus
Bien vu le OR !!! :p

Re: Aide pour formulaire svp

Posté : 14 juin 2013, 12:37
par Doula-Die
Merci pour vos réponses mais non... cette fois l'erreur est...
Parse error: syntax error, unexpected T_STRING in /home2/ldxxxx/public_html/send_form_email.php on line 150

Hors les lignes 149 et 150 se lisent comme suit:
   if($antispam <> $antispam_answer) {
   $error_message .='La question antispam n'est pas valide.<br />';

Re: Aide pour formulaire svp

Posté : 14 juin 2013, 14:29
par Spols
Mais si, il y a juste d'autre erreur, cette fois c'est <> qui ne veut rien dire en php,

différent de s'écrit != ou !==
   if($antispam != $antispam_answer) {
   $error_message .='La question antispam n'est pas valide.<br />';
rendez vous au message suivant

Re: Aide pour formulaire svp

Posté : 14 juin 2013, 15:14
par Doula-Die
J'ai modifié tel que suggéré mais même message d'erreur, ie à la même ligne 150.

Je voudrais bien vous donner le code complet de mon send_form_email mais il fait 75 lignes. C'est gros pour mettre ici, non ?

Re: Aide pour formulaire svp

Posté : 14 juin 2013, 16:10
par Spols
J'ai vu un autre truc

si tu ouvre une chaine caractère avec des simple quote, tu dois échapper ceux qui ne termine pas ta chaine, ainsi n'est devient n\'est

PS sans doute que <> fontionne aussi en php si l'erreur ne vient pas de là mais je ne l'ai jamais utilisé
   if($antispam != $antispam_answer) {
   $error_message .='La question antispam n\'est pas valide.<br />';
75 lignes c'est pas énorme, mais si le problème est à la ligne 150 je vois pas comment tu peux n'en avoir que 75

Re: Aide pour formulaire svp

Posté : 14 juin 2013, 16:31
par Doula-Die
75 lignes c'est pas énorme, mais si le problème est à la ligne 150 je vois pas comment tu peux n'en avoir que 75
Bonne déduction mon cher Watson !

C'est que j'ai le design de ma page + le style css au début et en pied de page. Alors si vous n'y voyez pas d'inconvénients pour 75 lignes (pas tous les forums qui le permettent) je me lance...
 <?php 
if(isset($_POST['courriel'])) { 

   // EDIT THE 2 LINES BELOW AS REQUIRED 
   $email_to = "[email protected]"; 
   $email_subject = "Commentaires pour Forum55plus"; 


   function died($error) { 
      // your error code can go here 
      echo "D&eacute;sol&eacute;e mais il semble y avoir erreur dans le formulaire. "; 
      echo $error."<br /><br />"; 
      echo "SVP retourner au formulaire en utilisant le bouton retour dans votre barre d'outils en haut pour conserver vos donn&eacute;es.<br /><br />"; 
      die(); 
   } 

   // validation expected data exists 
  if(!isset($_POST['courriel']) || 
      !isset($_POST['nom']) || 
      !isset($_POST['message']) || //ICI il manquait un "OR" (||)
           !isset($_POST['antispam']))
           {
       died('Tous les champs sont obligatoires.'); 
   } 
   $courriel = $_POST['courriel']; //required
    $nom = $_POST['nom']; //required
    $message = $_POST['message']; //required
    $antispam = $_POST['antispam']; //required

   extract($_POST); 
   //print_r($_POST); 

   if($_POST['antispam'] == 'SEIZE')
   {
   $error_message = ""; 
   $email_exp = "^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$"; 
   if(!eregi($email_exp,$courriel)) { 
      $error_message .= 'V&eacute;rifiez votre adresse courriel.<br />'; 
   } 
   $string_exp = "^[a-z .'-]+$"; 
   if(!eregi($string_exp,$nom)) { 
      $error_message .= 'V&eacute;rifiez votre nom ou pseudo.<br />'; 
   } 
   if(strlen($message) < 2) { 
      $error_message .= 'Aucun message inscrit.<br />';  
   } 
    if($antispam != $antispam_answer) {
    $error_message .='La question antispam n'est pas valide.<br />';

   if(strlen($error_message) > 0) { 
      died($error_message); 
   } 
   $email_message = "D&eacute;tails du formulaire envoy&eacute; ci-dessous.\n\n"; 

   function clean_string($string) { 
      $bad = array("content-type","bcc:","to:","cc:","href"); 
      return str_replace($bad,"",stripslashes($string)); 
   } 

   $email_message .= "Courriel: ".clean_string($courriel)."\n"; 
   $email_message .= "Nom: ".clean_string($nom)."\n"; 
   $email_message .= "Message: ".clean_string($message)."\n"; 


   // create email headers 
   $headers = 'From: '.$courriel."\r\n". 
   'Reply-To: '.$courriel."\r\n" . 
   'X-Mailer: PHP/' . phpversion(); 
   mail($email_to, $email_subject, $email_message, $headers);
   }
   else
   {
      died('Mauvaise r�ponse antispam!'); 
   }   
} 
?>

Re: Aide pour formulaire svp

Posté : 14 juin 2013, 16:47
par Spols
As tu encore des messages d'erreurs ?

Re: Aide pour formulaire svp

Posté : 14 juin 2013, 17:00
par Doula-Die
Mais oui, le même message d'ailleurs.
J'ai modifié tel que suggéré mais même message d'erreur, ie à la même ligne 150.

Re: Aide pour formulaire svp

Posté : 14 juin 2013, 17:37
par sirakawa
Le code existant est assez bancal.
Tous les champs doivent être remplis, mais quelle est la priorité car c'est important pour architecturer les tests et personnaliser les messages?
au passage j'ai repéré une erreur (ici je crois sinon c'est analogue):
$error_message .='La question antispam n'est pas valide.<br />'; // il faut encadrer avec des quotes doubles pour permettre le passage de l'apostrophe.

Re: Aide pour formulaire svp

Posté : 14 juin 2013, 17:42
par Doula-Die
La priorité pour qu'ils complètent les cases ?

Bien... je dirais:
1) adresse courriel car sans adresse impossible de leur répondre
2) commentaires car sans message, je ne peux les aider
3) leur nom ou pseudo mais c'est moins important
4) la question antispam

Quant à ton "Le code existant est assez bancal."
Je n'en n'ai aucune idée... comme j'ai dit dès mon premier message, je ne connais rien en php. C'est quelqu'un d'autre qui me l'a fait.

Re: Aide pour formulaire svp

Posté : 15 juin 2013, 09:46
par sirakawa
Voici une suggestion:
index.php
 <?PHP
 	/*On récupère les valeurs repassées par traite.php en cas d'erreur. Sinon les variables sont vides*/
	$courriel = isset($_POST['courriel'])? $_POST['courriel'] : "";
	$message = isset($_POST['message'])? $_POST['message'] : "";
	$nom = isset($_POST['nom'])? $_POST['nom']: "";	
	$antispam = isset($_POST['antispam'])? $_POST['antispam']: "";	 
	/*Formulaire standard*/	
	 print "
	 <form method = 'post' action='traite.php'>
			<label for 'courriel'>Courriel</label> 
			  <input type = 'text' name ='courriel' value='$courriel'>
			<label for 'message'>Message</label>  
			  <textarea name ='message'>$message</textarea>
			<label for 'nom'>Nom</label> 
			    <input type = 'text' name ='nom' value='$nom'> 
			<label for 'antispam'>Antispam</label> 
			    <input type = 'text' name ='antispam' value='$antispam'>    
			<button type ='submit'>Envoyer</button>
	  </form>";
  ?>
traite.php
 <?php
 	/* $courriel est la valeur passée.
 	$courrier contient la même valeur si le le couriel est bien formé  ou false si le courriel est mal formé
 	*/
 	$courriel = isset($_POST['courriel'])? $_POST['courriel']: "";
 	$courriel = filter_var($courriel, FILTER_SANITIZE_EMAIL);
 	$courrier = filter_var($_POST['courriel'], FILTER_VALIDATE_EMAIL); 
  	$message = isset($_POST['message'])? $_POST['message']: "";	
  	$nom = isset($_POST['nom'])? $_POST['nom']: "";	
  	$antispam = isset($_POST['antispam'])? $_POST['antispam']: "";	 	
  	$c_rendu = ""; //le compte-rendu d'erreur
  	$erreur = false; //booléen juste en cas d'erreur
  	
if ($courrier === false)
{
	$c_rendu = "<p>Votre adresse &eacute;lectronique est incorrecte. Elle doit &ecirc;tre de la forme nom@hote ";
	$erreur = true;
}
	
if (($message == "") or (strlen ($message)< 15)) //message absent ou trop court
{
echo (strlen($message));	
	$c_rendu .= "<p>Votre message est absent ou trop court.";
	$erreur = true;
}
else
{
	$message = filter_var($message,FILTER_SANITIZE_STRING);
}

if (($nom == "") or (strlen ($nom ) < 5)) //nom absent ou trop court
{
	$c_rendu .= "<p>Votre nom est absent ou trop court.";
	$erreur = true;
}
else
{
	$nom = filter_var($nom,FILTER_SANITIZE_STRING);
}

if ($antispam != "SEIZE") //nom absent ou trop court
{
	$c_rendu .= "<p>Antispam incorrect.";
	$erreur = true;
}

if ($erreur === true)
{
		/*En cas d'erreur ce formulaire repasse les valeurs à index.php */
		print "
		$c_rendu
		<form method ='post' action = 'index.php'>
			<input type ='hidden' name ='courriel' value ='$courriel' />
			<input type ='hidden' name ='message' value ='$message' />	
			<input type = 'hidden' name ='nom' value='$nom'> 
	    	<input type = 'hidden' name ='antispam' value='$antispam'>    		
			<button type = 'submit'>Retour</button>
		</form>";		
}	
else
{
	$email_message = "D&eacute;tails du formulaire envoy&eacute; ci-dessous.\n\n"; 
	$email_message .= "Courriel: $courriel\n";
   $email_message .= "Nom: $nom";
   $email_message .= "Message:$message\n "; 
   print "$email_message";
}
	
?>