Problème sur formulaire contact en php

Résolu
myriam_marmotte Messages postés 24 Date d'inscription mardi 29 juillet 2014 Statut Membre Dernière intervention 10 septembre 2015 - Modifié par jordane45 le 1/08/2014 à 13:51
myriam_marmotte Messages postés 24 Date d'inscription mardi 29 juillet 2014 Statut Membre Dernière intervention 10 septembre 2015 - 6 août 2014 à 11:14
Bonjour à tous,
Novice en la matière, j'ai réussi à créer le site web de ma boite *youhou*
Sauf que je coince sur la programmation de l'envoi de mon formulaire de contact... tout s'affiche très bien, mais lorsque je soumets mon formulaire, je n'ai plus qu'une page blanche (oups, c'est là que ça commence à merdouiller), et le mail n'arrive pas (pas pratique, je le conçois).

Donc si l'un ou l'une d'entre vous acceptait de m'aider à y voir plus clair, je l'en remercie de tout coeur (à noter que je n'ai pas de formation web, j'apprends sur le tas, du coup je suis un peu paumée niveau vocabulaire et tout...).

Bref voici le code de mon formulaire :

<form id="contact" method="post" action="traitement_formulaire.php"> 
<p><i>Complétez le formulaire. Les champs marqué par </i><em>*</em> sont <em>obligatoires</em></p> 
<fieldset> 
<legend>Contact</legend> 
<label for="nom">Nom <em>*</em></label> 
<input id="nom" placeholder="Nom Prénom" autofocus required=""><br> 
<label for="telephone">Téléphone</label> 
<input id="telephone" type="tel" placeholder="exemple: 01xxxxxxxx" pattern="06[0-9]{8}"><br> 
<label for="email">Email <em>*</em></label> 
<input id="email" type="email" placeholder="prenom.nom@domaine.fr" required="" ><br> 
<label for="adresse">Adresse</label> 
<input id="adresse" type="text" placeholder="exemple : 10 rue de Rome" required=""><br> 
</select> <label for="ville">Ville</label> 
<input id="ville" type="text" required=""><br> 
</select> <label for="cp">Code Postal</label> 
<input id="cp" type="text" placeholder="xxxxx" required=""><br> 
<label for="pays">Pays</label> 
<select id="pays"> 
<option value="F" name="pays">France</option> 
<option value="B" name="pays">Belgique</option> 
<option value="S" name="pays">Suisse</option> 
<option value="A" name="pays">Autre</option> 
</select> <label for="autre_pays">Précisez</label> 
<input id="autre_pays" type="text" required=""><br> 
<label for="comments">Votre message <em>*</em></label> 
<textarea id="comments"></textarea><br> 
</fieldset> 
<fieldset> 
<legend>Recevoir notre newsletter </legend> 
<label for="news_oui"><input id="oui" type="checkbox" name="news" value="oui"> Oui</label> 
<label for="news_non"><input id="non" type="checkbox" name="news" value="non"> Non</label> 

</fieldset> 
<p><input type="submit" value="Soumettre"></p> 
</form> 


et le code du PHP (là j'ai "emprunté" le code sur un tuto, que j'ai essayé d'adapter à mon formulaire, donc la source du problème doit être quelque part ici...) :
<?php 

$destinataire = 'dest@dest.fr'; 
$objet = 'contact depuis le site web' 
$copie = 'oui' 

// Messages de confirmation du mail 
$message_envoye = "Votre message nous est bien parvenu !"; 
$message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP."; 

// Messages d'erreur du formulaire 
$message_erreur_formulaire = "Vous devez d'abord <a href="contact.html">envoyer le formulaire</a>."; 
$message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur."; 

// on teste si le formulaire a été soumis 
if (!isset($_POST['envoi'])) 
{ 
// formulaire non envoyé 
echo '<p>'.$message_erreur_formulaire.'</p>'."\n"; 
} 
else 
{ 
/* 
* cette fonction sert à nettoyer et enregistrer un texte 
*/ 
function Rec($text) 
{ 
$text = htmlspecialchars(trim($text), ENT_QUOTES); 
if (1 === get_magic_quotes_gpc()) 
{ 
$text = stripslashes($text); 
} 

$text = nl2br($text); 
return $text; 
}; 

/* 
* Cette fonction sert à vérifier la syntaxe d'un email 
*/ 
function IsEmail($email) 
{ 
$value = preg_match('/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\'\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\'\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/', $email); 
return (($value === 0) || ($value === false)) ? false : true; 
} 

// formulaire envoyé, on récupère tous les champs. 
$nom = (isset($_POST['nom'])) ? Rec($_POST['nom']) : ''; 
$telephone = (isset($_POST['telephone'])) ? Rec($_POST['telephone']) : ''; 
$email = (isset($_POST['email'])) ? Rec($_POST['email']) : ''; 
$adresse = (isset($_POST['adresse'])) ? Rec($_POST['adresse']) : ''; 
$ville = (isset($_POST['ville'])) ? Rec($_POST['ville']) : ''; 
$cp = (isset($_POST['cp'])) ? Rec($_POST['cp']) : ''; 
$pays = (isset($_POST['pays'])) ? Rec($_POST['pays']) : ''; 
$autre_pays = (isset($_POST['autre_pays'])) ? Rec($_POST['autre_pays']) : ''; 
$comments = (isset($_POST['comments'])) ? Rec($_POST['comments']) : ''; 
$news = (isset($_POST['news'])) ? Rec($_POST['news']) : ''; 


// On va vérifier les variables et l'email ... 
$email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entré 

if (($nom != '') && ($email != '') && ($comments != '')) 
{ 
// les 4 variables sont remplies, on génère puis envoie le mail 
$headers = 'MIME-Version: 1.0' . "\r\n"; 
$headers .= 'From:'.$nom.' <'.$email.'>' . "\r\n" . 
'Reply-To:'.$email. "\r\n" . 
'X-Mailer:PHP/'.phpversion(); 

// envoyer une copie au visiteur ? 
if ($copie == 'oui') 
{ 
$cible = $destinataire.','.$email; 
} 
else 
{ 
$cible = $destinataire; 
}; 

// Remplacement de certains caractères spéciaux 
$comments = str_replace("'","'",$comments); 
$comments = str_replace("'","'",$comments); 
$comments = str_replace(""",'"',$comments); 
$comments = str_replace('<br>','',$comments); 
$comments = str_replace('<br />','',$comments); 
$comments = str_replace("<","<",$comments); 
$comments = str_replace(">",">",$comments); 
$comments = str_replace("&","&",$comments); 

// Envoi du mail 
if (mail($cible, $objet, $comments, $headers)) 
{ 
echo '<p>'.$message_envoye.'</p>'."\n"; 
} 
else 
{ 
echo '<p>'.$message_non_envoye.'</p>'."\n"; 
}; 
} 
else 
{ 
// une des 3 variables (ou plus) est vide ... 
echo '<p>'.$message_formulaire_invalide.' <a href="contact.html">Retour au formulaire</a></p>'."\n"; 
}; 
}; // fin du if (!isset($_POST['envoi'])) 
?> 



Voilà,
Encore merci d'avance à celui ou celle qui voudra bien m'aider !!

5 réponses

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
1 août 2014 à 13:54
Bonjour,

Pour essayer d'où provient ton souci je t'invite à :
1 - Vérifier le nom (et l'empacement) du fichier PHP que tu appelles depuis ta <form>
<form id="contact" method="post" action="traitement_formulaire.php"> 

- Le fichier se nomme bien exactement pareil ?
- Il se trouve au même niveau que ta page appelante (dans le même répertoire ?) ?

2 - Sur ta page php (traitement_formulaire.php) :
Au début de la page... ajouter un
 print_r($_POST)

Afin de voir ce qu'il reçoit comme variables "post"

3 - séparer les fonctions du reste du code
....là.. tu les as placé dans un IF/ELSE .... ça ne peut pas marcher !
=> En gros.. pour bien préenter une page PHP ( c'est ma façon de voir les choses... d'autres ont surement d'autres préférences..) :
Dans l'ordre.. je place :
- Les Include/require si il y en a.
- La récupération des variables GET/POST..SESSION..etc..
- Les traitements ( opération sur les variables)...
Puis.. si il y en a :
- Le code HTML
- et pour finir.. les fonctions Javascript

Je t'invite aussi à placer tes FONCTIONS PHP dans un autre fichiers que tu incluras dans ta page.
Cela te permettra... si certaines fonctions sont réutilisées dans d'autres page de ton site de les avoir sans devoir les réécrire dans le code...

PS: penses à utiliser la coloration syntaxique pour poster ton code sur le site..
Voir ici :http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

0
myriam_marmotte Messages postés 24 Date d'inscription mardi 29 juillet 2014 Statut Membre Dernière intervention 10 septembre 2015
1 août 2014 à 14:33
merci pour ta réponse,
je vais tester tout ceci... :)
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
Modifié par jordane45 le 1/08/2014 à 14:42
Au passage...

Les lignes :

// Remplacement de certains caractères spéciaux 

//Eventuellement ok pour ces deux là
$comments = str_replace('<br>','',$comments); 
$comments = str_replace('<br />','',$comments); 

// celle là.. est fausse ...
//$comments = str_replace(""",'"',$comments); 

// Celles la.. sont totalement inutiles...
// tu remplaces un caractère.. par ce même caractère...
$comments = str_replace("'","'",$comments); 
$comments = str_replace("'","'",$comments); 
$comments = str_replace("<","<",$comments); 
$comments = str_replace(">",">",$comments); 
$comments = str_replace("&","&",$comments); 


Ne servent à rien (y'en a même une de fausse).
Pour les "caractères" spéciaux... il existe des fonction PHP...(html_entity_decode par exemple :
http://php.net/manual/fr/function.html-entity-decode.php )
0
myriam_marmotte Messages postés 24 Date d'inscription mardi 29 juillet 2014 Statut Membre Dernière intervention 10 septembre 2015
1 août 2014 à 14:46
oups ^^ quand je disais que j'étais novice...au moins je vais apprendre de mes erreurs, merci à toi
0
myriam_marmotte Messages postés 24 Date d'inscription mardi 29 juillet 2014 Statut Membre Dernière intervention 10 septembre 2015
1 août 2014 à 14:56
alors après un premier nettoyage de syntaxe, voilà ce que j'ai :

print_r($_POST)
Vous devez d'abord envoyer le formulaire.
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
1 août 2014 à 21:11
Il faudrait nous montrer le code modifié. ..
0
myriam_marmotte Messages postés 24 Date d'inscription mardi 29 juillet 2014 Statut Membre Dernière intervention 10 septembre 2015
5 août 2014 à 11:30
Bonjour Jordane45,
désolée de revenir aussi tardivement, mais un peu surbookée en ce moment.

donc revoici mon code (en précisant que j'ai supprimé les lignes que tu m'a indiqué comme étant fausses)

Par contre tu m'as indiqué :
"3 - séparer les fonctions du reste du code
....là.. tu les as placé dans un IF/ELSE .... ça ne peut pas marcher ! "
désolée, mais là je ne comprends pas...

le code du formulaire :

<form id="contact" method="post" action="traitement_formulaire.php">
  <p><i>Complétez le formulaire. Les champs marqué par </i><em>*</em> sont <em>obligatoires</em></p>
  <fieldset>
  <legend>Contact</legend>
  
      <label for="nom">Nom <em>*</em></label>
            <input id="nom" placeholder="Nom Prénom" required=""> <br>
      
       <label for="ste">Société </label>
            <input id="ste" placeholder="Société"><br>
      
      <label for="telephone">Téléphone</label>
            <input id="telephone" type="tel" placeholder="exemple: 01xxxxxxxx" ><br>
      
      <label for="email">Email <em>*</em></label>
       <input id="email" type="email" placeholder="prenom.nom@domaine.fr" required="" ><br>
       
       <label for="adresse">Adresse</label>
           <input id="adresse" type="text" placeholder="exemple : 10 rue de Rome" ><br>
       </select> <label for="ville">Ville</label>
          <input id="ville" type="text" ><br>
          
       </select> <label for="cp">Code Postal</label>
          <input id="cp" type="text" placeholder="xxxxx" ><br>
     
      <label for="pays">Pays</label>
      <select id="pays">
        <option value="F" name="pays">France</option>
        <option value="B" name="pays">Belgique</option>
        <option value="S" name="pays">Suisse</option>
        <option value="A" name="pays">Autre</option>
      </select> <label for="autre_pays">Précisez</label>
          <input id="autre_pays" type="text" ><br>
     
      <label for="comments">Votre message <em>*</em></label>
      <textarea id="comments" required=""></textarea><br>
      </fieldset>
      <fieldset>
    
      <legend>Recevoir notre newsletter </legend>
    <label for="news_oui"><input id="oui" type="checkbox" name="news" value="oui"> Oui</label>
    <label for="news_non"><input id="non" type="checkbox" name="news" value="non"> Non</label>
    
  </fieldset>
  <p><input type="submit" name="envoi" value="Soumettre"></p>
</form>



et le code php :

print_r($_POST)

<?php 

$destinataire = 'test@test.fr'; 
$objet = 'contact depuis le site web' ;
$copie = 'oui' ;

// Messages de confirmation du mail 
$message_envoye = "Votre message nous est bien parvenu." ;
$message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP."; 

// Messages d'erreur du formulaire 
$message_erreur_formulaire = "Vous devez d'abord envoyer le formulaire</a>."; 
$message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur."; 

// on teste si le formulaire a été soumis 
if (!isset($_POST['envoi'])) 
{ 
// formulaire non envoyé 
echo '<p>'.$message_erreur_formulaire.'</p>'."\n"; 
} 
else 
{ 
/* 
* cette fonction sert à nettoyer et enregistrer un texte 
*/ 
function Rec($text) 
{ 
$text = htmlspecialchars(trim($text), ENT_QUOTES); 
if (1 === get_magic_quotes_gpc()) 
{ 
$text = stripslashes($text); 
} 

$text = nl2br($text); 
return $text; 
}; 

/* 
* Cette fonction sert à vérifier la syntaxe d'un email 
*/ 
function IsEmail($email) 
{ 
$value = preg_match('/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\'\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\'\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/', $email); 
return (($value === 0) || ($value === false)) ? false : true; 
} 

// formulaire envoyé, on récupère tous les champs. 
$nom = (isset($_POST['nom'])) ? Rec($_POST['nom']) : ''; 
$telephone = (isset($_POST['telephone'])) ? Rec($_POST['telephone']) : ''; 
$email = (isset($_POST['email'])) ? Rec($_POST['email']) : ''; 
$adresse = (isset($_POST['adresse'])) ? Rec($_POST['adresse']) : ''; 
$ville = (isset($_POST['ville'])) ? Rec($_POST['ville']) : ''; 
$cp = (isset($_POST['cp'])) ? Rec($_POST['cp']) : ''; 
$pays = (isset($_POST['pays'])) ? Rec($_POST['pays']) : ''; 
$autre_pays = (isset($_POST['autre_pays'])) ? Rec($_POST['autre_pays']) : ''; 
$comments = (isset($_POST['comments'])) ? Rec($_POST['comments']) : ''; 
$news = (isset($_POST['news'])) ? Rec($_POST['news']) : ''; 


// On va vérifier les variables et l'email ... 
$email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entré 

if (($nom != '') && ($email != '') && ($comments != '')) 
{ 
// les 4 variables sont remplies, on génère puis envoie le mail 
$headers = 'MIME-Version: 1.0' . "\r\n"; 
$headers .= 'From:'.$nom.' <'.$email.'>' . "\r\n" . 
'Reply-To:'.$email. "\r\n" . 
'X-Mailer:PHP/'.phpversion(); 

// envoyer une copie au visiteur ? 
if ($copie == 'oui') 
{ 
$cible = $destinataire.','.$email; 
} 
else 
{ 
$cible = $destinataire; 
}; 


// Envoi du mail 
if (mail($cible, $objet, $comments, $headers)) 
{ 
echo '<p>'.$message_envoye.'</p>'."\n"; 
} 
else 
{ 
echo '<p>'.$message_non_envoye.'</p>'."\n"; 
}; 
} 
else 
{ 
// une des 3 variables (ou plus) est vide ... 
echo '<p>'.$message_formulaire_invalide.' <a href="contact.html">Retour au formulaire</a></p>'."\n"; 
}; 
}; // fin du if (!isset($_POST['envoi'])) 
?>


Merci d'avance pour ton aide.
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
5 août 2014 à 18:19
Bon... grosso modo ... voici à quoi devrait ressembler ton script...

<?php 
//------------------------------------------------
// Les fonctions...
//------------------------------------------------
/* 
* cette fonction sert à nettoyer et enregistrer un texte 
*/ 
function Rec($text) 
{ 
$text = htmlspecialchars(trim($text), ENT_QUOTES); 
if (1 === get_magic_quotes_gpc()) 
{ 
$text = stripslashes($text); 
} 

$text = nl2br($text); 
return $text; 
}; 

/* 
* Cette fonction sert à vérifier la syntaxe d'un email 
*/ 
function IsEmail($email) 
{ 
$value = preg_match('/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\'\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\'\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/', $email); 
return (($value === 0) || ($value === false)) ? false : true; 
} 

//------------------------------------------------
// Tes variables :
//------------------------------------------------


$destinataire = 'dest@dest.fr'; 
$objet = 'contact depuis le site web' 
$copie = 'oui' 

// Messages de confirmation du mail 
$message_envoye = "Votre message nous est bien parvenu !"; 
$message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP."; 

// Messages d'erreur du formulaire 
$message_erreur_formulaire = "Vous devez d'abord <a href="contact.html">envoyer le formulaire</a>."; 
$message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur."; 

// on teste si le formulaire a été soumis 
if (!isset($_POST['envoi'])){ 
  // formulaire non envoyé 
  echo '<p>'.$message_erreur_formulaire.'</p>'."\n"; 
  }else { 

    // formulaire envoyé, on récupère tous les champs. 
    $nom = (isset($_POST['nom'])) ? Rec($_POST['nom']) : ''; 
    $telephone = (isset($_POST['telephone'])) ? Rec($_POST['telephone']) : ''; 
    $email = (isset($_POST['email'])) ? Rec($_POST['email']) : ''; 
    $adresse = (isset($_POST['adresse'])) ? Rec($_POST['adresse']) : ''; 
    $ville = (isset($_POST['ville'])) ? Rec($_POST['ville']) : ''; 
    $cp = (isset($_POST['cp'])) ? Rec($_POST['cp']) : ''; 
    $pays = (isset($_POST['pays'])) ? Rec($_POST['pays']) : ''; 
    $autre_pays = (isset($_POST['autre_pays'])) ? Rec($_POST['autre_pays']) : ''; 
    $comments = (isset($_POST['comments'])) ? Rec($_POST['comments']) : ''; 
    $news = (isset($_POST['news'])) ? Rec($_POST['news']) : ''; 


    // On va vérifier les variables et l'email ... 
   // soit l'email est vide si erroné, soit il vaut l'email entré 
    $email = (IsEmail($email)) ? $email : '';

    if (($nom != '') && ($email != '') && ($comments != '')) 
    { 
      // les 3 variables sont remplies, on génère puis envoie le mail 
      $headers =  'MIME-Version: 1.0' . "\r\n"; 
      $headers .= 'From:'.$nom.' <'.$email.'>' . "\r\n" ; 
      $headers .= 'Reply-To:'.$email. "\r\n" ;
      $headers .= 'X-Mailer:PHP/'.phpversion(); 

      // envoyer une copie au visiteur ? 
      $cible =  ($copie == 'oui') ? $destinataire.','.$email : $destinataire;


      // Remplacement de certains caractères spéciaux     
      $comments = str_replace('<br>','',$comments); 
      $comments = str_replace('<br />','',$comments); 

      // Envoi du mail 
      if (mail($cible, $objet, $comments, $headers)){ 
         echo '<p>'.$message_envoye.'</p>'."\n"; 
      } else{ 
         echo '<p>'.$message_non_envoye.'</p>'."\n"; 
      }; 
   }else{ 
      // une des 3 variables (ou plus) est vide ... 
      echo '<p>'.$message_formulaire_invalide.' <a href="contact.html">Retour au
 formulaire</a></p>'."\n"; 
     } 
  }// fin du if (!isset($_POST['envoi'])) 
?>



Voila... tu n'as plus qu'à tester...
Si ça ne fonctionne toujours pas... ajoute des ECHO sur tes variables pour voir ce qu'elles valent...
Et si tu as un message d'erreur... donne le nous exactement !


0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
myriam_marmotte Messages postés 24 Date d'inscription mardi 29 juillet 2014 Statut Membre Dernière intervention 10 septembre 2015
6 août 2014 à 11:14
Bonjour,
merci de ton aide, mon formulaire fonctionne désormais :)
0
Rejoignez-nous