Problème sur formulaire contact en php [Résolu]

Signaler
Messages postés
24
Date d'inscription
mardi 29 juillet 2014
Statut
Membre
Dernière intervention
10 septembre 2015
-
Messages postés
24
Date d'inscription
mardi 29 juillet 2014
Statut
Membre
Dernière intervention
10 septembre 2015
-
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

Messages postés
32951
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 juin 2021
351
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

Messages postés
24
Date d'inscription
mardi 29 juillet 2014
Statut
Membre
Dernière intervention
10 septembre 2015

merci pour ta réponse,
je vais tester tout ceci... :)
Messages postés
32951
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 juin 2021
351
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 )
Messages postés
24
Date d'inscription
mardi 29 juillet 2014
Statut
Membre
Dernière intervention
10 septembre 2015

oups ^^ quand je disais que j'étais novice...au moins je vais apprendre de mes erreurs, merci à toi
Messages postés
24
Date d'inscription
mardi 29 juillet 2014
Statut
Membre
Dernière intervention
10 septembre 2015

alors après un premier nettoyage de syntaxe, voilà ce que j'ai :

print_r($_POST)
Vous devez d'abord envoyer le formulaire.
Messages postés
32951
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 juin 2021
351
Il faudrait nous montrer le code modifié. ..
Messages postés
24
Date d'inscription
mardi 29 juillet 2014
Statut
Membre
Dernière intervention
10 septembre 2015

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.
Messages postés
32951
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 juin 2021
351
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 !


Messages postés
24
Date d'inscription
mardi 29 juillet 2014
Statut
Membre
Dernière intervention
10 septembre 2015

Bonjour,
merci de ton aide, mon formulaire fonctionne désormais :)