Page 1 sur 1

[resolu]problème de checked avec les chekbox

Posté : 31 août 2005, 12:36
par gesualda
Bonjour

voila, mon problème est simple, lorsque le formulaire est envoyé, j'aimerai que la case du chekbox reste coché. J'ai donc construit ce script pour tester, ca me ressort bien les valeurs de chaque case et les affiches, mais la chekbox ne reste pas coché, pourriez vous m'expliquer pourquoi ?

Merci

Code : Tout sélectionner

<form action="" method="post"> <input type="checkbox" name="musiq[]" value="Musique"<?php if(isset($_POST['musiq[]']) && $_POST['musiq[]'] == 'Musique' ){echo 'checked="checked"';} ?> >Musique<br> <input type="checkbox" name="musiq[]" value="Musique_2"<?php if(isset($_POST['musiq[]']) && $_POST['musiq[]'] == 'Musique_2' ){echo 'checked="checked"';} ?>>Musique 2<br> <input type="checkbox" name="musiq[]" value="Musique_3"<?php if(isset($_POST['musiq[]']) && $_POST['musiq[]'] == 'Musique_3' ){echo 'checked="checked"';} ?>>Musique 3<br> <input type="checkbox" name="musiq[]" value="Musique_4"<?php if(isset($_POST['musiq[]']) && $_POST['musiq[]'] == 'Musique_4' ){echo 'checked="checked"';} ?>>Musique 4<br> <input type="submit" name="ok" value="ok"> </form>
<?php
$musiq = $_POST['musiq'];
if(isset($_POST['ok'])){
if(empty($musiq)){
echo "veuillez cocher une case";
}
else{
foreach($musiq as $num => $casecoche)	
echo $num.' : '. $casecoche."<br>";
}
}
?>

Posté : 31 août 2005, 12:52
par HD
y a un truc que je ne comprend pas : si le formulaire est envoyé et ses resultats recupérés, pourquoi la case du chekbox devrait rester cochée ?

Posté : 31 août 2005, 12:57
par ouckileou
parceque tu ne met pas d'indice de tableau dans tes tests :
&& $_POST['musiq[]'] == 'Musique_3' 
si tu ne mets pas d'indice dans l'attribut name, le tableau sera indexé automatiquement
par contre à la récupération tu as musiq[0], musqi[1]... etc

regarde cette fonction pour vérifier simplement si une valeur est contenue dans un tableau : in_array()

Posté : 31 août 2005, 13:54
par gesualda
Merci de vos réponse,

Pour HD,
exact, c'est pas très logique, mais comme je le disais, j'ai fait ce formulaire pour tester, car en fait, il entrera dans une serie de controle d'un autre formulaire, donc au lieu que le client remplissage à nouveau tout, il reste coché.(dans le cas du chekbox)

ouckileou, j'ai mis une valeur, et ca marche pas
name="musiq[0]" value="Musique"<?php if(isset($_POST['musiq[0]']) && $_POST['musiq[0]'] == 0 ){echo 'checked="checked"';} ?>
Désolé, j'ai regardé le lien et essaye de comprendre, mais je reconnais que j'ai encore beaucoup à saisir car j'ai ajouté une valeur et fonctionne pas

Merci de votre aide

Posté : 31 août 2005, 13:59
par ouckileou
tu testes si musqi[0] vaut 0, mais si la case est cochée musqi[0] contiendra "Musique"
donc forcément le test n'est jamais vrai

essaye comme ça :
<form action="" method="post">
<input type="checkbox" name="musiq[]" value="Musique"
<?php if(isset($_POST['musiq']) && in_array('Musique', $_POST['musiq'])) {
   echo 'checked="checked"';
} ?> >Musique<br>
<input type="submit" name="ok" value="ok"> 
</form>

Posté : 31 août 2005, 14:01
par truc
Pour te simplifier la vie, si tu utilise des checkbox, tu peux donner des noms différents a chaque bouton dc pas besoin d'array... et ensuite faire un simple "if" sur la valeur

Posté : 31 août 2005, 14:03
par gesualda
oui, je sais ca ca fontionne, je l'ai testé, mais bon c'est peut pas comme ca que je vais faire avancer mes connaissances
:D :oops:

Posté : 31 août 2005, 14:08
par ouckileou
et personnellement je ne vois pas en quoi donner des noms différents à des checkbox simplifie la vie, au contraire

un groupe de checkbox concerne une même variable, avec plusieurs valeurs possibles

donc le tableau est tout indiqué et très pratique à utiliser :)

Posté : 31 août 2005, 14:15
par truc
j'ai pas dis le contraire ... a chacun sa façon de faire.
Perso qd jutilise un array => <input type="radio" ...

Posté : 31 août 2005, 14:19
par gesualda
Bon avec tout ca, moi j'ai toujours pas compris ou et comment mettre un indice, car j'en suis qu'au debut avec mes chekbox... :lol:

merci pour le débat

Posté : 31 août 2005, 14:26
par ouckileou
tu as essayé avec l'exemple que je t'ai donné ?

juste avant le débat :lol:

Posté : 31 août 2005, 14:33
par gesualda
Yep, c'est bon, ca marche pour les coches. j'ai fait:

Code : Tout sélectionner

name="musiq[1]" value="Musique_1"
if(isset($musiq[1])){echo 'checked="checked"';} 
Voila un problème de résolu.

Merci de votre aide, et je pense que j'en aurai encore besoin plus tard.

Bonne après midi