Aller au contenu

Controle d'un formulaire


Sujets conseillés

Posté

Bonjour à tous,

J'ai fait un formulaire, plus exactement, je l'ai amélioré, avec un captcha.

J'ai réussi, avec de l'aide, à pour concilier le contrôle des champs et celui du captcha.

Donc, de ce côté-là, tout va bien.

Par contre, quand un champ obligatoire ou le captcha comporte une erreur, j'ai bien le message d'erreur... mais sur une page blanche.

Voisi le code :Code : PHP - Afficher / masquer les numéros de ligne

	  <?PHP
if ($_SESSION['cryptcode'] == md5($_POST['code']) and (!$_SESSION['cryptreload']))
{
// si les champs sont remplis
if(!empty($_REQUEST['profession']) &&
!empty($_REQUEST['email']) &&
!empty($_REQUEST['sujet']) &&
!empty($_REQUEST['message'])){
echo "Message envoyé.";
unset($_SESSION['cryptreload']);
}
else
echo "<p align='center'><font color='#FF0000'>Erreur, Des champs sont manquants</font></p>";
}
}
else {
echo "<p align='center'><font color='#FF0000'>Erreur, le code est incorrect</font></p>";
$_SESSION['cryptreload']='OUI';
}
?>

Ce que je voudrais, est que le signalement de l'erreur apparaisse sur une nouvelle page du site avec le header, les menus, etc.)

Si cette solution n'est pas possible, il serait bien que l'erreur s'affiche dans un boite js.

Est-ce que vous arrivez à me comprendre ?

Merci de m'apporter la solution à adopter.

Posté

Solution très basique : au lieu de faire echo "ton message d'erreur", tu fais echo "header + message d'erreur + pied de page". Tu peux aussi inclure la page précédente mais en y rajoutant le message d'erreur. Au passage <font color='#FF0000'> , c'est pas bon :nonono:

Posté

Ce que je fais d'habitude, lors de l'affichage d'une page :

  • Avant toute chose, initialiser la session
  • traiter les éventuels formulaires
    • Si des erreurs sont rencontrées, mettre chaque erreur en session ($_SESSION['error'])

    [*] traiter le début du HTML (Doctype, header, menus)

    • Dans celui-ci, j'utilise une fonction de traitement d'erreurs : si la variable $_SESSION['error'] n'est pas vide, j'affiche les messages d'erreur qui y sont insérés, puis je vide la variable

    [*] traiter la suite du HTML normalement

Posté
Solution très basique : au lieu de faire echo "ton message d'erreur", tu fais echo "header + message d'erreur + pied de page". Tu peux aussi inclure la page précédente mais en y rajoutant le message d'erreur. Au passage <font color='#FF0000'> , c'est pas bon :nonono:
Meerci.

Pour c'est un jeu d'enfant, mais je ne suis pas assez calé.

Tu veux m'expliquer davantages ?

Posté
Ce que je fais d'habitude, lors de l'affichage d'une page :

  • Avant toute chose, initialiser la session
  • traiter les éventuels formulaires
    • Si des erreurs sont rencontrées, mettre chaque erreur en session ($_SESSION['error'])

    [*] traiter le début du HTML (Doctype, header, menus)

    • Dans celui-ci, j'utilise une fonction de traitement d'erreurs : si la variable $_SESSION['error'] n'est pas vide, j'affiche les messages d'erreur qui y sont insérés, puis je vide la variable

    [*] traiter la suite du HTML normalement

Merci de ta réponse, mais comme je l'ai dit à Breteuil, je ne suis pas très calé. :wacko:

J'ai bien initialisé la session et je traite ensuite le formulaire.

Jusque là, ça va !

Si un champs ou le code n'est pas rempli, cela engendre bien-sûr une erreur, mais la variable $_SESSION['error'] m'est pas très familière, et j'en suis désolé... alors si pour toi c'est clair comme de l'eau de roche, moi, j'ai une facheuse tendence à être long à percuter, parfois même, pas du tout ! :sick:

Le formulaire que j'ai est vraiment basique. Comme il n'y avait pas de code antispam, j'ai été en chercher un et j'essaie de l'intégrer au formulaire.

Donc ta solution m'a l'air au point, mais de là à tout mettre en oeuvre, hmmm ! :blush:

Si tu voulais m'aider un peu plus, ce serait sympa ;) . Parce qu'avec tout ce que tu m'a dis, là, je suis vraiment largué !

D'ailleurs pour que tu aies un aperçu, clique ici.

Tu verras qu'en validant sans rien saisir, il y aura une boite js signalant une erreur (émail).

Il serait bien que toutes les erreurs aient le même format.

Merci d'avance.

Posté (modifié)

Une page fait récemment, très basique. Première page nouveau_compte.php du formulaire, avec ceci dedans : s'il y a une erreur on l'affiche, sinon on affiche normalement le formulaire vierge

<?php 
if ($e != null)
{
echo $e->getMessage();
}
?>

Et dans la page sur laquelle pointe la première, avec un catch qui capture les erreurs rencontrées.

catch (Exception $e)
{
require_once('nouveau_compte.php');
exit;
}

Modifié par captain_torche
Lorsque tu postes des codes courts, utilise la balise CODE ; la balise CODEBOX n'est à utiliser que dans le cas de codes longs, car elle a une hauteur fixe (captain_torche, modérateur)
Posté

C'est très bien, mais qu'est-ce que Catch ?

C'est la 1ère fois que j'entends parler de ça !

Posté

Je suis un peu overbooké :smartass: là donc je te livre le code de ma page (un peu tronqué) , tu vas comprendre je pense

CODE
normalisation();

//variables abrégées

$email= $_POST['email'];

$identifiant = $_POST['identifiant'];

$pass = $_POST['pass'];

$pass2 = $_POST['pass2'];

//Démarrage de la session

session_start();

// Vérifications formulaires

try

{ //formulaires remplis ?

if (!filled_out($_POST))

{throw new Exception('Vous n\'avez pas rempli tous les champs du formulaire.');

}

//adresse mail valide ?

if (!valid_email($email))

{throw new Exception('Cette adresse mail n\'est pas valide.');

}

//mots de passe identiques ?

if ($pass != $pass2)

{throw new Exception('Les mots de passe ne correspondent pas.');

}

//longueur mot de passe

if (strlen($pass) <6 || strlen($pass) >16)

{throw new Exception('Votre mot de passe doit faire entre 6 et 16 caractères.');

}

//longeur identifiant

if (strlen($identifiant) >16)

{throw new Exception('Votre identifiant doit faire moins de 17 caractères.');

}

// diverses opérations, on //enregistre si tout ok, ....

catch (Exception $e)

{

require_once('nouveau_compte.php');

exit;

}

Posté

Merci pour le script, mais j'ai regardé et tenté de comprendre... j'avoue que je suis vraiment paumé.

Il y a tant de mots que je ne connais pas ??????

Posté

Merci Breteuil, je suis de la vieille école ! Je m'étais arrêté à Php4.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...