Page 1 sur 1

Valider un formulaire pour... créatif !

Posté : 16 sept. 2006, 18:46
par Romarick
Bonjour,

Je travaille à la réalisation d'un formulaire.

Sur la page "a", le visiteur complète les champs. La page "b" récapitule la saisie et affiche les erreurs éventuelles.

Pour afficher les erreurs éventuelles, j'ai codé des fonctions. Ainsi, par exemple, pour vérifier que le prénom est complété, j'utilise la syntaxe suivante :
function prenomvide()
{
if(empty($_SESSION['prenom']))
echo erreur_prenom_vide;
}
Pour un nom vide, même traitement :
function nomvide()
{
if(empty($_SESSION['nom']))
echo erreur_nom_vide;
}
Ces fonctions sont incluses dans un fichier externe.

Mon souci est le suivant :
- je voudrai bloquer la page "b" tant que le visiteur n'a pas résolu les problèmes signalés.

Ainsi ai-je pensé utiliser un syntaxe comme (je vais l'écrire en français) "si le prénom est vide... sinon si le nom est vide..., rester sur la page, sinon rediriger" dans une deuxième page externe.

Le souci avec cette option est que ça m'oblige à ressaisir mes fonctions en imbriquant des elseif. De plus, je ne suis pas sûr qu'il soit intelligent de demander au serveur deux fois le même travail !

Pourrai-je arriver plus simplement au même résultat, puisque mes fonctions ont déjà analysé et notifié les erreurs.

Merci pour votre aide, en espérant avoir été clair.

Cordialement,

Romarick[/php]

Posté : 16 sept. 2006, 19:03
par Aureusms
Tu peux faire dans ta page b:

if (!isset($_POST["nom"] or $_POST["nom"] == '')) {
$_SESSION["erreur"] = pas de nom rentré;
die(header("location=page a"));
}

comme çà avec tes variables de session tu peux mettre un message dans ta page a sans que b soit lancé (fonction die). Deux contrainte : session_start() obligatoire (sinon pas de variable de session et les header doivent être lancé avant toute sortie HTML.

Posté : 16 sept. 2006, 19:22
par Cyrano
Pour t'inspirer, regarde ce sujet dans la FAQ, le formulaire fonctionne sur une page unique au lieu de deux, mais le principe est sensiblement le même.