Insérer une checkbox speciale dans while

Fermé
thomthom - 3 oct. 2011 à 22:36
 thomthom - 18 oct. 2011 à 22:43
Bonjour,
Je suis actuellement en train de faire un site qui me permettra de mieux gérer mes élèves, je souhaite pouvoir modifier l'acquis de chaque compétence pour chaque élève, pour cela, après avoir sélectionner l'élève, j'utilise un while pour afficher les compétence, dans ce while, j'intègre une checkboxe qui correspond à l'acquis : oui ou non
le problème est 'simple' (facon de parler hein ! ) quand je check la ou les checkbox, je ne vois vraiment pas comment récupérer les checkbox checker ! en soit, la chexbox étant dans le while, comment la 'nominé' de facon a pouvoir récupérer la donné (oui ou non ) ?
voici mon code pour info :

echo '<table align=center border=1 width=80%>';
echo '<tr><td colspan=6>Vous désirez modifier les compétences <br>de l\'élève ' .$nom. ' ' .$prenom. '.</td></tr>';
echo '<tr><td>Compétence</td><td>Intitulé</td><td>Sous compétence</td><td width=50%>Détail</td><td >Acquis</td></tr>';
$requete3 = "select * from dossier D, competence C where D.idcomp = C.idcomp AND D.ideleve='$ideleve'";
$result3 = mysql_query($requete3) or die ('impossible dexecuter la requete3');
echo '<form name="maj_comp" action="maj_comp_eleve.php" method="POST">';
while ($data = mysql_fetch_array($result3)) {
echo '<tr><td>';
$idcomp = $data['idcomp'];
echo $data['comp']. '</td/><td>';
echo $data['nomcomp'].'</td/><td>';
echo $data['souscomp'].'</td /><td>';
echo $data['nomsouscomp'].'</td/><td>';
echo '<input type="checkbox" name=' .$idcomp. ' value="oui">oui</td>';
}
$_SESSION['ideleve'] = $ideleve;
echo '</tr><tr><td colspan=6><input type="submit" value="valider"></td>';
echo '</form>';
echo '</tr></table>';

j'ai testé en nomment la checkbox avec l'id de la comp, mais pas de résultat.
je vous remercie d'avance pour l'aide que vous pourriez apporter.

10 réponses

Utilisateur anonyme
4 oct. 2011 à 11:26
Bonjour,

Déja je mettrais une radio, par une checkbox, comme ça même ce n'est pas coché vous aurez une valeur dans $_POST, oui ou non, pour le nom mettez compe_+le numéro, ensuite dans le tableau $_POST vous recherchez tous les éléments commençant par compe_ et vous récupérer le numéro qui correspond, et hop le tour est joué

echo '<input type="radio" name="compe_' .$idcomp. '" value="oui">oui<input type="radio" name="compe_' .$idcomp.'" value="non">non</td>';
0
cette solution me parait excellente, je test ça ce soir et vous tiens informé ! merci quoi qu'il en soit de votre aide !
0
après pas mal d'essais en vain pour récupérer ma variable post dans un ableau, voici mon résultat :
if (isset ($_POST["comp_"]) {
foreach ($_POST["comp_"] as $key => $value) {
echo $value."<br />";
}
} else {
echo "Aucune case n'a été cochée.<br />";
}

cependant, je ne vois pas comment matérialisé l'id comp, je pense que le résultat que je viens d'afficher et le plus simple mais sans certitude, une idée sur la façon de procéder ?
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
17 oct. 2011 à 09:35
bonjour,

dans ta boucle while je suppose que tu affiches les noms prenoms de chaque élève, est ce que dans ta base tu as aussi pour chaque élève un identifiant numérique id_eleve ?

si oui tu peux mettre pour le name de tes radio: (avec des [] ça te renverra un array )

while(....){
....
<input type="radio" name="competence['<php echo $id_eleve; ?>'] value="oui" />
<input type="radio" name="competence['<php echo $id_eleve; ?>'] value="non" checked /> //coché par defaut

...
}


et pour recupérer

foreach ($_POST['competence'] as $key => $value) {
     echo $key. " compétence: ".$value."<br />";
} 


si pas d'id_eleve tu peux mettre nom_prenom
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Merci,
cela me permet bien de récuper la valeur de chaque enregistrement, cependant, en désirant mettre à jour ma DB avec ceux-ci, php interprète bien la requete comme faite mais ma DB ne change pas voici :

echo '<input type="radio" name="comp_[ ' .$idcomp. ' ]" value="oui">oui <input type="radio" name="comp_[ ' .$idcomp. ' ]" value="non">non</td>';

et coté php :
...
$ideleve = $_SESSION['ideleve'];

foreach ($_POST['comp_'] as $key => $value) {
$idcomp = $key;
echo $idcomp ;
echo " compétence: " .$key. " Valeur : " .$value. " id élève : " .$ideleve. "<br />";
$requete = "UPDATE dossier SET acquis = '$value' WHERE ideleve = '$ideleve' AND idcomp = '$idcomp';";
$result = mysql_query($requete) or die ('impossible dexecuter la requete');
if ($result) {
echo '<h3>La compétence a été mis à jour.';
}else {
echo 'Nous n\'avons pu mettre les compétences à jour.';
}
}

quand je test à mettre une valeur nette à la place de la variable idcomp (exemple : idcomp = '4' ) , sa DB se met bien à jour.

Soit j'utilise mal le $key et j'ai mal compris son utilisation, soit je plante totalement.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
18 oct. 2011 à 22:16
je ne vois pas d'erreur ou de mauvaise utilisation de $key, essayes en ôtant les espaces comme ceci:

echo '<input type="radio" name="comp_['.$idcomp.']" value="oui">oui <input type="radio" name="comp_['.$idcomp.']" value="non">non</td>';


tu risques de te retrouver avec ' 4 ' au lieu de '4'
0
hum, même sans les expaces, aucun changement.
pourtant je ne vois pas de réel problème à ma syntaxe
0
après avoir valide, je me suis permis de faire un texte pour être sur que sa fonctionne :
compétence: 1 Valeur : oui id élève : 1
compétence: 2 Valeur : oui id élève : 1
compétence: 3 Valeur : oui id élève : 1
compétence: 4 Valeur : oui id élève : 1

compétence correspond a idcomp

en effet avec :
echo ".".$key.".";
dans la balise, je vois apparaitre 1 espace de chaque coté de l'id.
une idée pour les faires disparaitre ?


même en les faisant disparaitre avec trim, aucun meilleur résultat
bon au moins la je suis sur d'avoir uniquement l'id
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
Modifié par Alain_42 le 18/10/2011 à 22:43
si echo ".".$key.".";
te fait apparaitre un espace de chaque côté
oui c'est bien la qu'est le pb

si tu as bien supprimé les espaces dans la ligne que je t'avait indiquée, regardes du côté de la variable $idcomp qui te sert dans

echo '<input type="radio" name="comp_['.$idcomp.']" ....

est ce que tu ne l'a pas crée avec des espaces

perso quand je concatène je n'en mets pas
0
ça marche niquel, t'avais raison Alain !
c'était bien LES espaces qui gênait, en faisant sauter les 2 espaces avec strim et en récupérant le résultat, sa fonctionne

PS : pour info, j'avais bien retirer les deux espaces dans mon input, mais bon, le résultat et la x)
0