Rendre un champ obligatoire si un bouton est coché

Frystie01 Messages postés 14 Date d'inscription jeudi 2 février 2006 Statut Membre Dernière intervention 23 septembre 2009 - 16 juin 2009 à 15:01
Frystie01 Messages postés 14 Date d'inscription jeudi 2 février 2006 Statut Membre Dernière intervention 23 septembre 2009 - 23 juin 2009 à 08:07
Bonjour,
j'aimerais rendre un champ obligatoire uniquement si un bouton est coché.
J'ai fait plusieurs essais mais il y a toujours un truc qui bloque : soit le formulaire s'envoie même si le champ n'est pas remplit, soit il ne s'envoie pas même si tout est OK...
Je commence à désespérer, je ne trouve pas non plus ma solution sur les forums....
Une idée ?
Merci d'avance.
<cite></cite>

10 réponses

TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
16 juin 2009 à 15:15
Salut,

Pour commencer tu ne pourras jamais forcer un client a ce genre de conditions, il te faudra toujours une vérification côté serveur pour la gestion de ce genre d'erreur. Après, tu peux faire un petit contrôle côté client en javascript qui te permet de désactiver le bouton d'envie du formulaire tant que tous les champs obligatoires ne sont pas remplis.
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
16 juin 2009 à 18:54
Salut,

... et puis pour pouvoir t'aider il faudrait fournir ce que tu as déjà tenté.

Kohntark -
0
Frystie01 Messages postés 14 Date d'inscription jeudi 2 février 2006 Statut Membre Dernière intervention 23 septembre 2009
17 juin 2009 à 10:30
J'ai peut-être pas été très clair désolé,
donc voici mon code
(sachant que mon bouton est "elect1" avec pour valeur "Oui je veux plus de 1000W/10m2" et le champs à remplir "desc"

if($_POST["elect1"]=="Oui je veux plus de 1000W/10m2"){}
elseif (trim($desc)=="")
{
        echo "

ERREUR : VEUILLEZ COMPLETER INDIQUER LE DETAIL DE VOS APPAREILS ELECTRIQUES SVP";?>
       
[javascript:history.go(-1) Retour au formulaire]

<?
}

Le problème c'est que ce code ne fait qu'obliger à compléter le champ "desc", je voudrais qu'il soit obligatoire que si le bouton "elect1" est coché.
Le but c'est que si les gens demandent plus d'électricité dans leur stand ils doivent décrire leurs appareils électriques qui seront utilisés... Sinon ce n'est pas la peine...

_______________________________________________
MYD-C . <cite>myd-c.over-blog.com</cite>
0
roymatthieu Messages postés 112 Date d'inscription jeudi 31 août 2006 Statut Membre Dernière intervention 3 février 2011 1
18 juin 2009 à 16:20
Salut,

Tu utilises un ESLEIF, ce qui dans ton cas n'est pas bon.

C'est pas bon car si une condition du jeu de if  elseif est respectée, il ne vérifie plus celle qui suive.

Je te traduit ton code :

if($_POST["elect1"]=="Oui je veux plus de 1000W/10m2"){}
elseif (trim($desc)=="")
{
       
echo "

ERREUR : VEUILLEZ
COMPLETER INDIQUER LE DETAIL DE VOS APPAREILS ELECTRIQUES
SVP";?>
       
[javascript:history.go(-1) Retour au formulaire]

<?
}

Si $_POST["elect1"]=="Oui je veux plus de 1000W/10m2" -> On ne fait rien.

Sinon :

Alors si trim($desc)=="" -> On affiche ton "echo"

Essaye ça :

if($_POST["elect1"]=="Oui je veux plus de 1000W/10m2"){

if (trim($desc)=="")
{
       
echo "

ERREUR : VEUILLEZ
COMPLETER INDIQUER LE DETAIL DE VOS APPAREILS ELECTRIQUES
SVP";?>
       
[javascript:history.go(-1) Retour au formulaire]

<?
}
}

J'espère avoir compris ton problème et avoir su t'aider.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Frystie01 Messages postés 14 Date d'inscription jeudi 2 février 2006 Statut Membre Dernière intervention 23 septembre 2009
19 juin 2009 à 13:00
Merci de ta réponse,
j'ai essayé mais ça ne marche toujours pas, soit le formulaire s'envoie même si le champ n'est pas remplit soit j'arrive sur une page blanche...

Peut-être faut il mettre un autre code pour dire ce qu'il doit faire si la case n'est pas coché avec
if($_POST["elect1"]==""){.....
mais ça n'a pas l'air de marcher non plus...
_______________________________________________
MYD-C . <cite>myd-c.over-blog.com</cite>
0
Frystie01 Messages postés 14 Date d'inscription jeudi 2 février 2006 Statut Membre Dernière intervention 23 septembre 2009
19 juin 2009 à 14:26
Ce qui marche le mieux c'est ça :

if($_POST["elect1"]=="Oui je veux plus de 1000W/10m2"){

    if (trim($desc)=="")
    {
            echo "

ERREUR ";?>
           
[javascript:history.go(-1) Retour au formulaire]

<?
    }

}

Là si la case n'est pas cochée pas de souci, il s'envoie,
si elle est cochée mais que le champs n'est pas rempli : pas de souci il ne s'envoie pas
Par contre si la case est coché et que le champ l'est aussi : j'arrive sur une page blanche alors que le message devrait s'envoyer.
Que faire ???

_______________________________________________
MYD-C . <cite>myd-c.over-blog.com</cite>
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
19 juin 2009 à 16:21
Je ne vois pas la différence avec le code de [../auteur/ROYMATTHIEU/850380.aspx roymatthieu] (hormis le echo) ???

Pour ta question il faudrait voir le reste du code. C'est un mail que tu envoies ?

Comme l'a évoqué TychoBrahe, que tu ne procèdes pas de la bonne manière, tu devrais avoir ce schéma :

page formulaire
=> contrôle par un script javascript que les données sont correctement remplies
  => pas OK -> message "erreur, veuillez remplir tous les champs" Pas d'envoi du formulaire
  => OK -> soumission à la page traitement

page traitement :
=> contrôle et sécurisation des données reçues
if($_POST["elect1"] == "Oui je veux plus de 1000W/10m2" && !empty(trim($desc)) && strip_tags($_POST['autres_données']) && [autres données] ...) {
 
// envoi du mail

} else { // si ce else est exécuté c'est que qq chose n'est pas normal (tentative d'intrusion, de spam, etc ...)
  // mail au webmaster pour information
}

NB : ou et comment est définie $desc ?

Cordialement,

Kohntark -
0
Frystie01 Messages postés 14 Date d'inscription jeudi 2 février 2006 Statut Membre Dernière intervention 23 septembre 2009
22 juin 2009 à 11:33
Donc je devrais avoir le message d'erreur et l'envoi du mail direcetement sur mon formulaire en html,
et mes contrôles sur mon autre page en php.
Le problème c'est que j'y connais rien javascript lol
Pour "desc", et même chose pour les autres champs, il est définit par :
$desc= $_POST["desc"];

J'ai plusieurs code de ce style là pour contrôler :
elseif (trim($nom) =="")
{
        echo "

ERREUR : VOTRE NOM EST VIDE";?>
       
[javascript:history.go(-1) Retour au formulaire]

<?
}

ça pour envoyer :
else {
//Envoie le message
mail($destinataire,$objet2,$message,$from);

echo "

Votre message a bien &eacute;t&eacute; envoy&eacute;";

}

Tout ça marchait tout bien jusqu'à ce double contrôle...
Je ne sais pas si quelqu'un a déjà quelque chose de fait dans ce style que je vois et surtout comprenne mieux parce que vous l'aurez compris je débute et j'ai beaucoup de mal...

_______________________________________________
MYD-C . <cite>myd-c.over-blog.com</cite>
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
22 juin 2009 à 20:45
Donc je devrais avoir le message d'erreur et l'envoi du mail direcetement sur mon formulaire en html,
et mes contrôles sur mon autre page en php.

= >
Non !!
J'ai l'impression qu'il faut rappeler le côté client / serveur d'une requête http :
Dans ta page HTML qui contient le formulaire tu contrôles que les champs soient correctement remplis, si ils ne le sont pas tu informes l'utilisateur (par un alert par exemple)  => c'est côté client que ça se passe (HTML, CSS, javascript, ...)
Il n'y a donc pas soumission (d'envoi) du formulaire (cad client => serveur)

Si les champs sont OK le formulaire est soumis au serveur. Ce dernier effectue un contrôle des données postées. Si elles ne sont pas correctes c'est que l'utilisateur a tenté d'envoyer une requête sans passer par le formulaire, ça peut être une tentative de piratage (donc envoie d'un mail à l'admin, bannissement de l'ip, ....)
Ensuite seulement tu envoies le mail.
Un mail ne peut pas être envoyé côté client (javascript) mais uniquement côté serveur (php)

Tout ça marchait tout bien jusqu'à ce double contrôle...
=>
correction :o) ... semblait bien marcher. Je dis ça car tu t'exposes à de très sérieux problèmes de sécurité et il est très facile d'utiliser ton formulaire pour envoyer des mails sous le nom "tartanpion" ou "frystle" à des milliers de personnes (fais une recherche sur "php mail injection headers")

Je te laisse chercher également pour l'exemple demandé car il y en a des centaines de milliers sur le net.

Cordialement,

Kohntark -
0
Frystie01 Messages postés 14 Date d'inscription jeudi 2 février 2006 Statut Membre Dernière intervention 23 septembre 2009
23 juin 2009 à 08:07
Merci de ta réponse,
je vais tout reprendre depuis le début et essayer de comprendre.
Ah ça des exemples y en a mais impossible de trouver un exemple avec ce fameux champ obligatoire si case cochée. Je regarde peut-être pas où il faut.
Merci quand même.
_______________________________________________
MYD-C . <cite>myd-c.over-blog.com</cite>
0
Rejoignez-nous