[RESOLU] Aide pour formulaire svp

Eléphanteau du PHP | 14 Messages

14 juin 2013, 01:17

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.

Eléphanteau du PHP | 14 Messages

14 juin 2013, 01:29

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

Eléphant du PHP | 160 Messages

14 juin 2013, 08:12

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. :)

Mammouth du PHP | 1967 Messages

14 juin 2013, 09:20

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>
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphant du PHP | 160 Messages

14 juin 2013, 09:27

Bien vu le OR !!! :p

Eléphanteau du PHP | 14 Messages

14 juin 2013, 12:37

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 />';

Mammouth du PHP | 1967 Messages

14 juin 2013, 14:29

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
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 14 Messages

14 juin 2013, 15:14

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 ?

Mammouth du PHP | 1967 Messages

14 juin 2013, 16:10

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
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 14 Messages

14 juin 2013, 16:31

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!'); 
   }   
} 
?>

Mammouth du PHP | 1967 Messages

14 juin 2013, 16:47

As tu encore des messages d'erreurs ?
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 14 Messages

14 juin 2013, 17:00

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.

Mammouth du PHP | 2278 Messages

14 juin 2013, 17:37

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.
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 14 Messages

14 juin 2013, 17:42

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.

Mammouth du PHP | 2278 Messages

15 juin 2013, 09:46

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";
}
	
?>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD