Contrôle de saisie

Eléphant du PHP | 91 Messages

27 juil. 2007, 12:35

Bonjour,

J'ai un formulaire php avec des boutons radio et des champs texte en fonction du choix d'un bouton radio et des champs doit être rempli. Je sais que je dois faire une fonction javascript. Lors de ma saisie, je rentre dedans mais ça ne fait pas ce que je veux car pour n'importe quel bouton radio sélectionné, elle m'affiche mon message d'alerte.
J'espère avoir été assez clair. Voilà mon code.

Ma fonction JS:

Code : Tout sélectionner

function mini(id){ return document.getElementById(id); } function check_field(){ if(mini('Service_sig_forme').value !='Pas de service attitré' && mini('Serv_sig_nom').value == '' || mini('Serv_sig_nom').value == null) { alert('Vous devez saisir un nom de service SIG'); return false; } return true; }

Mon formulaire:
<FORM action="traitement_saisie2.php" method="POST" name="envoi" enctype="multipart/form-data" onsubmit="return check_field()">
<TD><input id="Service_sig_forme" type="radio" name="Service_sig_forme" value="Service à part entière" checked><font face="Verdana" size="1">Un service à part entière</font></TD>
<TD><font face="Verdana" size="1">Nom du service :</font></TD>
<TD><input id="Serv_sig_nom" name="Serv_sig_nom" type="text" size="50" value="dede"></TD>
			
<TD><input id="Service_sig_forme" type="radio" name="Service_sig_forme" value="Service rattaché à un autre service"><font face="Verdana" size="1">Un service rattaché à un autre service</font></TD>

<TD><input id="Service_sig_forme" type="radio" name="Service_sig_forme" value="Pas de service attitré"><font face="Verdana" size="1">Pas de service attitré</font></TD>
Si quelqu'un a une petite idée, merci.

Mammouth du PHP | 19672 Messages

27 juil. 2007, 13:56

Le problème dans ta fonction vient de ce que tu ne tiens pas compte de ce qu'on nomme "la précédence des opérateurs)

Avec une paire de parenthèses et une remise en forme, tu devrais comprendre le principe général :
function check_field(){
    if(
        mini('Service_sig_forme').value !='Pas de service attitré' && 
        (
            mini('Serv_sig_nom').value == '' || 
            mini('Serv_sig_nom').value == null
        )
    )
    {
        alert('Vous devez saisir un nom de service SIG');
        return false;
    }
    return true;
}
En d'autres termes, tu vérifies deux conditions, mais la seconde contient une alternative, soit "vide" soit "null".

Teste déjà comme ça.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 91 Messages

27 juil. 2007, 14:10

merci de ta réponse mais cela ne change rien. Lorsque je sélectionne 'Pas de service attitré' et que je ne remplis pas le champ 'Nom du service', l'alerte me demande toujours de saisir un nom de service. As-tu une autre idée?

Mammouth du PHP | 536 Messages

27 juil. 2007, 14:14

fais un rasisonnement inverse alors, fais plutot
function check_field(){
    if(
        mini('Service_sig_forme').value == 'Pas de service attitré' && 
        (
            mini('Serv_sig_nom').value == '' || 
            mini('Serv_sig_nom').value == null
        )
    )
    {
        return false;
    }
    else {
alert('Vous devez saisir un nom de service SIG');
    return true;
    }
}
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Eléphant du PHP | 91 Messages

27 juil. 2007, 14:19

Ainsi, je ne rentre pas dans le If. Je ne comprends plus rien du tout!! :cry:

Mammouth du PHP | 19672 Messages

27 juil. 2007, 14:25

Il y a un autre problème : il est interdit d'avoir plus d'une fois la même valeur pour un attribut "id" dans une page HTML. Or tes trois boutons radio partagent exactement le même nom.

Corrige en les identifiant Service_sig_forme1, Service_sig_forme2 et Service_sig_forme3 sans modifier la valeur de l'attribut name.

Ensuite, pointe dessus en passant pas le DOM du formulaire : ajoute un attribut id dans ta balise <form>
<FORM action="./" method="POST" name="envoi" id="envoi" enctype="multipart/form-data" onsubmit="return check_field()">
Crée une fonction pour pointer sur les éléments
function form_elt(form, id)
{
    return forms[form].elements[id];
}
Et enfin modifie la fonction de validation:
function check_field(){
    if(
        mini('envoi', 'Service_sig_forme3').checked == true && 
        (
            mini('envoi', 'Serv_sig_nom').value == '' || 
            mini('envoi', 'Serv_sig_nom').value == null
        )
    )
    {
        alert('Vous devez saisir un nom de service SIG');
        return false;
    }
    return true;
}
Re-teste ça... :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 536 Messages

27 juil. 2007, 14:28

Cyrano, il autait été possible de mettre en id envoi[]
Modifié en dernier par béka le 27 juil. 2007, 14:33, modifié 1 fois.
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Eléphant du PHP | 91 Messages

27 juil. 2007, 14:30

Ok ça marche très bien sans le Id dans envoi.
Merci beaucoup à tous les 2.

Mammouth du PHP | 536 Messages

27 juil. 2007, 14:37

ben j'ai pas fais grand chose, mais de rien.

PS, pense au tag Mettre résolu. :wink:
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!