code php pour formulaire qui me pose problème

Eléphanteau du PHP | 17 Messages

10 janv. 2017, 22:37

Bonjour
Alors déjà pour me présenter je suis complètement novice dans ce domaine, mais il faut bien commencer un jour :) je vous demanderai d'être indulgent avec moi svp :) merci d'avance


voilà mon code php :
<?php 
 
$destinataire = '[email protected]'; 
  
$copie = 'oui';  
  
$message_envoye = "Votre message nous est bien parvenu !"; 
$message_erreur_formulaire = "Vous devez d'abord <a href=\"contact.html\">envoyer le formulaire</a>."; 
$message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP."; 
  
$message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur."; 
  
if (!isset($_POST['envoi'])) 
{ 
 echo '<p>'.$message_erreur_formulaire.'</p>'."\n"; 
} 
else 
{ 
 function Rec($text) 
 { 
 	$text = htmlspecialchars(trim($text), ENT_QUOTES); 
 	if (1 === get_magic_quotes_gpc()) 
 	{ 
   $text = stripslashes($text); 
 	} 
  
 	$text = nl2br($text); 
 	return $text; 
 }; 
  
 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; 
 } 
  
 $nom     = (isset($_POST['nom']))     ? Rec($_POST['nom'])     : ''; 
 $societe   = (isset($_POST['societe']))   ? Rec($_POST['societe'])   : ''; 
 $email   = (isset($_POST['email']))   ? Rec($_POST['email'])   : ''; 
 $telephone   = (isset($_POST['telephone']))   ? Rec($_POST['telephone'])   : ''; 
 $message = (isset($_POST['message'])) ? Rec($_POST['message']) : ''; 
  
 $email = (IsEmail($email)) ? $email : '';  
  
 if (($nom != '') && ($societe != '')&& ($email != '') && ($telephone != '') && ($message != '')) 
 { 
 	$headers  = 'MIME-Version: 1.0' . "\r\n"; 
 	$headers .= 'From:'.$nom.' <'.$email.'>' . "\r\n" . 
   	'Reply-To:'.$email. "\r\n" . 
   	'Content-Type: text/plain; charset="utf-8"; DelSp="Yes"; format=flowed '."\r\n" . 
   	'Content-Disposition: inline'. "\r\n" . 
   	'Content-Transfer-Encoding: 7bit'." \r\n" . 
   	'X-Mailer:PHP/'.phpversion(); 
  
 	if ($copie == 'oui') 
 	{ 
   $cible = $destinataire.';'.$email; 
 	} 
 	else 
 	{ 
   $cible = $destinataire; 
 	}; 
  
 	$message = str_replace("'","'",$message); 
 	$message = str_replace("&#8217;","'",$message); 
 	$message = str_replace(""",'"',$message); 
 	$message = str_replace('<br>','',$message); 
 	$message = str_replace('<br />','',$message); 
 	$message = str_replace("<","<",$message); 
 	$message = str_replace(">",">",$message); 
 	$message = str_replace("&","&",$message); 
  
 	$num_emails = 0; 
 	$tmp = explode(';', $cible); 
 	foreach($tmp as $email_destinataire) 
 	{ 
   if (mail($email_destinataire, $objet, $message, $headers)) 
   	$num_emails++; 
 	} 
  
 	if ((($copie == 'oui') && ($num_emails == 2)) || (($copie == 'non') && ($num_emails == 1))) 
 	{ 
   echo '<p>'.$message_envoye.'</p>'; 
 	} 
 	else 
 	{ 
   echo '<p>'.$message_non_envoye.'</p>'; 
 	}; 
 } 
 else 
 { 
 	echo '<p>'.$message_formulaire_invalide.' <a href="contact.html">Retour au formulaire</a></p>'."\n"; 
 }; 
};  
?>

mon code html :
<!doctype html> 
<html> 
<head> 
<meta charset="UTF-8"> 
<title>Formulaire de contact</title> 
<link href="form.css" rel="stylesheet" type="text/css"> 
</head> 
 
<body> 
 
<div 
 id="header"> 
</div> 
 
<nav id="navigation"> 
 
<ul> 
 
 <li> <a href="index.html" target="new">Accueil</a> </li> 
 <li> <a href="prestations.html" target="new">Prestations</a> </li> 
 <li> <a href="qui-suis-je.html" target="new">Qui suis-je</a> </li> 
 <li> <a href="livre-d-or.html" target="new">Livre d'Or</a> </li> 
 <li> <a href="form.html" target="new">Contact</a> </li>  
 
</ul> 
  
</nav> 
 
 
<div id="contenu"> 
 <div class="title">Formulaire de contact</div><br/><br/><br/> 
  
<form method="POST" action="traitement.php"> 
<p> 
 
 <label for="name">Nom*:</label><input type="text" name="name" class="input" required placeholder=""><br/><br/> 
 <label for="société">Société:</label><input type="text" name="name" class="input" placeholder=""><br/><br/> 
 <label for="email">Adresse email*:</label><input type="email" name="email" class="input" placeholder=""><br/><br/> 
 <label for="téléphone">Téléphone/Fax:</label><input type="tel" name="tél" class="input" placeholder=""><br/><br/> 
 <label for="msg">Votre message*:</label><textarea name="msg" class="msg" rows="10" cols="32" placeholder=""></textarea><br/> 
 <input type="submit" class="submit" name="submit" value="Envoyer">  
</p> 
</form>   
</div> 
 
<div id ="footer"> 
<p><img src="images/twitter.png" alt="logo twitter" height="15"/>&nbsp;&nbsp; droits réservés &copy;Serveur à la carte - 2017 &nbsp;&nbsp;<img src="images/facebook.png" alt="logo acebook" height="15" /></p> 
</div> 
 
</body> 
 
</html>

et quand je teste ça me dirige sur une page avec ce message : Vous devez d'abord envoyer le formulaire.


et si j'enlève ce morceau de code: $message_erreur_formulaire = "Vous devez d'abord <a href=\"contact.html\">envoyer le formulaire</a>.";

je tombe sur une page blanche et avec ou sans le code je ne reçois pas le mail.

j'ai besoin de votre aide, deux jours entiers que je suis là-dessus

Merci d'avance

Julie
Modifié en dernier par moogli le 11 janv. 2017, 08:56, modifié 1 fois.
Raison : BBCODE pour le code php et html !

Eléphant du PHP | 176 Messages

11 janv. 2017, 00:38

Bonsoir,

La première vérification que ton code effectue est la suivante
if (!isset($_POST['envoi']))
Ton $_POST est-il vide quand tu arrives sur cette page ? (D'après ce que je comprend l'utilisateur est sensé remplir le formulaire et après le mail est envoyé)

Si c'est bien le formulaire présent dans le code que tu nous a partagé qui est sensé remplir le mail alors $_POST['envoi'] ne sera jamais défini donc tu passeras toujours dans ta première condition (ton formulaire ne gère pas de champs ayant pour name envoi)
if (!isset($_POST['envoi'])) 
{ 
echo '<p>'.$message_erreur_formulaire.'</p>'."\n"; 
}

PS : Je te conseille de mettre tes corps de fonctions bien a l'écart du code (tout en haut ou tout en bas), ça évitera bien de surcharger le code
Cordialement
Naroth

Eléphanteau du PHP | 17 Messages

11 janv. 2017, 01:02

Je ne sais pas si j'ai bien compris ce que tu voulais dire, mais si je laisse mon code formulaire intact il faut que je retire de mon code php ce morceau là ?
if (!isset($_POST['envoi']))
{
echo '<p>'.$message_erreur_formulaire.'</p>'."\n";
}

Je testerai demain matin car j'avoue que ce soir j'en peux plus après avoir essayé je ne sais pas combien de combinaison ;)

bonne soirée
Cordialement

Mammouth du PHP | 1967 Messages

11 janv. 2017, 09:21

Hello,

Je modifierai ce bout de code plutot que de le supprimer.

if (!isset($_POST['submit']))
{
echo '<p>'.$message_erreur_formulaire.'</p>'."\n";
}

au moins le code détectera l'appui sur ton bouton d'envoi de formulaire.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

11 janv. 2017, 10:17

salut,

tu as plusieurs problèmes
- tu n'as pas de champ de formulaire qui s'appel envoie (si tu test le bouton c'est submit) => tu ne valide jamais le formulaire
- globalement les noms utilisés pour champs du formulaire ne correspondent pas a ce que tu demandes dans le tableau $_POST
- la variable $objet n'existe pas

au vu du contenue je suppose que
- tu n'as pas bien compris le mécanisme des formulaires avec php http://www.lephpfacile.com/cours/8-recu ... ormulaires
- tu as fait un copier / coller en essayant d'adapter au mieux
- tu utilises un truc qui te pond code ?

ensuite le reste j'ai mis des commentaires dans le code
voilà a quoi peux ressembler ton code
<?php
$destinataire = '[email protected]';

$copie = 'oui';

$message_envoye = "Votre message nous est bien parvenu !";
$message_erreur_formulaire = "Vous devez d'abord <a href=\"contact.html\">envoyer le formulaire</a>.";
$message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP.";

$message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur.";
$objet = 'l\'objet du mail';
if (!empty($_POST['submit']))
{
    function Rec($text)
    {
        $text = htmlspecialchars(trim($text), ENT_QUOTES);
        // dommage tu envois en mail au format texte donc il va y avoir des <br/> au milieu du texte
        $text = nl2br($text);
        return $text;
    };
    // inutile : filter_var avec le filtre FILTER_VALIDATE_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;
    }
    // bof autant utiliser les données dans $_POST
    $nom     = (isset($_POST['name']))     ? Rec($_POST['name'])     : '';
    $societe   = (isset($_POST['societe']))   ? Rec($_POST['societe'])   : '';
    $email   = (isset($_POST['email']))   ? Rec($_POST['email'])   : '';
    $telephone   = (isset($_POST['telephone']))   ? Rec($_POST['telephone'])   : '';
    $message = (isset($_POST['message'])) ? Rec($_POST['message']) : '';
    
    $email = (IsEmail($email)) ? $email : '';
    xdebug_var_dump($nom,$societe,$email,$telephone,$message);
    if (!empty($nom) && !empty($societe)&& !empty($email) && !empty($telephone) && !empty($message))
    {
        $headers  = 'MIME-Version: 1.0' . "\r\n";
        $headers .= 'From:'.$nom.' <'.$email.'>' . "\r\n" .
        'Reply-To:'.$email. "\r\n" .
        'Content-Type: text/plain; charset="utf-8"; DelSp="Yes"; format=flowed '."\r\n" .
        'Content-Disposition: inline'. "\r\n" .
        'Content-Transfer-Encoding: 7bit'." \r\n" .
        'X-Mailer:PHP/'.phpversion();
        
        // autant faire un tablau direct pour éviter l'explode inutile plus bas
        // d'ailleur copie ne peu pas voiloir autre chose que oui ici donc autant virer le if et avoir un tableau directement
        //$cible = [$destinataire,$email];
        if ($copie == 'oui')
        {
            $cible = $destinataire.';'.$email;
        }
        else
        {
            $cible = $destinataire;
        };
        // ça c'est l'inverse de htmlspecialchars de la fonction rec ...
        $message = str_replace("'","'",$message);
        $message = str_replace("&#8217;","'",$message);
        $message = str_replace(""",'"',$message);
        $message = str_replace('<br>','',$message);
        $message = str_replace('<br />','',$message);
        $message = str_replace("<","<",$message);
        $message = str_replace(">",">",$message);
        $message = str_replace("&","&",$message);
        
        $num_emails = 0;
        $tmp = explode(';', $cible);// ouch
        foreach($tmp as $email_destinataire)
        {
            if (mail($email_destinataire, $objet, $message, $headers)){
                $num_emails++;
            }else {
                // pas de message d'erreur ?
            }   
        }
        // c'est plus simple non ?
        if ($num_emails > 0)
        {
            echo '<p>',$message_envoye,'</p>';
        }
        else
        {
            echo '<p>',$message_non_envoye,'</p>';
        };
    }
    else
    {
        echo '<p>',$message_formulaire_invalide.'</p>',PHP_EOL;
    };
};
?>
  <!doctype html>
  <html>
  <head>
    <meta charset="UTF-8">
    <title>Formulaire de contact</title>
    <link href="form.css" rel="stylesheet" type="text/css">
  </head>
  <body>
    <nav id="navigation">
      <ul>
        <li> <a href="index.html" target="new">Accueil</a> </li>
        <li> <a href="prestations.html" target="new">Prestations</a> </li>
        <li> <a href="qui-suis-je.html" target="new">Qui suis-je</a> </li>
        <li> <a href="livre-d-or.html" target="new">Livre d'Or</a> </li>
        <li> <a href="form.html" target="new">Contact</a> </li>
      </ul>
    </nav>
    <div id="contenu">
      <div class="title">Formulaire de contact</div>
      <!-- Ouch non utilise du css pour placer les éléments, la tu demandes une marge haute sur l'élement suivant (ou une basse sur le précédent si tu préfères)
<br/>
<br/>
<br/>
-->
      <form method="post">
        <!-- j'ai enlevé l'action parce que j'utilise le même fichier -->
        <p>
          <label for="name">Nom*:</label>
          <input type="text" id="name" name="name" class="input" required />
          <br/>
          <br/>
          <label for="société">Société:</label>
          <input type="text" id="société" name="societe" class="input" />
          <br/>
          <br/>
          <label for="email">Adresse email*:</label>
          <input type="email" id="email" name="email" class="input" />
          <br/>
          <br/>
          <label for="téléphone">Téléphone/Fax:</label>
          <input type="tel" id="téléphone" name="telephone" class="input" pattern="^((\+\d{1,3}(-| )?\(?\d\)?(-| )?\d{1,5})|(\(?\d{2,6}\)?))(-| )?(\d{3,4})(-| )?(\d{4})(( x| ext)\d{1,5}){0,1}$"/>
          <br/>
          <br/>
          <label for="msg">Votre message*:</label>
          <textarea id="msg" name="message" class="msg" rows="10" cols="32"></textarea>
          <br/>
          <input type="submit" class="submit" name="submit" value="Envoyer">
        </p>
      </form>
    </div>
    <div id="footer">
      <!-- pour les logos je te conseil d'utiliser des images qui proviennent des sites d'origine et pas de stocker sur ton site à toi, simplement pour une cause d'uniformité de leur charte
de plus, normalement il y a des lien sur ces images pour rediriger sur tes comptes (sinon ça sert à rien ;) )
pis bon acebook c'est moins connu que FB je pense ;)
-->
      <p><img src="images/twitter.png" alt="logo twitter" height="15" />&nbsp;&nbsp; droits réservés &copy;Serveur à la carte - 2017 &nbsp;&nbsp;<img src="images/facebook.png" alt="logo acebook" height="15" /></p>
    </div>
  </body>
  </html>
Au final je ferais un truc dans le style :
<?php
$destinataire = '[email protected]';

$message_envoye = "Votre message nous est bien parvenu !";
$message_erreur_formulaire = "Vous devez d'abord <a href=\"contact.html\">envoyer le formulaire</a>.";
$message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP.";

$message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur.";
$objet = 'l\'objet du mail';
if (!empty($_POST['submit']))
{
    if (!empty($_POST['name']) && !empty($_POST['societe'])&& !empty($_POST['email']) && !empty($_POST['telephone']) && !empty($_POST['message']))
    {
        $headers[]  = 'MIME-Version: 1.0';
        $headers []= 'From:'.$_POST['name'].' <'.$_POST['email'].'>' ;
        $headers []= 'Reply-To:'.$_POST['email'];
        $headers []= 'Content-Type: text/plain; charset="utf-8"; DelSp="Yes"; format=flowed ';
        $headers []= 'Content-Disposition: inline';
        $headers []= 'Content-Transfer-Encoding: 7bit';
        $headers []= 'X-Mailer:PHP/'.phpversion();
        if (!empty($_POST['copie']) && $_POST['copie'] == 'oui')
        {
          // copie cachée pour toi
          $headers [] ='Bcc: ' + $destinataire;
          // destinataire de l'email le gens qui soumet le formulaire
          $destinataire = $_POST['email'];
        }
        echo '<p>';
        if (mail($destinataire, $objet, $_POST['message'], implode("\r\n",$headers))){
          echo $message_envoye;
        }else {
          echo $message_non_envoye;
        }
        echo '</p>';
    }
    else
    {
        echo '<p>',$message_formulaire_invalide.'</p>',PHP_EOL;
    }
}
?>
  <!doctype html>
  <html>
  <head>
    <meta charset="UTF-8">
    <title>Formulaire de contact</title>
    <link href="form.css" rel="stylesheet" type="text/css"/>
    <style type="text/css">
    .title {
      margin-bottom: 2em;
    }
    .contactForm{
      margin : 0 2em;
    }
    label {
      width : 100px;
      text-align : right;
      display:inline-block;
      vertical-align: top;
    }
    .input {
      margin-bottom :2em;
    }
    input[class="submit"]{
      margin-top : 2em;
      margin-left: 100px;
      width:200px;
    }
    </style>
  </head>
  <body>
    <nav id="navigation">
      <ul>
        <li> <a href="index.html" target="new">Accueil</a> </li>
        <li> <a href="prestations.html" target="new">Prestations</a> </li>
        <li> <a href="qui-suis-je.html" target="new">Qui suis-je</a> </li>
        <li> <a href="livre-d-or.html" target="new">Livre d'Or</a> </li>
        <li> <a href="form.html" target="new">Contact</a> </li>
      </ul>
    </nav>
    <div id="contenu">
      <div class="title">Formulaire de contact</div>
      <form method="post">
        <p class="contactForm">
          <label for="name">Nom*:</label>
          <input type="text" id="name" name="name" class="input" required />
          <br />
          <label for="société">Société:</label>
          <input type="text" id="société" name="societe" class="input" />
          <br />
          <label for="email">Adresse email*:</label>
          <input type="email" id="email" name="email" class="input" required />
          <br />
          <label for="téléphone">Téléphone/Fax:</label>
          <input type="tel" id="téléphone" name="telephone" class="input" pattern="^((\+\d{1,3}(-| )?\(?\d\)?(-| )?\d{1,5})|(\(?\d{2,6}\)?))(-| )?(\d{3,4})(-| )?(\d{4})(( x| ext)\d{1,5}){0,1}$" />
          <br />
          <label for="msg">Votre message*:</label>
          <textarea id="msg" name="message" class="msg" rows="10" cols="32" required></textarea>
          <br/>
          <input type="submit" class="submit" name="submit" value="Envoyer">
        </p>
      </form>
    </div>
    <div id="footer">
      <p><img src="images/twitter.png" alt="logo twitter" height="15" />&nbsp;&nbsp; droits réservés &copy;Serveur à la carte - 2017 &nbsp;&nbsp;<img src="images/facebook.png" alt="logo acebook" height="15" /></p>
    </div>
  </body>
  </html>
pour l'envoie d'email j'utilise plutôt phpmailer que la fonction native.

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 17 Messages

11 janv. 2017, 12:15

salut,

tu as plusieurs problèmes
- tu n'as pas de champ de formulaire qui s'appel envoie (si tu test le bouton c'est submit) => tu ne valide jamais le formulaire
- globalement les noms utilisés pour champs du formulaire ne correspondent pas a ce que tu demandes dans le tableau $_POST
- la variable $objet n'existe pas

au vu du contenue je suppose que
- tu n'as pas bien compris le mécanisme des formulaires avec php http://www.lephpfacile.com/cours/8-recu ... ormulaires
- tu as fait un copier / coller en essayant d'adapter au mieux
- tu utilises un truc qui te pond code ?

ensuite le reste j'ai mis des commentaires dans le code
voilà a quoi peux ressembler ton code
<?php
$destinataire = '[email protected]';

$copie = 'oui';

$message_envoye = "Votre message nous est bien parvenu !";
$message_erreur_formulaire = "Vous devez d'abord <a href=\"contact.html\">envoyer le formulaire</a>.";
$message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP.";

$message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur.";
$objet = 'l\'objet du mail';
if (!empty($_POST['submit']))
{
    function Rec($text)
    {
        $text = htmlspecialchars(trim($text), ENT_QUOTES);
        // dommage tu envois en mail au format texte donc il va y avoir des <br/> au milieu du texte
        $text = nl2br($text);
        return $text;
    };
    // inutile : filter_var avec le filtre FILTER_VALIDATE_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;
    }
    // bof autant utiliser les données dans $_POST
    $nom     = (isset($_POST['name']))     ? Rec($_POST['name'])     : '';
    $societe   = (isset($_POST['societe']))   ? Rec($_POST['societe'])   : '';
    $email   = (isset($_POST['email']))   ? Rec($_POST['email'])   : '';
    $telephone   = (isset($_POST['telephone']))   ? Rec($_POST['telephone'])   : '';
    $message = (isset($_POST['message'])) ? Rec($_POST['message']) : '';
    
    $email = (IsEmail($email)) ? $email : '';
    xdebug_var_dump($nom,$societe,$email,$telephone,$message);
    if (!empty($nom) && !empty($societe)&& !empty($email) && !empty($telephone) && !empty($message))
    {
        $headers  = 'MIME-Version: 1.0' . "\r\n";
        $headers .= 'From:'.$nom.' <'.$email.'>' . "\r\n" .
        'Reply-To:'.$email. "\r\n" .
        'Content-Type: text/plain; charset="utf-8"; DelSp="Yes"; format=flowed '."\r\n" .
        'Content-Disposition: inline'. "\r\n" .
        'Content-Transfer-Encoding: 7bit'." \r\n" .
        'X-Mailer:PHP/'.phpversion();
        
        // autant faire un tablau direct pour éviter l'explode inutile plus bas
        // d'ailleur copie ne peu pas voiloir autre chose que oui ici donc autant virer le if et avoir un tableau directement
        //$cible = [$destinataire,$email];
        if ($copie == 'oui')
        {
            $cible = $destinataire.';'.$email;
        }
        else
        {
            $cible = $destinataire;
        };
        // ça c'est l'inverse de htmlspecialchars de la fonction rec ...
        $message = str_replace("'","'",$message);
        $message = str_replace("&#8217;","'",$message);
        $message = str_replace(""",'"',$message);
        $message = str_replace('<br>','',$message);
        $message = str_replace('<br />','',$message);
        $message = str_replace("<","<",$message);
        $message = str_replace(">",">",$message);
        $message = str_replace("&","&",$message);
        
        $num_emails = 0;
        $tmp = explode(';', $cible);// ouch
        foreach($tmp as $email_destinataire)
        {
            if (mail($email_destinataire, $objet, $message, $headers)){
                $num_emails++;
            }else {
                // pas de message d'erreur ?
            }   
        }
        // c'est plus simple non ?
        if ($num_emails > 0)
        {
            echo '<p>',$message_envoye,'</p>';
        }
        else
        {
            echo '<p>',$message_non_envoye,'</p>';
        };
    }
    else
    {
        echo '<p>',$message_formulaire_invalide.'</p>',PHP_EOL;
    };
};
?>
  <!doctype html>
  <html>
  <head>
    <meta charset="UTF-8">
    <title>Formulaire de contact</title>
    <link href="form.css" rel="stylesheet" type="text/css">
  </head>
  <body>
    <nav id="navigation">
      <ul>
        <li> <a href="index.html" target="new">Accueil</a> </li>
        <li> <a href="prestations.html" target="new">Prestations</a> </li>
        <li> <a href="qui-suis-je.html" target="new">Qui suis-je</a> </li>
        <li> <a href="livre-d-or.html" target="new">Livre d'Or</a> </li>
        <li> <a href="form.html" target="new">Contact</a> </li>
      </ul>
    </nav>
    <div id="contenu">
      <div class="title">Formulaire de contact</div>
      <!-- Ouch non utilise du css pour placer les éléments, la tu demandes une marge haute sur l'élement suivant (ou une basse sur le précédent si tu préfères)
<br/>
<br/>
<br/>
-->
      <form method="post">
        <!-- j'ai enlevé l'action parce que j'utilise le même fichier -->
        <p>
          <label for="name">Nom*:</label>
          <input type="text" id="name" name="name" class="input" required />
          <br/>
          <br/>
          <label for="société">Société:</label>
          <input type="text" id="société" name="societe" class="input" />
          <br/>
          <br/>
          <label for="email">Adresse email*:</label>
          <input type="email" id="email" name="email" class="input" />
          <br/>
          <br/>
          <label for="téléphone">Téléphone/Fax:</label>
          <input type="tel" id="téléphone" name="telephone" class="input" pattern="^((\+\d{1,3}(-| )?\(?\d\)?(-| )?\d{1,5})|(\(?\d{2,6}\)?))(-| )?(\d{3,4})(-| )?(\d{4})(( x| ext)\d{1,5}){0,1}$"/>
          <br/>
          <br/>
          <label for="msg">Votre message*:</label>
          <textarea id="msg" name="message" class="msg" rows="10" cols="32"></textarea>
          <br/>
          <input type="submit" class="submit" name="submit" value="Envoyer">
        </p>
      </form>
    </div>
    <div id="footer">
      <!-- pour les logos je te conseil d'utiliser des images qui proviennent des sites d'origine et pas de stocker sur ton site à toi, simplement pour une cause d'uniformité de leur charte
de plus, normalement il y a des lien sur ces images pour rediriger sur tes comptes (sinon ça sert à rien ;) )
pis bon acebook c'est moins connu que FB je pense ;)
-->
      <p><img src="images/twitter.png" alt="logo twitter" height="15" />&nbsp;&nbsp; droits réservés &copy;Serveur à la carte - 2017 &nbsp;&nbsp;<img src="images/facebook.png" alt="logo acebook" height="15" /></p>
    </div>
  </body>
  </html>
Au final je ferais un truc dans le style :
<?php
$destinataire = '[email protected]';

$message_envoye = "Votre message nous est bien parvenu !";
$message_erreur_formulaire = "Vous devez d'abord <a href=\"contact.html\">envoyer le formulaire</a>.";
$message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP.";

$message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur.";
$objet = 'l\'objet du mail';
if (!empty($_POST['submit']))
{
    if (!empty($_POST['name']) && !empty($_POST['societe'])&& !empty($_POST['email']) && !empty($_POST['telephone']) && !empty($_POST['message']))
    {
        $headers[]  = 'MIME-Version: 1.0';
        $headers []= 'From:'.$_POST['name'].' <'.$_POST['email'].'>' ;
        $headers []= 'Reply-To:'.$_POST['email'];
        $headers []= 'Content-Type: text/plain; charset="utf-8"; DelSp="Yes"; format=flowed ';
        $headers []= 'Content-Disposition: inline';
        $headers []= 'Content-Transfer-Encoding: 7bit';
        $headers []= 'X-Mailer:PHP/'.phpversion();
        if (!empty($_POST['copie']) && $_POST['copie'] == 'oui')
        {
          // copie cachée pour toi
          $headers [] ='Bcc: ' + $destinataire;
          // destinataire de l'email le gens qui soumet le formulaire
          $destinataire = $_POST['email'];
        }
        echo '<p>';
        if (mail($destinataire, $objet, $_POST['message'], implode("\r\n",$headers))){
          echo $message_envoye;
        }else {
          echo $message_non_envoye;
        }
        echo '</p>';
    }
    else
    {
        echo '<p>',$message_formulaire_invalide.'</p>',PHP_EOL;
    }
}
?>
  <!doctype html>
  <html>
  <head>
    <meta charset="UTF-8">
    <title>Formulaire de contact</title>
    <link href="form.css" rel="stylesheet" type="text/css"/>
    <style type="text/css">
    .title {
      margin-bottom: 2em;
    }
    .contactForm{
      margin : 0 2em;
    }
    label {
      width : 100px;
      text-align : right;
      display:inline-block;
      vertical-align: top;
    }
    .input {
      margin-bottom :2em;
    }
    input[class="submit"]{
      margin-top : 2em;
      margin-left: 100px;
      width:200px;
    }
    </style>
  </head>
  <body>
    <nav id="navigation">
      <ul>
        <li> <a href="index.html" target="new">Accueil</a> </li>
        <li> <a href="prestations.html" target="new">Prestations</a> </li>
        <li> <a href="qui-suis-je.html" target="new">Qui suis-je</a> </li>
        <li> <a href="livre-d-or.html" target="new">Livre d'Or</a> </li>
        <li> <a href="form.html" target="new">Contact</a> </li>
      </ul>
    </nav>
    <div id="contenu">
      <div class="title">Formulaire de contact</div>
      <form method="post">
        <p class="contactForm">
          <label for="name">Nom*:</label>
          <input type="text" id="name" name="name" class="input" required />
          <br />
          <label for="société">Société:</label>
          <input type="text" id="société" name="societe" class="input" />
          <br />
          <label for="email">Adresse email*:</label>
          <input type="email" id="email" name="email" class="input" required />
          <br />
          <label for="téléphone">Téléphone/Fax:</label>
          <input type="tel" id="téléphone" name="telephone" class="input" pattern="^((\+\d{1,3}(-| )?\(?\d\)?(-| )?\d{1,5})|(\(?\d{2,6}\)?))(-| )?(\d{3,4})(-| )?(\d{4})(( x| ext)\d{1,5}){0,1}$" />
          <br />
          <label for="msg">Votre message*:</label>
          <textarea id="msg" name="message" class="msg" rows="10" cols="32" required></textarea>
          <br/>
          <input type="submit" class="submit" name="submit" value="Envoyer">
        </p>
      </form>
    </div>
    <div id="footer">
      <p><img src="images/twitter.png" alt="logo twitter" height="15" />&nbsp;&nbsp; droits réservés &copy;Serveur à la carte - 2017 &nbsp;&nbsp;<img src="images/facebook.png" alt="logo acebook" height="15" /></p>
    </div>
  </body>
  </html>
pour l'envoie d'email j'utilise plutôt phpmailer que la fonction native.

@+
Bonjour moogli

merci déjà pour ta réponse, j'ai vu que tu avais fait pas mal de modifications et je suivrai ton conseil pour aller suivre le cours php dès que j'aurai fini ce site car c'est assez urgent, c'est un peu pour cela que malheureusement je me disperse un peu, mais en faisant puis défaire et refaire ça me permet aussi de comprendre, j'ai fait cela pour le début de la création avec html et ma première page me plait bien :)
Mais dans l'immédiat j'ai repris ton code et malheureusement ça ne fonctionne pas, déjà je vois que tu mets tout sur le fichier php, plus de fichier contact html, donc j'ai retiré
seulement maintenant quand je remplis mon formulaire et que j'envoie, ça me redirige sur la page du formulaire sans la mise en page bien sur.
Je te mets le lien pour que mes explications soient plus claires :)
http://chana13ma.free.fr/teddy/traitement.php

Au secours :)

Eléphanteau du PHP | 17 Messages

11 janv. 2017, 12:31

salut,

tu as plusieurs problèmes
- tu n'as pas de champ de formulaire qui s'appel envoie (si tu test le bouton c'est submit) => tu ne valide jamais le formulaire
- globalement les noms utilisés pour champs du formulaire ne correspondent pas a ce que tu demandes dans le tableau $_POST
- la variable $objet n'existe pas

au vu du contenue je suppose que
- tu n'as pas bien compris le mécanisme des formulaires avec php http://www.lephpfacile.com/cours/8-recu ... ormulaires
- tu as fait un copier / coller en essayant d'adapter au mieux
- tu utilises un truc qui te pond code ?

ensuite le reste j'ai mis des commentaires dans le code
voilà a quoi peux ressembler ton code
<?php
$destinataire = '[email protected]';

$copie = 'oui';

$message_envoye = "Votre message nous est bien parvenu !";
$message_erreur_formulaire = "Vous devez d'abord <a href=\"contact.html\">envoyer le formulaire</a>.";
$message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP.";

$message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur.";
$objet = 'l\'objet du mail';
if (!empty($_POST['submit']))
{
    function Rec($text)
    {
        $text = htmlspecialchars(trim($text), ENT_QUOTES);
        // dommage tu envois en mail au format texte donc il va y avoir des <br/> au milieu du texte
        $text = nl2br($text);
        return $text;
    };
    // inutile : filter_var avec le filtre FILTER_VALIDATE_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;
    }
    // bof autant utiliser les données dans $_POST
    $nom     = (isset($_POST['name']))     ? Rec($_POST['name'])     : '';
    $societe   = (isset($_POST['societe']))   ? Rec($_POST['societe'])   : '';
    $email   = (isset($_POST['email']))   ? Rec($_POST['email'])   : '';
    $telephone   = (isset($_POST['telephone']))   ? Rec($_POST['telephone'])   : '';
    $message = (isset($_POST['message'])) ? Rec($_POST['message']) : '';
    
    $email = (IsEmail($email)) ? $email : '';
    xdebug_var_dump($nom,$societe,$email,$telephone,$message);
    if (!empty($nom) && !empty($societe)&& !empty($email) && !empty($telephone) && !empty($message))
    {
        $headers  = 'MIME-Version: 1.0' . "\r\n";
        $headers .= 'From:'.$nom.' <'.$email.'>' . "\r\n" .
        'Reply-To:'.$email. "\r\n" .
        'Content-Type: text/plain; charset="utf-8"; DelSp="Yes"; format=flowed '."\r\n" .
        'Content-Disposition: inline'. "\r\n" .
        'Content-Transfer-Encoding: 7bit'." \r\n" .
        'X-Mailer:PHP/'.phpversion();
        
        // autant faire un tablau direct pour éviter l'explode inutile plus bas
        // d'ailleur copie ne peu pas voiloir autre chose que oui ici donc autant virer le if et avoir un tableau directement
        //$cible = [$destinataire,$email];
        if ($copie == 'oui')
        {
            $cible = $destinataire.';'.$email;
        }
        else
        {
            $cible = $destinataire;
        };
        // ça c'est l'inverse de htmlspecialchars de la fonction rec ...
        $message = str_replace("'","'",$message);
        $message = str_replace("&#8217;","'",$message);
        $message = str_replace(""",'"',$message);
        $message = str_replace('<br>','',$message);
        $message = str_replace('<br />','',$message);
        $message = str_replace("<","<",$message);
        $message = str_replace(">",">",$message);
        $message = str_replace("&","&",$message);
        
        $num_emails = 0;
        $tmp = explode(';', $cible);// ouch
        foreach($tmp as $email_destinataire)
        {
            if (mail($email_destinataire, $objet, $message, $headers)){
                $num_emails++;
            }else {
                // pas de message d'erreur ?
            }   
        }
        // c'est plus simple non ?
        if ($num_emails > 0)
        {
            echo '<p>',$message_envoye,'</p>';
        }
        else
        {
            echo '<p>',$message_non_envoye,'</p>';
        };
    }
    else
    {
        echo '<p>',$message_formulaire_invalide.'</p>',PHP_EOL;
    };
};
?>
  <!doctype html>
  <html>
  <head>
    <meta charset="UTF-8">
    <title>Formulaire de contact</title>
    <link href="form.css" rel="stylesheet" type="text/css">
  </head>
  <body>
    <nav id="navigation">
      <ul>
        <li> <a href="index.html" target="new">Accueil</a> </li>
        <li> <a href="prestations.html" target="new">Prestations</a> </li>
        <li> <a href="qui-suis-je.html" target="new">Qui suis-je</a> </li>
        <li> <a href="livre-d-or.html" target="new">Livre d'Or</a> </li>
        <li> <a href="form.html" target="new">Contact</a> </li>
      </ul>
    </nav>
    <div id="contenu">
      <div class="title">Formulaire de contact</div>
      <!-- Ouch non utilise du css pour placer les éléments, la tu demandes une marge haute sur l'élement suivant (ou une basse sur le précédent si tu préfères)
<br/>
<br/>
<br/>
-->
      <form method="post">
        <!-- j'ai enlevé l'action parce que j'utilise le même fichier -->
        <p>
          <label for="name">Nom*:</label>
          <input type="text" id="name" name="name" class="input" required />
          <br/>
          <br/>
          <label for="société">Société:</label>
          <input type="text" id="société" name="societe" class="input" />
          <br/>
          <br/>
          <label for="email">Adresse email*:</label>
          <input type="email" id="email" name="email" class="input" />
          <br/>
          <br/>
          <label for="téléphone">Téléphone/Fax:</label>
          <input type="tel" id="téléphone" name="telephone" class="input" pattern="^((\+\d{1,3}(-| )?\(?\d\)?(-| )?\d{1,5})|(\(?\d{2,6}\)?))(-| )?(\d{3,4})(-| )?(\d{4})(( x| ext)\d{1,5}){0,1}$"/>
          <br/>
          <br/>
          <label for="msg">Votre message*:</label>
          <textarea id="msg" name="message" class="msg" rows="10" cols="32"></textarea>
          <br/>
          <input type="submit" class="submit" name="submit" value="Envoyer">
        </p>
      </form>
    </div>
    <div id="footer">
      <!-- pour les logos je te conseil d'utiliser des images qui proviennent des sites d'origine et pas de stocker sur ton site à toi, simplement pour une cause d'uniformité de leur charte
de plus, normalement il y a des lien sur ces images pour rediriger sur tes comptes (sinon ça sert à rien ;) )
pis bon acebook c'est moins connu que FB je pense ;)
-->
      <p><img src="images/twitter.png" alt="logo twitter" height="15" />&nbsp;&nbsp; droits réservés &copy;Serveur à la carte - 2017 &nbsp;&nbsp;<img src="images/facebook.png" alt="logo acebook" height="15" /></p>
    </div>
  </body>
  </html>
Au final je ferais un truc dans le style :
<?php
$destinataire = '[email protected]';

$message_envoye = "Votre message nous est bien parvenu !";
$message_erreur_formulaire = "Vous devez d'abord <a href=\"contact.html\">envoyer le formulaire</a>.";
$message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP.";

$message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur.";
$objet = 'l\'objet du mail';
if (!empty($_POST['submit']))
{
    if (!empty($_POST['name']) && !empty($_POST['societe'])&& !empty($_POST['email']) && !empty($_POST['telephone']) && !empty($_POST['message']))
    {
        $headers[]  = 'MIME-Version: 1.0';
        $headers []= 'From:'.$_POST['name'].' <'.$_POST['email'].'>' ;
        $headers []= 'Reply-To:'.$_POST['email'];
        $headers []= 'Content-Type: text/plain; charset="utf-8"; DelSp="Yes"; format=flowed ';
        $headers []= 'Content-Disposition: inline';
        $headers []= 'Content-Transfer-Encoding: 7bit';
        $headers []= 'X-Mailer:PHP/'.phpversion();
        if (!empty($_POST['copie']) && $_POST['copie'] == 'oui')
        {
          // copie cachée pour toi
          $headers [] ='Bcc: ' + $destinataire;
          // destinataire de l'email le gens qui soumet le formulaire
          $destinataire = $_POST['email'];
        }
        echo '<p>';
        if (mail($destinataire, $objet, $_POST['message'], implode("\r\n",$headers))){
          echo $message_envoye;
        }else {
          echo $message_non_envoye;
        }
        echo '</p>';
    }
    else
    {
        echo '<p>',$message_formulaire_invalide.'</p>',PHP_EOL;
    }
}
?>
  <!doctype html>
  <html>
  <head>
    <meta charset="UTF-8">
    <title>Formulaire de contact</title>
    <link href="form.css" rel="stylesheet" type="text/css"/>
    <style type="text/css">
    .title {
      margin-bottom: 2em;
    }
    .contactForm{
      margin : 0 2em;
    }
    label {
      width : 100px;
      text-align : right;
      display:inline-block;
      vertical-align: top;
    }
    .input {
      margin-bottom :2em;
    }
    input[class="submit"]{
      margin-top : 2em;
      margin-left: 100px;
      width:200px;
    }
    </style>
  </head>
  <body>
    <nav id="navigation">
      <ul>
        <li> <a href="index.html" target="new">Accueil</a> </li>
        <li> <a href="prestations.html" target="new">Prestations</a> </li>
        <li> <a href="qui-suis-je.html" target="new">Qui suis-je</a> </li>
        <li> <a href="livre-d-or.html" target="new">Livre d'Or</a> </li>
        <li> <a href="form.html" target="new">Contact</a> </li>
      </ul>
    </nav>
    <div id="contenu">
      <div class="title">Formulaire de contact</div>
      <form method="post">
        <p class="contactForm">
          <label for="name">Nom*:</label>
          <input type="text" id="name" name="name" class="input" required />
          <br />
          <label for="société">Société:</label>
          <input type="text" id="société" name="societe" class="input" />
          <br />
          <label for="email">Adresse email*:</label>
          <input type="email" id="email" name="email" class="input" required />
          <br />
          <label for="téléphone">Téléphone/Fax:</label>
          <input type="tel" id="téléphone" name="telephone" class="input" pattern="^((\+\d{1,3}(-| )?\(?\d\)?(-| )?\d{1,5})|(\(?\d{2,6}\)?))(-| )?(\d{3,4})(-| )?(\d{4})(( x| ext)\d{1,5}){0,1}$" />
          <br />
          <label for="msg">Votre message*:</label>
          <textarea id="msg" name="message" class="msg" rows="10" cols="32" required></textarea>
          <br/>
          <input type="submit" class="submit" name="submit" value="Envoyer">
        </p>
      </form>
    </div>
    <div id="footer">
      <p><img src="images/twitter.png" alt="logo twitter" height="15" />&nbsp;&nbsp; droits réservés &copy;Serveur à la carte - 2017 &nbsp;&nbsp;<img src="images/facebook.png" alt="logo acebook" height="15" /></p>
    </div>
  </body>
  </html>
pour l'envoie d'email j'utilise plutôt phpmailer que la fonction native.

@+
Bonjour moogli

merci déjà pour ta réponse, j'ai vu que tu avais fait pas mal de modifications et je suivrai ton conseil pour aller suivre le cours php dès que j'aurai fini ce site car c'est assez urgent, c'est un peu pour cela que malheureusement je me disperse un peu, mais en faisant puis défaire et refaire ça me permet aussi de comprendre, j'ai fait cela pour le début de la création avec html et ma première page me plait bien :)
Mais dans l'immédiat j'ai repris ton code et malheureusement ça ne fonctionne pas, déjà je vois que tu mets tout sur le fichier php, plus de fichier contact html, donc j'ai retiré
seulement maintenant quand je remplis mon formulaire et que j'envoie, ça me redirige sur la page du formulaire sans la mise en page bien sur.
Je te mets le lien pour que mes explications soient plus claires :)
http://chana13ma.free.fr/teddy/traitement.php

Au secours :)

Re

alors je sais pas trop ce que j'ai fait , mais là c'est bon je reçois le mail, sauf que je suis obligée de remplir tous les champs alors que je n'avais mis que trois champs obligatoires. Si je ne remplis pas le téléphone et société j'ai un message qui me dit de remplir le formulaire complètement.

Bon j'avance grâce à toi mais c'est pas encore ça :)

Eléphanteau du PHP | 17 Messages

11 janv. 2017, 12:35

Bonsoir,

La première vérification que ton code effectue est la suivante
if (!isset($_POST['envoi']))
Ton $_POST est-il vide quand tu arrives sur cette page ? (D'après ce que je comprend l'utilisateur est sensé remplir le formulaire et après le mail est envoyé)

Si c'est bien le formulaire présent dans le code que tu nous a partagé qui est sensé remplir le mail alors $_POST['envoi'] ne sera jamais défini donc tu passeras toujours dans ta première condition (ton formulaire ne gère pas de champs ayant pour name envoi)
if (!isset($_POST['envoi'])) 
{ 
echo '<p>'.$message_erreur_formulaire.'</p>'."\n"; 
}

PS : Je te conseille de mettre tes corps de fonctions bien a l'écart du code (tout en haut ou tout en bas), ça évitera bien de surcharger le code
merci pour ta réponse,
j'ai avancé un peu en modifiant avec le code de moogli, là je reçois bien le mail sauf que je dois obligatoirement remplir tous les champs alors qu'il n'y en a que trois obligatoires
cordialement

Eléphanteau du PHP | 17 Messages

11 janv. 2017, 12:37

Hello,

Je modifierai ce bout de code plutot que de le supprimer.

if (!isset($_POST['submit']))
{
echo '<p>'.$message_erreur_formulaire.'</p>'."\n";
}

au moins le code détectera l'appui sur ton bouton d'envoi de formulaire.
bonjour,
merci d'essayer de m'aider

j'avais testé avec ta modification mais ça ne fonctionnait toujours pas

là avec le code de moogli, je reçois le mail mais je dois remplir la totalité des champs ce que je ne veux pas, trois seulement sont obligatoires

cordialement

Mammouth du PHP | 1967 Messages

11 janv. 2017, 12:48

retire de cette ligne ci les champs que tu ne considère pas obligatoire

if (!empty($_POST['name']) && !empty($_POST['societe'])&& !empty($_POST['email']) && !empty($_POST['telephone']) && !empty($_POST['message']))
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 17 Messages

11 janv. 2017, 12:54

retire de cette ligne ci les champs que tu ne considère pas obligatoire

if (!empty($_POST['name']) && !empty($_POST['societe'])&& !empty($_POST['email']) && !empty($_POST['telephone']) && !empty($_POST['message']))
ok je teste et je te dis

Eléphanteau du PHP | 17 Messages

11 janv. 2017, 12:59

retire de cette ligne ci les champs que tu ne considère pas obligatoire

if (!empty($_POST['name']) && !empty($_POST['societe'])&& !empty($_POST['email']) && !empty($_POST['telephone']) && !empty($_POST['message']))
ok je teste et je te dis

Re

donc j'ai retiré comme tu me l'as indiqué : if (!empty($_POST['name']) && !empty($_POST['email']) && !empty($_POST['message']))

ça c'est les trois champs obligatoires

mais quand je teste, ça me dit : Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur.

snif snif

Eléphanteau du PHP | 17 Messages

11 janv. 2017, 13:24

Un de vous a testé, j'ai bien reçu le mail qui arrive dans mes indésirables, mais bon ça je verrai plus tard pourquoi.
donc merci pour le test , mais as-tu eu besoin de remplir tous les champs ? car moi oui je suis obligée

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

11 janv. 2017, 13:30

le copier / coller c'est mal :
oui j'ai qu'un fichier, c'est courant
tu peu séparer mais il faut indiquer la cible (action) du formulaire sinon "ça marche pas".

tu te rends compte que si tout le monde fait "je tente on verra bien" c'est vite un gros bordel (pense aux médecins ou aux gens dans leurs voitures ;) ).
si tu veux gagner du temps il faut en passer un peu à apprendre, c'est le minimum.

de ce que j'ai pu tester cela semble fonctionner (en dehors du message de validation tout moche en haut il faudrait prévoir le truc mieux que ça (comme stocker le message dans tableau ou un objet avec les information valide ou pas et le message. ensuite au milieu un message vert / rouge suivant l'état).

tu peux aussi virer ma css dans le code html qui ne sert pas a grand chose si tu as tout dans ton fichier css.

pour ce qui est des champs obligatoire j'ai simplement pris ton code qui demandait que tout soit obligatoire. Pour ceux qui ne sont pas obligatoire utilise la solution de spols.
D'ailleurs les champs société et téléphone ne sont pas utilisé dans le message.

au passage, pour l'envoi d'email (et éviter les spam) il est préférable d'utiliser une librairie comme phpmailer (je pense que l'entête X-Mailer:PHP/xxxx doit aider pour entrée dans le spam).

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 17 Messages

11 janv. 2017, 18:19

J'ai bien regardé et essayé de bien comprendre ton code et en effet le conseil de spols de virer "société et téléphone" de la ligne :

if (!empty($_POST['name']) && !empty($_POST['societe'])&& !empty($_POST['email']) && !empty($_POST['telephone']) && !empty($_POST['message']))

est tout à fait logique surtout que dans le code html il n'y a pas l'attribut "required" derrière ces deux lignes là

sauf que si je les retire j'ai ce message d'erreur :

Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur.

alors que normalement ils ne sont pas requis nulle part



le copier / coller c'est mal :
oui j'ai qu'un fichier, c'est courant
tu peu séparer mais il faut indiquer la cible (action) du formulaire sinon "ça marche pas".

tu te rends compte que si tout le monde fait "je tente on verra bien" c'est vite un gros bordel (pense aux médecins ou aux gens dans leurs voitures ;) ).
si tu veux gagner du temps il faut en passer un peu à apprendre, c'est le minimum.

de ce que j'ai pu tester cela semble fonctionner (en dehors du message de validation tout moche en haut il faudrait prévoir le truc mieux que ça (comme stocker le message dans tableau ou un objet avec les information valide ou pas et le message. ensuite au milieu un message vert / rouge suivant l'état).

tu peux aussi virer ma css dans le code html qui ne sert pas a grand chose si tu as tout dans ton fichier css.

pour ce qui est des champs obligatoire j'ai simplement pris ton code qui demandait que tout soit obligatoire. Pour ceux qui ne sont pas obligatoire utilise la solution de spols.
D'ailleurs les champs société et téléphone ne sont pas utilisé dans le message.

au passage, pour l'envoi d'email (et éviter les spam) il est préférable d'utiliser une librairie comme phpmailer (je pense que l'entête X-Mailer:PHP/xxxx doit aider pour entrée dans le spam).

@+