Champs obligatoire dans un formulaire

Fermé
x-timas Messages postés 124 Date d'inscription vendredi 7 mars 2008 Statut Membre Dernière intervention 17 décembre 2010 - 13 août 2009 à 16:44
x-timas Messages postés 124 Date d'inscription vendredi 7 mars 2008 Statut Membre Dernière intervention 17 décembre 2010 - 13 août 2009 à 17:22
Bonjour,

je ne suis pas très expérimente en programmation web mais j'ai une bonne idée sur le sujet. Je bloque un petit peu sur problème.

En fait je construit depuis une base de donnée un questionnaire, chaque question contient un booleen 'obligatoire' qui prend '1' si on veut que la question soit obligatoire.

En soumettant les réponses je dois si les champs obligatoire sont remplis ou pas, classique en javascript... Le problème c'est que je ne sais pas comment m'y prendre de façon dynamique. Je veux dire les question changent souvent et c'est moi qui construit le formulaire via php.
J'ai pensé à des balise hidden avec un id que j'incrémente à chaque fois que je trouve une question obligatoire mais j'ignore comment faire passer toute les valeurs relatives à cette question à ma fonction (sous forme de tableau peut je ne sais pas).

Quelqu'un a fait un truc ui ressemble à ça? Forcément...

Aidez moi s'il vous plaît. I'am running out of time

<table class="afficher_sondage">
<form method="post" name="apercu_sondage" onsubmit="return veriform_champ_oblig_sondage()">
	<input type="hidden" name="numero_page" value="<?php echo $_POST['numero_page']++;?>" />
		<?php
			foreach($questions_pp as $cle=>$q){
				foreach($q as $key=>$data){ //on parcout chaque question à part 
					echo "<tr style=\"text-align:center\">".$data['titre_q'];
					if($data['obligatoire'] == "1"){echo "<input type=hidden id ????/>"}
					echo "</tr>";
						
				}
			}
		?>
	</form>
</table>

4 réponses

Passarinho44 Messages postés 963 Date d'inscription mercredi 28 mai 2008 Statut Contributeur Dernière intervention 13 juin 2012 132
13 août 2009 à 16:58
Et bien comme id je lui donnerai le nom du champ texte de la réponse avec un 1 s'il est obligatoire et un 0 sinon par exemple nom__1 si le nom est obligatoire et prenom__0 si le prénom est pas obligatoire.

Ensuite tu récupères tous les champ avec getElementsByTagName('input');
Tu parcours les éléments et à chaque fois, grace au split, tu coupes le nom de l'élément au niveau du __
S'il n'y a pas de __, c'est un champ texte, sinon tu regarde ce qu'il y a après (si c'est un 0 ou un 1)

Et si c'est un 1, tu vérifies que le champ ayant ce nom n'est pas vide.


Il y a surement plus simple mais je pense que tu pourras t'en sortir comme ça...
0
jeangilles Messages postés 816 Date d'inscription samedi 21 juin 2008 Statut Membre Dernière intervention 17 juillet 2012 185
13 août 2009 à 17:08
Ou sinon tu rajoutes une class à chaque champs obligatoire, et tu récupère la liste des champs obligatoires avec un getElementsByClassName
0
x-timas Messages postés 124 Date d'inscription vendredi 7 mars 2008 Statut Membre Dernière intervention 17 décembre 2010 1
13 août 2009 à 17:22
Je déconseille l'utilisation de getElementsByClassName()

Elle n'est pas supporté par IE et faudra la réimplementer. Sinon je ne voit pas trop l'idée, regarde mon dernier message
0
Passarinho44 Messages postés 963 Date d'inscription mercredi 28 mai 2008 Statut Contributeur Dernière intervention 13 juin 2012 132
13 août 2009 à 17:11
Je ne connaissais pas cette propriété.
C'est vrai que c'est BEAUCOUP plus simple! =)

Et c'est une propriété très pratique, je vais essayer de m'en souvenir ! =)
0
x-timas Messages postés 124 Date d'inscription vendredi 7 mars 2008 Statut Membre Dernière intervention 17 décembre 2010 1
13 août 2009 à 17:19
Bien, on commence à trouver une piste:

voila ce que j'ai ajouté dans mon code: on fait je test le type de la question pour savoir le genre de champs que je dois mettre.

switch ($q['type']){
	case 'text1':
	echo "<input name=\"la_reponse[".$q['id_question']."][]"\" type=\"text\" />";
	break;
								
	case 'text2':
						
	break;
								
	case 'textarea':
	echo "<textarea name=\"la_reponse[".$q['id_question']."][] ></textarea>";
	break;
								
	case 'radio':
								
	break;
								
	case 'checkbox':
...


Le $_POST['la_reponse'] aura comme clés les id des question pour que je puisse associer à chaque quetion sa réponse.
Pour ce que tu m'a dit, je met le champs input pour la vérification à chaque fois même si la question n'est pas obligatoire?

Par contre que diriez vous de cette solution, si c'est faisable ou pas je veux dire:

1. a chaque fois que je trouve une question obligatoire, je concatène l'id de la question dans une chaine de caratère avec comme séparateur un "__"

2. à la fin de la boucle qui me parcourt toute les question je place un input hidden avec comme id la chaine que j'ai construit au fur et à mesure

3. dans ma fonction js je split les champs et je recherche les champs de chaque id, puisque je met l'id des question dans le name (
la_reponse[".$q['id_question']."][]
)

Par exemple si les question d'id 56 et 18 sont obligatoire j'aurait ma chaine "56__18"
Et puis je regarde les valeurs qui sont dans la_reponse?
0