Bonjour
Encore une fois je me retourne vers mon forum préféré.
J'essai de modifier un formulaire de contact PHP que j'utilise depuis très longtemps, je l'avais trouvé sur le net, aujourd'hui je souhaite lui rajouter un champ téléphone (non obligatoire), n'ayant pas les compétences nécessaires en PHP, j'ai essayé de le modifier en copiant sur les autres champs du formulaire (mimétisme), je n'ai pas réussi.

Le formulaire fonctionne toujours mais je n'ai pas le retour du champ phone, je suis surement passé à côté d'une évidence, mais je bloque.
Si vous avez un conseil à me donner, merci.
Bonne journée
Prenez bien soin de vous


<?
          $headers ='From:	essai@wanadoo.fr'."\n";
          $headers .='Reply-To: 	essai@wanadoo.fr'."\n";
          $headers .='Content-Type: text/plain; charset="utf-8"'."\n";
          $headers .='Content-Transfer-Encoding: 8bit';
      if (isset($_POST['f_envoyer'])) {
          $email = trim($_POST['f_email']);
        $message = ($_POST['f_message']);
        $erreur_email = 0;
        $erreur_message = 0;
        $retour = "";
        $destinataire = "	essai@wanadoo.fr";
        $sujet = "Menuiserie Menplast";
        $merci = "Votre message à bien été envoyé, merci."
        if ($email == "") {
          $retour .= "Entrez votre adresse email.";
          $erreur_email = 1;
        } else {
          if (! preg_match('/^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,3}$/i',$email)) {
            $retour .= "L'adresse email n'est pas correcte.";
            $erreur_email = 1;
          }
        }
        if ($message == "") {
          $retour .= "Vous avez oublié votre message.";
          $erreur_message = 1;
        }
        if ($retour =="") {
          $contenu .= $email."\n";
          $contenu .= $message;
          $contenu .= $phone;
          mail($destinataire,$sujet,$contenu, $headers, "-f 	essai@wanadoo.fr");
          $retour = $merci;
          $email = "";
          $message = "";
          $phone = "";
        } 
      } else {
        $email = "";
        $message = "";
        $phone = "";
      }
      if ($_POST["vide"] != "") exit("Tentative d'intrusion détectée");
      ?>
       <form action="<? echo $_SERVER['PHP_SELF'] ?>" method="post" id="formulaire">
      <div>
       <fieldset>
        <label><strong>Votre e-mail</strong></label>
        <br/>
      <input name="f_email" type="email" id="f_email" placeholder="@" value ="<? echo $email ?>" />
      <br/><br/>
      <label><strong>
        Votre Message</strong></label><br/>
       <textarea name="f_message" cols="55" rows="5" id="f_message"   placeholder="Votre message" ><? echo $message ?></textarea>
       <label for="phone">Votre téléphone:</label>

<input type="tel" id="phone" name="phone"
       pattern="[0-9]{3}-[0-9]{3}-[0-9]{4}"
       required>
<br><small>Format: 123-456-7890</small>
    </fieldset>
      </div>
      <div>
      <p><input class ="bouton3" type="submit" name="f_envoyer" value="Envoyer" /> &nbsp;
      <input class ="bouton3" id="reset" name="reset" type="reset" value="Annuler" /></p>
      </div>   
      </form>
      <div id="retour"><p class='rouge'><span class="rouge"></span><br>
      <strong> <? echo $retour; ?></strong></p>	
    </div>
      </div>


Modifié par africa (11 Mar 2021 - 13:54)
Modérateur
Bonjour,

Il faut initialiser la variable php $phone avec le contenu du champ du téléphone du formulaire (qui se trouve dans $POST["f_phone"], et aussi faire un echo du contenu de cette variable dans le champ du téléphone, en ajoutant l'attribut value="<?php echo $phone; ?>" à la balise <input> qui a id="phone".

Par ailleurs :
1) il vaut mieux utiliser <?php plutôt que <? car tous les serveurs ne comprennent pas <? (<? non suivi de php est plus ou moins obsolète en fait).
2) il vaut mieux donner comme nom (attribut "name") de la balise <input> du téléphone "f_phone" plutôt que "phone" pour être cohérent avec les noms des autres champs du formulaire qui commence tous par "f_". Pour l'id, on peut laisser "phone".
3) il faut toujours mettre des ";" à la fin des instructions php (en fait, ce n'est pas tout à fait à toutes les instructions, mais c'est une bonne habitude d'en mettre systématiquement). Et donc, il manque un ";" à la fin de la ligne :
$merci = "Votre message à bien été envoyé, merci."


La totalité du code modifié :
<?php
$headers ='From:	essai@wanadoo.fr'."\n";
$headers .='Reply-To: 	essai@wanadoo.fr'."\n";
$headers .='Content-Type: text/plain; charset="utf-8"'."\n";
$headers .='Content-Transfer-Encoding: 8bit';
if (isset($_POST['f_envoyer']))
{
	$email = trim($_POST['f_email']);
	$message = ($_POST['f_message']);
	$phone = ($_POST['f_phone']);
	$erreur_email = 0;
	$erreur_message = 0;
	$retour = "";
	$destinataire = "	essai@wanadoo.fr";
	$sujet = "Menuiserie Menplast";
	$merci = "Votre message à bien été envoyé, merci.";
	if ($email == "")
	{
		$retour .= "Entrez votre adresse email.";
		$erreur_email = 1;
	} else {
		if (! preg_match('/^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,3}$/i',$email))
		{
			$retour .= "L'adresse email n'est pas correcte.";
			$erreur_email = 1;
		}
	}
	if ($message == "")
	{
		$retour .= "Vous avez oublié votre message.";
		$erreur_message = 1;
	}
	if ($retour =="")
	{
		$contenu .= $email."\n";
		$contenu .= $message;
		$contenu .= $phone;
		mail($destinataire,$sujet,$contenu, $headers, "-f 	essai@wanadoo.fr");
		$retour = $merci;
		$email = "";
		$message = "";
		$phone = "";
	} 
} else {
	$email = "";
	$message = "";
	$phone = "";
}
if ($_POST["vide"] != "") exit("Tentative d'intrusion détectée");
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" id="formulaire">
<div>
<fieldset>
<label><strong>Votre e-mail</strong></label>
<br/>
<input name="f_email" type="email" id="f_email" placeholder="@" value ="<?php echo $email; ?>" />
<br/><br/>
<label><strong>Votre Message</strong></label><br/>
<textarea name="f_message" cols="55" rows="5" id="f_message"   placeholder="Votre message" ><?php echo $message; ?></textarea>
<label for="phone">Votre téléphone:</label>
<input type="tel" id="phone" name="f_phone"
       pattern="[0-9]{3}-[0-9]{3}-[0-9]{4}"
       value="<?php echo $phone; ?>"
       required>
<br><small>Format: 123-456-7890</small>
</fieldset>
</div>
<div>
<p><input class ="bouton3" type="submit" name="f_envoyer" value="Envoyer" /> &nbsp;
<input class ="bouton3" id="reset" name="reset" type="reset" value="Annuler" /></p>
</div>   
</form>
<div id="retour"><p class='rouge'><span class="rouge"></span><br>
<strong> <?php echo $retour; ?></strong></p>	
</div>

Amicalement,
Un grand merci Parsimonhi pour tous ces conseils et corrections.
Je vais comparer votre code avec celui en place afin de comprendre.
Smiley biggrin
Bonne journée
Tout fonctionne Smiley biggrin
Est il possible de ne pas rendre obligatoire le champ phone ?
et de le mettre à ligne dans le corps du message ?

Merci
Modifié par africa (11 Mar 2021 - 14:09)
Modérateur
Bonjour,

africa a écrit :
Est il possible de ne pas rendre obligatoire le champ phone ?

Si j'ai bien compris la question, il suffit sans doute de retirer l'attribut required de la balise <input> pour le téléphone.

Amicalement,
Modérateur
Bonjour,

africa a écrit :
et de le mettre à ligne dans le corps du message ?

Il suffit de rajouter un ."\n" derrière $message.
$contenu .= $message."\n";


Amicalement,