Comment mettre des conditions pour soumission d'un formulaire ?
Résolu/Fermé
Ores
Messages postés
51
Date d'inscription
mercredi 31 octobre 2012
Statut
Membre
Dernière intervention
28 février 2013
-
28 févr. 2013 à 13:30
Ores Messages postés 51 Date d'inscription mercredi 31 octobre 2012 Statut Membre Dernière intervention 28 février 2013 - 28 févr. 2013 à 15:18
Ores Messages postés 51 Date d'inscription mercredi 31 octobre 2012 Statut Membre Dernière intervention 28 février 2013 - 28 févr. 2013 à 15:18
A voir également:
- Php confirmer le nouvel envoi du formulaire
- Formulaire de réclamation facebook - Guide
- Nouvel outlook - Accueil - Mail
- Easy php - Télécharger - Divers Web & Internet
- Le formulaire rempli - Guide
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.
roptat
Messages postés
276
Date d'inscription
samedi 20 octobre 2012
Statut
Membre
Dernière intervention
26 juillet 2013
77
28 févr. 2013 à 13:38
28 févr. 2013 à 13:38
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
Ores
Messages postés
51
Date d'inscription
mercredi 31 octobre 2012
Statut
Membre
Dernière intervention
28 février 2013
28 févr. 2013 à 13:44
28 févr. 2013 à 13:44
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" );
}
?>
roptat
Messages postés
276
Date d'inscription
samedi 20 octobre 2012
Statut
Membre
Dernière intervention
26 juillet 2013
77
Modifié par roptat le 28/02/2013 à 13:59
Modifié par roptat le 28/02/2013 à 13:59
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.
Ores
Messages postés
51
Date d'inscription
mercredi 31 octobre 2012
Statut
Membre
Dernière intervention
28 février 2013
28 févr. 2013 à 14:23
28 févr. 2013 à 14:23
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
ThEBiShOp
Messages postés
8378
Date d'inscription
jeudi 22 mars 2007
Statut
Contributeur
Dernière intervention
8 février 2021
1 566
28 févr. 2013 à 14:28
28 févr. 2013 à 14:28
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 />
Ores
Messages postés
51
Date d'inscription
mercredi 31 octobre 2012
Statut
Membre
Dernière intervention
28 février 2013
Modifié par Ores le 28/02/2013 à 14:40
Modifié par Ores le 28/02/2013 à 14:40
j'aurais bien aimé que ça fonctionne mais ça marche pas dans mon cas, le formulaire est quand même envoyé dès qu'on clique sur "envoyer"
ThEBiShOp
Messages postés
8378
Date d'inscription
jeudi 22 mars 2007
Statut
Contributeur
Dernière intervention
8 février 2021
1 566
28 févr. 2013 à 14:42
28 févr. 2013 à 14:42
tu as quel navigateur et quelle version ?
ton formulaire ressemble à quoi ?
ton formulaire ressemble à quoi ?
Ores
Messages postés
51
Date d'inscription
mercredi 31 octobre 2012
Statut
Membre
Dernière intervention
28 février 2013
28 févr. 2013 à 14:44
28 févr. 2013 à 14:44
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>
ThEBiShOp
Messages postés
8378
Date d'inscription
jeudi 22 mars 2007
Statut
Contributeur
Dernière intervention
8 février 2021
1 566
28 févr. 2013 à 14:54
28 févr. 2013 à 14:54
commence par mettre tous tes attributs entre guillemets et utiliser les / pour fermer tes inputs comme ça :
<input type="text" name="realname" size="30" required />
Ores
Messages postés
51
Date d'inscription
mercredi 31 octobre 2012
Statut
Membre
Dernière intervention
28 février 2013
28 févr. 2013 à 15:04
28 févr. 2013 à 15:04
j'ai tout corrigé, j'ai ajouté required comme dans l'exemple, le message part quand même
roptat
Messages postés
276
Date d'inscription
samedi 20 octobre 2012
Statut
Membre
Dernière intervention
26 juillet 2013
77
28 févr. 2013 à 14:36
28 févr. 2013 à 14:36
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.
Ores
Messages postés
51
Date d'inscription
mercredi 31 octobre 2012
Statut
Membre
Dernière intervention
28 février 2013
Modifié par Ores le 28/02/2013 à 14:52
Modifié par Ores le 28/02/2013 à 14:52
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)
roptat
Messages postés
276
Date d'inscription
samedi 20 octobre 2012
Statut
Membre
Dernière intervention
26 juillet 2013
77
Modifié par roptat le 28/02/2013 à 15:01
Modifié par roptat le 28/02/2013 à 15:01
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.
Ores
Messages postés
51
Date d'inscription
mercredi 31 octobre 2012
Statut
Membre
Dernière intervention
28 février 2013
28 févr. 2013 à 15:07
28 févr. 2013 à 15:07
ok, merci beaucoup pour ton aide, je vais laisser comme ça parce que ça me convient, et aussi parce que j'ai rien compris à la suite lol
Ores
Messages postés
51
Date d'inscription
mercredi 31 octobre 2012
Statut
Membre
Dernière intervention
28 février 2013
28 févr. 2013 à 15:18
28 févr. 2013 à 15:18
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"]))