8722 sujets

Développement web côté serveur, CMS

Bonjour,

Je souhaiterais intégrer un formulaire de contact sur mon site web.

Voici le code que j'ai intégré sur ma page HTML :

<form align="left" style="font-size:10px; background-color:#333; color:#FFF; border:double; border-color:#000; width:180px; height:330px; padding:30px;" action="formulaire.php" method="post" enctype="application/x-www-form-urlencoded" name="formulaire">
Nom : 
<input type="text" id="nom" name="nom" required><br><br>
Email : 
<input type="email" id="email" name="email" required><br><br>
Sujet : 
<input type="text" id="sujet" name="sujet" required><br><br>
Votre message :<br>
<textarea id="message" name="message" rows="10" cols="22"></textarea><br><br>
<input align="middle" type="submit" value="Envoyer !">
</form>


Et voici le contenu du fichier "formulaire.php" :

<?php 
if(isset($_POST) && isset($_POST['nom']) && isset($_POST['email']) && isset($_POST['message'])){
    if(!empty($_POST['nom']) && !empty($_POST['email']) && !empty($_POST['message'])){
        $destinataire = "email@email.fr";
        $sujet = "Demande de contact : ".$_POST['sujet']."\r\n";
        $message = "Nom : ".$_POST['nom']."\r\n";
        $message = "Adresse email : ".$_POST['email']."\r\n";
        $message = "Message : ".$_POST['message']."\r\n";
        $entete = 'From: '.$_POST['email']."\r\n".
            'Reply-To: '.$_POST['email']."\r\n".
        'X-Mailer: PHP/'.phpversion();
        if (mail($destinataire,$sujet,$message,$entete)){
            echo 'Message envoyé ! Merci [smile]';
        } else {
            echo "Une erreur est survenue lors de l'envoi du formulaire par email. Merci de recommencer.";
        }
    }
}
?>
<p <a class="back" style="position:absolute; top:20px; left:0px;" alt="Retour" target="_self" href="javascript:history.go(-1)">Retour</a>
</p>


Et bien évidemment, je rencontre quelques problèmes... Smiley smile

1) - je ne comprend pas pourquoi le contenu du mail que je reçois lors de l'envoi du formulaire ne contient pas le "nom" renseigné ainsi que l'"email" (une sorte de récap' avant le contenu du message)

2) - lors de l'envoi du formulaire, j'aimerais savoir s'il est possible de renvoyer le visiteur directement sur une page HTML (à la place du "
echo 'Message envoyé ! Merci [smile]'
" et si ce n'est pas possible, j'aimerais pouvoir personnaliser le style de ce message, en partant de ma feuille de style CSS

Qu'en pensez vous ? Merci pour vos réponses et votre aide Smiley smile

Mammouth
salut,
1 - C'est parce que tu es entrain d'écraser le contenu précédent en écrivant directement "=", il faut faire un ".="

$message  = "Nom : ".$_POST['nom']."\r\n";
$message .= "Adresse email : ".$_POST['email']."\r\n";
$message .= "Message : ".$_POST['message']."\r\n";

ou directement

$message  = "Nom : ".$_POST['nom']."\r\n".
                     "Adresse email : ".$_POST['email']."\r\n".
                     "Message : ".$_POST['message']."\r\n";


2 - Pour les redirection en PHP, tu passes par "header" :

header("Location:  http://www.url.com");
 

Tu peux personnaliser le style en insérant une balise <p> par exemple et lui donnant une classe par exemple.

echo '<p class="maClasse">Message envoyé ! Merci  Smiley smile </p>';


Pour en dire un peu plus, ta première condition peut se résumer à

if(isset($_POST['envoi'])) {}

où 'envoi' sera le "name" de l'input type submit.
Tu devrais aussi procéder à des vérification légèrement plus poussées au lieu de faire des "!empty".
Bonjour

Désolée pour ma réponse tardive, je n'ai pas eu le temps de me repencher sur le sujet...

En tout cas, merci pour ton aide précieuse !
J'ai réussi à régler mes deux problèmes en modifiant comme ceci :

<?php 
if(isset($_POST) && isset($_POST['nom']) && isset($_POST['email']) && isset($_POST['message'])){
	if(!empty($_POST['nom']) && !empty($_POST['email']) && !empty($_POST['message'])){
		$destinataire = "email@email.fr";
		$sujet = "Demande de contact : ".$_POST['sujet']."\r\n";
$message  = "Nom : ".$_POST['nom']."\r\n".
            "Adresse email : ".$_POST['email']."\r\n".
            "Message : ".$_POST['message']."\r\n";
		$entete = 'From: '.$_POST['email']."\r\n".
        	'Reply-To: '.$_POST['email']."\r\n".
		'X-Mailer: PHP/'.phpversion();
		
		if (mail($destinataire,$sujet,$message,$entete)){
			header ("Location:  merci.html");
		} else {
 			header ("Location:  oups.html");
		}
	}
}
?>


Dans lequel la page merci.html renvoie au message de remerciements, et la page oups.html renvoie au message d'erreur.

En revanche, je n'ai pas compris ton dernier point :
"Tu devrais aussi procéder à des vérification légèrement plus poussées au lieu de faire des "!empty"."

Peux-tu être plus précis ?

Merci encore
Marianne
Bonjour,

En effet verifier que le champ n'est pas vide est une chose, mais par exemple si dans ton champ "email" je mets "toto".. ton formulaire va le valider.

Donc prévois une vérification de l'e-mail avec le code ci-dessous par exemple :

<?php
$atmail   = '[-a-z0-9!#$%&\'*+\\/=?^_`{|}~]';   // avant le at
$domaine = '([a-z0-9]([-a-z0-9]*[a-z0-9]+)?)'; // nom de domaine
                               
$regex = '/^' . $atmail . '+' . '(\.' . $atmail . '+)*' . '@' . '(' . $domaine . '{1,63}\.)+' .  $domaine . '{2,63}$/i';  

if (preg_match($regex, $email)) {
    echo "L'adresse e-mail $email est valide";
} else {
    echo "L'adresse e-mail $email n'est pas valide";
}
?>
D'accord
Merci pour l'info Smiley smile


Mais il me semblait que le fait de définir l'input en tant qu'email suffisait
<input type="email" id="email" name="email" required>


J'ai testé sur Chrome et IE, et dans les deux cas, si tu n'écris pas une adresse email, le formulaire ne se valide pas et tu as un message d'avertissement.

Qu'en penses tu ?

Est-ce que le code que tu me proposes permet de vérifier la validité de l'adresse email ? ou simplement de vérifier que c'est bien une adresse email de type nom@domaine.fr/com ?

Marianne
Oui, l'input email côté client fera en sorte qu'un email valide doit être entré mais ça reste une vérification côté client ! Cela veut dire qu'il ne faut jamais avoir confiance dans les informations que tu reçois. C'est extrêmement facile de contourner une vérification côté client.
Tu devras donc toujours faire une vérification côté serveur. D'ailleurs les vérifications se feront plus avec "filter_var" que par de simples regexp (il y a un "FILTER_VALIDATE_EMAIL" pour ce cas précis et tu pourras combiner les expressions régulières avec filter_var).
Il faut aussi penser, si tu fais par exemple un récapitulatif d'informations, à protéger ce que tu vas afficher avec "htmlspecialchars" ou "htmlentities".
Ce sont là les b.a.-ba des manipulations de formulaires.