Comment mettre des conditions pour soumission d'un formulaire ?
Résolu
Ores
Messages postés
51
Date d'inscription
Statut
Membre
Dernière intervention
-
Ores Messages postés 51 Date d'inscription Statut Membre Dernière intervention -
Ores Messages postés 51 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j'ai un petit site internet sur lequel il y a une page contact avec un formulaire simple.
Les champs sont les suivants : Nom, email, tel, message, bouton "envoyer" et "annuler"
Lorsque le visiteur clique sur "envoyer" je reçois un mail avec le contenu du formulaire.
Le problème est que je reçois le mail même si le formulaire est vide.
Ma question est, comment faire en sorte que le bouton "envoyer" ne fonctionne pas tant que les champs ne sont pas remplis.
Merci d'avance pour votre aide
j'ai un petit site internet sur lequel il y a une page contact avec un formulaire simple.
Les champs sont les suivants : Nom, email, tel, message, bouton "envoyer" et "annuler"
Lorsque le visiteur clique sur "envoyer" je reçois un mail avec le contenu du formulaire.
Le problème est que je reçois le mail même si le formulaire est vide.
Ma question est, comment faire en sorte que le bouton "envoyer" ne fonctionne pas tant que les champs ne sont pas remplis.
Merci d'avance pour votre aide
A voir également:
- Php confirmer le nouvel envoi du formulaire
- Whatsapp formulaire opposition - Guide
- Formulaire de réclamation facebook - Guide
- Envoi impossible messenger - Forum Facebook Messenger
- Formulaire de reclamation instagram - Guide
- Formulaire de contact le bon coin introuvable - Forum Réseaux sociaux
7 réponses
Avec des vérifications en javascript(boucles ou test conditionel(les)).
En général on fait ceci pour éviter l'envoi puis en php pour tester et sécuriser les champs envoi utilisation surtout avec une base de données.
PAr exemple en javascript:
si le champ est vide indiquer par une alerte: remplissez le champ :
Si toutes les condittions sont remplies on peut envoyer; vous trouverez facilement desexemples à prendre presque tels quels sur le net.
En général on fait ceci pour éviter l'envoi puis en php pour tester et sécuriser les champs envoi utilisation surtout avec une base de données.
PAr exemple en javascript:
si le champ est vide indiquer par une alerte: remplissez le champ :
Si toutes les condittions sont remplies on peut envoyer; vous trouverez facilement desexemples à prendre presque tels quels sur le net.
Tu pourrais rajouter un peu de javascript, mais il y a toujours moyen de le contourner. Tu devrais plutôt traiter ça du côté du serveur. J'imagine que tu as un petit script php qui utilise la fonction mail ? rajoute la condition
if(empty($_POST["nom"]) || empty($_POST["mail"])) echo "Vous n'avez pas rempli tous les champs"; else //envoie du mail
Voici ce que contient la page PHP du formulaire, est ce dans cette page que je dois faire des modifs ?
<?php
$adresse = "contact@xxxx.com";
$site = "www.xxxx.com";
$TO = $adresse;
$head = "From: ".$adresse."\n";
$head .= "X-Sender: <".$adresse.">\n";
$head .= "X-Mailer: PHP\n";
$head .= "Return-Path: <".$adresse.">\n";
$head .= "Content-Type: text/plain; charset=iso-8859-1\n";
$sujet = "Message envoyé depuis www.xxxx.com";
$informations = "
Nom : ".$_POST['realname']." \r\n
Mail : ".$_POST['email']." \r\n
Téléphone : ".$_POST['tel']."\r\n
Message : ".$_POST['comments']." \r\n
";
$res = mail($TO, $sujet ,$informations, $head);
if (true == $res) {
Header("Location: http://".$site."/formail1.html" );
} else {
Header("Location: http://".$site."/formail2.html" );
}
?>
<?php
$adresse = "contact@xxxx.com";
$site = "www.xxxx.com";
$TO = $adresse;
$head = "From: ".$adresse."\n";
$head .= "X-Sender: <".$adresse.">\n";
$head .= "X-Mailer: PHP\n";
$head .= "Return-Path: <".$adresse.">\n";
$head .= "Content-Type: text/plain; charset=iso-8859-1\n";
$sujet = "Message envoyé depuis www.xxxx.com";
$informations = "
Nom : ".$_POST['realname']." \r\n
Mail : ".$_POST['email']." \r\n
Téléphone : ".$_POST['tel']."\r\n
Message : ".$_POST['comments']." \r\n
";
$res = mail($TO, $sujet ,$informations, $head);
if (true == $res) {
Header("Location: http://".$site."/formail1.html" );
} else {
Header("Location: http://".$site."/formail2.html" );
}
?>
en effet, change <?php
par :
et rajoute à la fin :
Au fait, les trois lignes
sont inutiles.
par :
<?php if(isset($_POST["comments"]) && isset($_POST["tel"]) && isset($_POST["email"]) && isset($_POST["realname"]) && !empty($_POST["comments"])&& !empty($_POST["tel"])&& !empty($_POST["email"])&& !empty($_POST["realname"])) { //vérifie que le formulaire a bien été envoyé et que tous les champs sont remplis
et rajoute à la fin :
} else { //si le formulaire n'est pas rempli correctement header("Location: http://www.xxxx.com/formail2.html"); } ?>
Au fait, les trois lignes
$head .= "X-Sender: <".$adresse.">\n"; $head .= "X-Mailer: PHP\n"; $head .= "Return-Path: <".$adresse.">\n";
sont inutiles.
Alors,
j'ai commencé par supprimer les 3 lignes inutiles, ensuite j'ai remplacé <?php par le petit paragraphe que tu as donné et c'est tout, ça fonctionne.
ça donne donc ça :
<?php
if(isset($_POST["comments"])
&& isset($_POST["tel"])
&& isset($_POST["email"])
&& isset($_POST["realname"])
&& !empty($_POST["comments"])
&& !empty($_POST["tel"])
&& !empty($_POST["email"])
&& !empty($_POST["realname"]))
$adresse = "contact@xxxx.com";
$site = "www.xxxx.com";
$TO = $adresse;
$head = "From: ".$adresse."\n";
$head .= "Content-Type: text/plain; charset=iso-8859-1\n";
$sujet = "Message envoyé depuis www.xxxx.com";
$informations = "
Nom : ".$_POST['realname']." \r\n
Mail : ".$_POST['email']." \r\n
Téléphone : ".$_POST['tel']."\r\n
Message : ".$_POST['comments']." \r\n
";
$res = mail($TO, $sujet ,$informations, $head);
if (true == $res) {
Header("Location: http://".$site."/formail1.html" );
} else {
Header("Location: http://".$site."/formail2.html" );
}
?>
Quand un seul des champs n'est pas renseigné et qu'on clique sur "envoyer" on tombe sur la page "formail2" (qui dit simplement que le message n'a pas été envoyé)
Je voudrais approfondir un peu plus en faisant en sorte que lorsqu'on clique sur "envoyer" les champs non renseignés deviennent rouge, sans perdre les champs déjà remplis.
:)
Si c'est pas possible, je vous remercie quand même car vous m'avez déjà bien aidé.
j'ai commencé par supprimer les 3 lignes inutiles, ensuite j'ai remplacé <?php par le petit paragraphe que tu as donné et c'est tout, ça fonctionne.
ça donne donc ça :
<?php
if(isset($_POST["comments"])
&& isset($_POST["tel"])
&& isset($_POST["email"])
&& isset($_POST["realname"])
&& !empty($_POST["comments"])
&& !empty($_POST["tel"])
&& !empty($_POST["email"])
&& !empty($_POST["realname"]))
$adresse = "contact@xxxx.com";
$site = "www.xxxx.com";
$TO = $adresse;
$head = "From: ".$adresse."\n";
$head .= "Content-Type: text/plain; charset=iso-8859-1\n";
$sujet = "Message envoyé depuis www.xxxx.com";
$informations = "
Nom : ".$_POST['realname']." \r\n
Mail : ".$_POST['email']." \r\n
Téléphone : ".$_POST['tel']."\r\n
Message : ".$_POST['comments']." \r\n
";
$res = mail($TO, $sujet ,$informations, $head);
if (true == $res) {
Header("Location: http://".$site."/formail1.html" );
} else {
Header("Location: http://".$site."/formail2.html" );
}
?>
Quand un seul des champs n'est pas renseigné et qu'on clique sur "envoyer" on tombe sur la page "formail2" (qui dit simplement que le message n'a pas été envoyé)
Je voudrais approfondir un peu plus en faisant en sorte que lorsqu'on clique sur "envoyer" les champs non renseignés deviennent rouge, sans perdre les champs déjà remplis.
:)
Si c'est pas possible, je vous remercie quand même car vous m'avez déjà bien aidé.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Sinon, tu oublies tout ça et tu mets juste "required" sur chacun de tes champs html... et hop en ajoutant 4 mots, dans toute ta page, c'est réglé...
<input type="text" required />
je suis sur safari 6.0.2,
le formulaire :
<title>Envoyer un message</title>
<body bgcolor="black" text="white">
<div align=center>
<form method=POST action=formmail.php>
<input type=hidden name=subject value=formmail>
<table>
<tr><td>Votre nom :</td>
<td><input type=text name=realname size=30></td></tr>
<tr><td>Votre email :</td>
<td><input type=text name=email size=30></td></tr>
<tr><td>Votre téléphone :</td>
<td><input type=text name=tel size=30></td></tr>
<tr><td>Précisez votre demande ici :</td>
<td><textarea cols=50 rows=10 name=comments size=30 placeholder="Entrez votre message ici puis cliquez sur envoyer."/></textarea>
</td>
</tr>
</table>
<br>
<input type=submit value=Envoyer> - <input type=reset value=Annuler>
</form>
</div>
</body>
le formulaire :
<title>Envoyer un message</title>
<body bgcolor="black" text="white">
<div align=center>
<form method=POST action=formmail.php>
<input type=hidden name=subject value=formmail>
<table>
<tr><td>Votre nom :</td>
<td><input type=text name=realname size=30></td></tr>
<tr><td>Votre email :</td>
<td><input type=text name=email size=30></td></tr>
<tr><td>Votre téléphone :</td>
<td><input type=text name=tel size=30></td></tr>
<tr><td>Précisez votre demande ici :</td>
<td><textarea cols=50 rows=10 name=comments size=30 placeholder="Entrez votre message ici puis cliquez sur envoyer."/></textarea>
</td>
</tr>
</table>
<br>
<input type=submit value=Envoyer> - <input type=reset value=Annuler>
</form>
</div>
</body>
On dirait que tu as oublié de rajouter les accolades ({}). Si tu accède à la page de validation sans passer par le formulaire, tu vas avoir des erreurs php qui vont emp?cher le rechargement de la page (écriture sur la page avant les instructions header).
On peut faire avec javascript une vérification préalable (ce qui ne dispense pas de sécuriser le code php, car le javascript est toujours facultatif pour le client). Dans la page formail1 :
il faut rajouter un id sur chaque champ du formulaire, évidement. et rajouter l'attribut onsubmit="verif()" dans la balise form.
On peut faire avec javascript une vérification préalable (ce qui ne dispense pas de sécuriser le code php, car le javascript est toujours facultatif pour le client). Dans la page formail1 :
<script> function verif() { var comments = document.getElementById("realname"), tel = document.getElementById("realname"), email = document.getElementById("realname"), realname = document.getElementById("realname"); if(comments.value == "") { comments.style.borderColor = red; return false; } else if() // etc... } else return true; } </script>
il faut rajouter un id sur chaque champ du formulaire, évidement. et rajouter l'attribut onsubmit="verif()" dans la balise form.
La solution que tu m'as apporté précédemment fonctionne parfaitement, je précisais juste qu'un seul champ non rempli suffisait à invalider le formulaire. C'est ce que je souhaitais dès le début pour ne pas recevoir de mail avec des infos manquantes. Le problème c'est que pour un champ vide, on perd tous les autres car en cliquant su "envoyer" on change de page.
Seulement, est il possible de prévenir le visiteur qu'il doit tout remplir sans le faire changer de page (ce qui lui éviterait de retaper certain champs déjà rempli)
Seulement, est il possible de prévenir le visiteur qu'il doit tout remplir sans le faire changer de page (ce qui lui éviterait de retaper certain champs déjà rempli)
c'est pour ça que je te propose ce script, pour éviter à l'utilisateur inocent de tout retaper. Mais si l'utilisateur est vilain, il désactive javascript, passe outre et peut envoyer des champs vides. Cela fait dans ton code sans accolade que $addresse n'est pas définie. Il éxécute tout jusqu'à mail et ne peut l'envoyer car $addresse n'existe pas. Cependant, le code aura planté avant si tu charge la page directement, sans passer par le formulaire donnant des infos au vilain visiteur.
PS: ça fait moche aussi de laisser des messages d'erreur de php...
PPS: essaye d'aller sur formail.php directement, tu verras.
PS: ça fait moche aussi de laisser des messages d'erreur de php...
PPS: essaye d'aller sur formail.php directement, tu verras.
Merci à roptat et ThEBiShOp pour vos solutions,
l'une est valable pour tous les navigateurs, l'autre pour tous les navigateurs sauf safari.
En combinant les 2 c'est réglé.
Résumé pour ceux que ça intéressent :
dans la page html du formulaire ajouter simplement l'attribut required partout ou c'est nécessaire comme ceci :
<input type="text" name="realname" size="30" required />
(fonctionne pas sur safari)
l'autre solution qui fonctionne partour :
remplacer <?php par
<?php
if(isset($_POST["comments"])
&& isset($_POST["tel"])
&& isset($_POST["email"])
&& isset($_POST["realname"])
&& !empty($_POST["comments"])
&& !empty($_POST["tel"])
&& !empty($_POST["email"])
&& !empty($_POST["realname"]))
l'une est valable pour tous les navigateurs, l'autre pour tous les navigateurs sauf safari.
En combinant les 2 c'est réglé.
Résumé pour ceux que ça intéressent :
dans la page html du formulaire ajouter simplement l'attribut required partout ou c'est nécessaire comme ceci :
<input type="text" name="realname" size="30" required />
(fonctionne pas sur safari)
l'autre solution qui fonctionne partour :
remplacer <?php par
<?php
if(isset($_POST["comments"])
&& isset($_POST["tel"])
&& isset($_POST["email"])
&& isset($_POST["realname"])
&& !empty($_POST["comments"])
&& !empty($_POST["tel"])
&& !empty($_POST["email"])
&& !empty($_POST["realname"]))