[resolu]problème de checked avec les chekbox

Eléphant du PHP | 227 Messages

31 août 2005, 12:36

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>";
}
}
?>
Modifié en dernier par gesualda le 31 août 2005, 14:33, modifié 1 fois.

HD
Mammouth du PHP | 1181 Messages

31 août 2005, 12:52

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 ?

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

31 août 2005, 12:57

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()

Eléphant du PHP | 227 Messages

31 août 2005, 13:54

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

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

31 août 2005, 13:59

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>

truc
Invité n'ayant pas de compte PHPfrance

31 août 2005, 14:01

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

Eléphant du PHP | 227 Messages

31 août 2005, 14:03

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:

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

31 août 2005, 14:08

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 :)

truc
Invité n'ayant pas de compte PHPfrance

31 août 2005, 14:15

j'ai pas dis le contraire ... a chacun sa façon de faire.
Perso qd jutilise un array => <input type="radio" ...

Eléphant du PHP | 227 Messages

31 août 2005, 14:19

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

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

31 août 2005, 14:26

tu as essayé avec l'exemple que je t'ai donné ?

juste avant le débat :lol:

Eléphant du PHP | 227 Messages

31 août 2005, 14:33

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