Problème de validation de champs

Petit nouveau ! | 3 Messages

28 avr. 2005, 16:30

Bonjour.

Dans mon formulaire HTML, j'ai créé 3 champs qui s'ouvrent en liste déroulante (date d'emprunt, référence livres et quantité).
Ces champs s'afficheront dynamiquement, aussi souvent que j'ai de références de livres empruntés.

Je n'arrive pas à valider ces champs (à récupérer les bonnes valeurs pour les champs appropriés) et à y faire les contrôles nécessaires (aucun champ ne doit être vide).
Ce que je récupère est partiel et pas toujours cohérent.

Pouvez-vous m'aider ?

Merci.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

28 avr. 2005, 16:31

Est-ce que tu peux nous montrer ton code svp !!!
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Petit nouveau ! | 3 Messages

28 avr. 2005, 16:36

Le code est trop long pour être affiché ici, mais j'ai essayé d'indicer mes champs pour les valider par la suite.

Est-ce la bonne méthode ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

28 avr. 2005, 16:41

En fait, je pensais que tu n'avais pas indicé tes champs !!! Mais oui, c'est la bonne méthode !!!!

Est-ce que tu propose un champs vide au départ ou pas ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 19672 Messages

28 avr. 2005, 16:59

Bon, on respire un grand coup et on prend des notes...

Pour valider des champs dans un formulaire, la première chose à faire, c'est de récupérer les valeurs saisies par l'internaute. Pour celà, on va se servir d'une variable qui les garde en stock, une super-globale: nous avons le choix : $_GET ou $_POST . Le choix dépend de la valeur qu'on aura mis dans l'attribut "method" de notre balise <form>

Par soucis de pas embrouiller la manoeuvre, nous utiliserons $_POST pour ce qui suit. Cette variable est un tableau indexé et les index sont les nom des zones de saisie du formulaire. Ainsi, si j'ai un <input type="text" name="nom" />, je vais retrouver la valeur saisie dans $_POST['nom']

Si vous avez correctement suivi jusqu'ici, il nous reste à vérifier ce qu'il y a dedans: Mais la première chose à faire pour éviter des messages d'erreur, c'est de vérifier si le bouton a été cliqué. Ce bouton (<input type="submit" >) doit également avoir un attribut "name" : pour l'instant, nous le nommerons "envoi". Donc :
<?php
if(isset($_POST['envoi']))
{
    /* Le bouton a été cliqué, on passe à la suite */
    /* On crée des variables qu'on initialise avec les valeurs envoyées */
    $nom = $_POST['nom'];
    /* On veut vérifier que cette case du formulaire n'est pas restée vide */
    if($nom == "")
    {
        echo("<p>Vous devez mentionner votre nom.</p>\n");
        /* à cet endroit, on peut afficher à nouveau le formulaire. */
    }
}
else
{
    /* Le bouton n'a pas été cliqué, on pourrait simplement afficher le formulaire de base */
}
Voilà, c'est la base élémentaire, un exemple beaucoup plus complet est à télécharger ICI
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 3 Messages

28 avr. 2005, 18:10

Merci.

Mais je sais déjà faire ça :wink:

J'aimerais un exemple dynamique avec des indices :

dans mon cas il ne s'agit pas de valider plusieurs champs distincts, mais plusieurs champs identiques.
Par exemple avec mes champs date d'emprunt, référence livre et quantité, je peux avoir un emprunteur qui emprunte 3 livres de maths différents (admettons 4 livres de maths. spé, 2 de meths financières et 6 de mathématiques générales). Il me faudra alors faire apparaitre et valider les 3 lignes suivantes :

nombre d'exemplaire : liste déroulante dynamique (ici 3)

date d'emprunt référence livre quantité

25/5/05 maths fi 4
26/5/05 maths spé 2
27/5/05 maths générales 6