Accueil > Docs > Comment rendre obligatoire un champ de formulaire

Comment rendre obligatoire un champ de formulaire

mardi 1er juin 2010, par b_b

Il y a quelques temps lors d’un Apéro SPIP, Jean-Marie me demandait :

Comment obliger les visiteurs à remplir le champ nom du formulaire de forum ?

On pourrait surcharger le fichier squelettes-dist/formulaires/forum.php mais ce n’est pas une solution pérenne, car il faudrait le mettre à jour à chaque modification du fichier orignal fourni par SPIP.

Pour faire les choses proprement, on va utiliser le pipeline formulaire_verifier pour insérer notre vérification supplémentaire dans le formulaire de forum.

Ci-dessous, le code à coller dans config/mes_options.php :

// on ajoute notre fonction dans le pipeline de verification des formulaires
// http://programmer.spip.org/Qu-est-ce-qu-un-pipeline
$GLOBALS['spip_pipeline']['formulaire_verifier'] .= '|nom_obligatoire';

// la fonction qui verifie que le nom n'est pas vide
function nom_obligatoire($flux){
	$form = $flux['args']['form'];
	if ($form=='forum'){
		if (!sinon($GLOBALS['visiteur_session']['nom'],$GLOBALS['visiteur_session']['session_nom'])){
			$flux['data']['message_erreur'] .= _T('nom_obligatoire');
			$flux['data']['session_nom'] = _T('nom_obligatoire');
			unset($flux['data']['previsu']);
		}
	}
	return $flux;
}

Il nous reste à définir la chaîne de langue nom_obligatoire dans un fichier
squelettes/local_fr.php et hop "ça poutre" ;)

Messages

  • merci de l’astuce, j’ai testé mais ça ne marche pas ?? (spip 2.1)
    sinon pour rendre l’email obligatoire mais pas le nom on fait comment ?

    @+

  • Oups, il y avait une petite coquille, j’ai corrigé le code et cette fois ça fonctionne bien avec SPIP 2.1.

    Pour tester la présence de l’email il suffit de remplacer :

    sinon($GLOBALS['visiteur_session']['nom'],$GLOBALS['visiteur_session']['session_nom'])

    par :

    sinon($GLOBALS['visiteur_session']['email'],$GLOBALS['visiteur_session']['session_email'])

    ++

  • Ouais, ça poutre ! Merci pour le tuyaux...

  • merci ça marche très bien, par contre comment indiquer que le CSS doit mettre le champs nom ou email en cause soit rouge ??

    @+

  • Bonjour,

    l’astuce est sympathique mais il semblerait quand même qu’une faille embêtante existe au sein du formulaire de base.

    L’explication par l’exemple, on peut injecter du code via le fomulaire.

  • Salut, oui on peut entrer du html dans les champs des formulaires de SPIP (et pas seulement celui des forums). Ce n’est pas une faille mais une fonctionnalité :p

    On peut bien sûr se poser la question de la validité ou de l’intérêt d’une telle fonctionnalité (on a déjà discuté de l’éventualité d’interdire tout code html dans les formulaires de forum à l’aide du plugin nospam). N’hésite pas à venir en discuter sur la liste spip-dev ou spip-zone.

    ++

  • Bonjour,

    merci pour la réponse :), j’avoue ne pas avoir trouvé de doc spécifique sur la théorie qui se cache derrière le formulaire de forum, de même j’ai été plutôt déconcerté par la construction du formulaire puisque la partie html prévoit une gestion assez poussée des forums, toutes les span de récupération des erreurs etc. étant présentes. Pourtant la partie php "s’arrête en chemin" lorsqu’elle s’attaque à la partie vérifier, par exemple la syntaxe de l’email optionnelle n’est pas filtrée et de base aucun message d’erreur n’est renvoyé.

    Si tu as un lien sur le sujet je suis plus que preneur ;)

    @+

  • Salut, l’email optionnel n’est pas vérifié car il est justement...optionnel ;) Tu peux t’inspirer du code que je donne dans cet article pour ajouter une vérification sur l’email à l’aide de la fonction email_valide() de SPIP.

    ++

  • Bonjour,
    je comprends bien que ces champs ne sont pas traités car ils sont optionnels, cependant je vois plutôt des champs optionniels comme des champs que l’utilisateur peut remplir ou laisser vide, mais cela n’implique pas que les données saisies si ce dernier choisit de les saisir ne soient pas traitées.

    Evidemment c’est une question de point de vue :]

  • haaa ! Bien bien...

    Merci b_b !

    ¨Placé ici : http://forum.spip.org/fr_231904.html

    (moi j’aime bien qu’on puisse utiliser le html :-p)
  • Ca répond au besoin, mais c’est trop de code. A la réflexion ce serait peut-être pas mal d’avoir la possibilité de déclarer "obligatoire" n’importe quel champ de n’importe quel CVT avec une technique déclarative toute simple, dans le charger() ou dans le squelette du formulaire ?

  • Bonjour,
    J’utilise votre astuce mais j’ai quelques utilisateurs qui me remontent que cela ne fonctionnent pas. Car malgré la présence d’un pseudo, le formulaire le demande toujours.
    Le problème est uniquement pour certain utilisateur d’internet-explorer...
    Mais je n’arrive pas à reproduire ce type de problème sur mon PC...

  • les plus dure pb sont se qu’on ne peut pas reproduire !

  • Pour information, le Couteau Suisse gère désormais le pipeline formulaire_verifier pour sa lame "Pas de forums anonymes" et utilise jQuery pour la cosmétique et les mentions "(obligatoire)" :

    http://zone.spip.org/trac/spip-zone/changeset/71880

Un message, un commentaire ?

Qui êtes-vous ?
Votre message

Ce formulaire accepte les raccourcis SPIP [->url] {{gras}} {italique} <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.