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
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

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.
0
roptat Messages postés 275 Date d'inscription samedi 20 octobre 2012 Statut Membre Dernière intervention 26 juillet 2013 77
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
0
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
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" );

}

?>
0
roptat Messages postés 275 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
en effet, change <?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"])) { //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.
0
il vaut mieux faire d'abord un vérification en javascript, ce qui évite d'avoir un traitement serveur(js est interprété sur l'ordinateur client) faisant perdre du temps.
0
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
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é.
0

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 565
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 />
0
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
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"
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
28 févr. 2013 à 14:42
tu as quel navigateur et quelle version ?

ton formulaire ressemble à quoi ?
0
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
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>
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
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 /> 
0
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
j'ai tout corrigé, j'ai ajouté required comme dans l'exemple, le message part quand même
0
roptat Messages postés 275 Date d'inscription samedi 20 octobre 2012 Statut Membre Dernière intervention 26 juillet 2013 77
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 :
<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.
0
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
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)
0
roptat Messages postés 275 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
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.
0
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
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
0
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
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"]))
0