Bonjour à tous,

J'affiche un formulaire contenant plusieurs checkbox, et j'ai besoin de récupérer leur valeur pour les insérer dans une base de données.

Celles-ci étant classable en catégories distinctes, j'utilise un array pour le nom des checkbox, et je récupère via un petit script PHP.

Seulement, quelques unes de mes checkbox doivent être obligatoirement cochées, non pas comme un formulaire ou,
par exemple : "Choisissez vos 3 marques de voiture préférées" et ou on ne peut pas valider le formulaire si au moins 3 choix ne sont pas cochés dans la liste,
mais obligatoirement cochées dans le sens ou quand l'utilisateur arrive sur la page, la case est pré-cochée et il ne peut pas la décocher (ne me demandez pas pourquoi je dois faire ça, c'est pour m'éviter de coder quelque chose de beaucoup plus embêtant et qui arriverait au même résultat).

Pour réussir cela, je voudrais éviter de passer par du javascript, sauf si j'y suis vraiment obligé.

J'ai donc opté pour une solution de type disabled="true" dans les attributs des checkbox, la grisant et nous empêchant donc de cliquer.

Seulement...quand on fait cela, la case n'est plus prise en compte dans le array des checkbox !

Voici un bout de code qui sera plus parlant (le code est loin d'être valide W3C, mais un simple copier-coller et il fonctionne ^^) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 
<?php
	// This is to collect box array value as global_variables is set off in PHP5 by default 
 
	$box=$_POST['box'];
 
	var_dump($box);
	while (list ($key,$val) = @each ($box)) 
	{ 
		echo "$val," ; 
	} 
 
	echo "<form method=post action=''>" ; 
	echo "<table border='0' cellspacing='0' style='border-collapse: collapse' width='100' > 
			<tr bgcolor='#ffffff'> 
				<td width='25%'><input type=checkbox name=box[] value='John' checked disabled></td> 
				<td width='25%'>&nbsp;John</td> 
				<td width='25%'><input type=checkbox name=box[] value='Mike'></td> 
				<td width='25%'>&nbsp;Mike</td> 
				<td width='25%'><input type=checkbox name=box[] value='Rone'></td> 
				<td width='25%'>&nbsp;Rone</td> 
			</tr> 
			<tr bgcolor='#f1f1f1'> 
				<td width='25%'><input type=checkbox name=box[] value='Mathew'></td> 
				<td width='25%'>&nbsp;Mathew</td> 
				<td width='25%'><input type=checkbox name=box[] value='Reid'></td> 
				<td width='25%'>&nbsp;Reid</td> 
				<td width='25%'><input type=checkbox name=box[] value='Simon'></td> 
				<td width='25%'>&nbsp;Simon</td> 
			</tr> 

			<tr><td colspan =6 align=center><input type=submit value=Select></form></td></tr> 
		</table>"; 
?>
Comme vous pouvez le voir à cette ligne :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
<td width='25%'><input type=checkbox name=box[] value='John' checked disabled></td>
La case est validée/grisée, mais elle n'est jamais prise en compte dans le array, car sa valeur n'est tout simplement pas envoyée, du au disabled.

Mon problème est : Comment contourner cela ? comment rendre une case bloquée sur "cochée", sans pouvoir changer son état, et l'envoyer ?

J'ai tenté avec "readonly", on peut modifier, et "required" ne fait rien.

Merci d'avance pour vos réponses, et bonne soirée à tous