checkbox - PHP - Programmation
Marsh Posté le 20-10-2006 à 21:58:22
Remarques sur la requête SQL:
http://php.net/mysql_real_escape
http://php.net/get_magic_quotes_gpc
http://php.net/get_magic_quotes_runtime
http://php.net/stripslashes
ORDER BY est ASC par défaut
Ajoute une balise [ code ] dans ton poste pour qu'on puisse te donner les numéros de ligne où ça coince.
Marsh Posté le 20-10-2006 à 22:47:10
@ sert à ne pas afficher le message d'erreur éventuellement retourné par la fonction.
Si tu le mets partout, comment peux tu savoir si ca merde quelque part ou si tout se passe bien?
PS : Vu l'absence de balise code pour différencier le code et les questions, je n'ai pas poussé mon analyse plus loin.
Marsh Posté le 22-10-2006 à 13:34:32
Voici mon code du tableau de sélection :
Code :
|
et voici mon code de récupération avant insertion :
Code :
|
Marsh Posté le 22-10-2006 à 13:37:37
OK merci Omega2 pour l'astuce du @ !
Mon soucis réside dans le lien entre les valeurs apporté aux checkbox entre les lignes 19 et 32 du premier code et le for qui récupère les données entre les lignes 10 et 16 du 2ème code
Marsh Posté le 23-10-2006 à 15:21:48
Si je comprend bien, dans le premier script, t'as une boucle qui cré des séries de checkbox et dans le second une seconde boucle qui relit le contenu de ces checkbox là.
Vu que les navigateur ne retourne pas de valeur pour les checkbox décoché (pas même une valeur vide) comment espéres tu savoir laquelle n'est pas coché alors que tu mets la même valeur pour toutes les checkbox qui ont le même nom? Avec ton code actuel le mieux que tu peux savoir c'est combien ont été coché.
Solution : donner une valeur numérique (celui de l'id du nageur) à chaque checkbox de même nom. De cette maniére, il suffit de vérifier si l'id de chaque nageur est contenu par le tableau correspondant à une série de checkbox (par exemple "checkbox_ouvreur[]" ) pour savoir si la checkbox était ou non coché.
Marsh Posté le 23-10-2006 à 21:09:09
Bonsoir Omega2,
Alors j'essaye de te suivre ....
J'ai inclu une valeur numérique aux checkbox de même nom, afin de les différencier , c'est ça ?
[ code ]
<?php
// Requete de sélection dans la base : infos adhérents = Table NAGEURS
$sql = "SELECT nom, prenom, ID_nageur FROM nageurs WHERE ID_club='$ID_club_EM' ORDER BY nom ASC";
$result = @mysql_query($sql);
$nombre_resultat = @mysql_num_rows($result);
for ($i=0;$i<$nombre_resultat;$i++) {
// On récupère les valeurs :
$nom = @mysql_result($result,$i,'nom');
$prenom = @mysql_result($result,$i,'prenom');
$ID_nageur_sortie = @mysql_result($result,$i,'ID_nageur');
?>
<tr>
<td> <div align="center">
<input type="checkbox" name="checkbox[]" value="<? echo "$ID_nageur_sortie"; ?>">
</div></td>
<td><div align="left"><font color="#3E3E7D" size="2" face="Arial, Helvetica, sans-serif"><? echo "$nom, $prenom"; ?></font></div></td>
<td><div align="center">
<input type="checkbox" name="checkboxE[]" value="<? echo "$ID_nageur_sortie"; ?>">
</div></td>
<td><div align="center">
<input type="checkbox" name="checkboxO[]" value="<? echo "$ID_nageur_sortie"; ?>">
</div></td>
<td><div align="center">
<input type="checkbox" name="checkboxS[]" value="<? echo "$ID_nageur_sortie"; ?>">
</div></td>
<td><div align="center">
<input name="nb_descente[]" type="text" size="5" maxlength="2">
</div></td>
</tr>
<?
}
?>
[ / code ]
[ code ]
// On récupère toutes les valeurs passées dans le formulaire
for ($u = 0; $u < count($checkbox); $u++)
{
$post_ID_carnet_NEV= $HTTP_POST_VARS['ID_carnet_NEV']; // ok
$post_ID_nageur= $checkbox[$u]; // ok
$post_encadrant= $checkboxE[$u]; // encadrant
$post_ouvreur= $checkboxO[$u]; // Ouvreur
$post_serre_file= $checkboxS[$u]; // Serre file
$post_nb_descente= $HTTP_POST_VARS['nb_descente[$u]'];
// On crée la requete d'insertion
$sql_participants_sortie_club = "INSERT INTO carnet_nev_participants (ID_carnet_NEV, ID_nageur, encadrant, ouvreur, serre_file, nb_descente)
VALUES ('$post_ID_carnet_NEV', '$post_ID_nageur', '$post_encadrant', '$post_ouvreur', '$post_serre_file', '$post_nb_descente')";
// On éxécute la requete
@mysql_query($sql_participants_sortie_club);
}
[ / code ]
ce que tu m'as dis marche,
J'ai les 2 première valeurs qui s'insert dans la bdd ( $post_ID_carnet_NEV et $post_ID_nageur)
mais maintenant .... comment récupérer les autres ?
La requête s'effectue effectivement exactement le nb de personne coché, pas de soucis de ce côté là, mais le contenu des insertion n'est pas complet sur à partir de la 2ème .... donc y a un bug ...
Marsh Posté le 24-10-2006 à 11:26:47
lit la documentation sur les fonctions in_array ( http://fr2.php.net/manual/fr/function.in-array.php ) array_flip ( http://fr2.php.net/manual/fr/function.array-flip.php )
Ensuite essaye d'adapter ton code en utilisant une de ces deux fonctions.
A noter que print_r($tab) permet de savoir ce que contient un tableau. Utile pour comprendre ce qui se passe.
Marsh Posté le 26-10-2006 à 22:33:21
Merci Omega2, la solution était bien en utilisant le in_array !
merci
Marsh Posté le 14-12-2007 à 13:21:16
OU bien un autre pouras m'aide en m'envoyeant le reste du code de Ma'Dalton si peut le faire
Marsh Posté le 14-12-2007 à 13:30:07
Pelle d'or of teh day.
Si tu veux du code, tu prends tes mains et ton clavier, un beau notepad, et tu pianotes comme un grand...
Marsh Posté le 20-10-2006 à 21:42:57
Bonjour,
J'aurai besoin de récupérer des données en utilisant les checkbox mais dans les 2 sens :
- Cocher dans une liste apparente, le nom des personnes que je souhaite ajouter à ma requête d'insertion.
- Cocher également sur chacune d'entre elle sur la ligne 3 autre case checkbox qui m'indique le "statut" de ces personnes.
Voici mon code du tableau de sélection :
<?php
// Requete de sélection dans la base : infos adhérents = Table NAGEURS
$sql = "SELECT nom, prenom FROM nageurs WHERE ID_club='$ID_club_EM' ORDER BY nom ASC";
$result = @mysql_query($sql);
$nombre_resultat = @mysql_num_rows($result);
for ($i=0;$i<$nombre_resultat;$i++) {
// On récupère les valeurs :
$nom = @mysql_result($result,$i,'nageurs.nom');
$prenom = @mysql_result($result,$i,'nageurs.prenom');
?>
<tr>
<td> <div align="center">
<input type="checkbox" name="checkbox[]" value="<?=$ID_nageur ?>">
</div></td>
<td><div align="left"><font color="#3E3E7D" size="2" face="Arial, Helvetica, sans-serif"><? echo "$nom, $prenom"; ?></font></div></td>
<td><div align="center">
<input type="checkbox" name="checkbox_encadrant[]" value="encadrant">
</div></td>
<td><div align="center">
<input type="checkbox" name="checkbox_ouvreur[]" value="ouvreur">
</div></td>
<td><div align="center">
<input type="checkbox" name="checkbox_serre_file[]" value="serre_file">
</div></td>
<td><div align="center">
<input name="nb_descente" type="text" size="5" maxlength="2">
</div></td>
</tr>
<?
}
?>
et voici mon code de récupération avant insertion :
// On récupère la valeur MM_insert4 envoyé par le formulaire ------------------------------------------------------- 4
$MM_insert4 = $HTTP_POST_VARS["MM_insert4"];
// Si cette valeur existe , c'est qu'on a posté via le formulaire
if ($MM_insert4=="form4" )
{
// On récupère toutes les valeurs passées dans le formulaire
$post_ID_carnet_NEV= $HTTP_POST_VARS['ID_carnet_NEV'];
for ($u = 0; $u < count($checkbox); $u++)
{
$post_ID_nageur= $checkbox[$u];
$post_encadrant= $checkbox_encadrant[$u];
$post_ouvreur= $checkbox_ouvreur[$u];
$post_serre_file= $checkbox_serre_file[$u];
$post_nb_descente= $HTTP_POST_VARS['nb_descente'];
// On crée la requete d'insertion
$sql_participants_sortie_club = "INSERT INTO carnet_nev_participants (ID_carnet_NEV, ID_nageur, encadrant, ouvreur, serre_file, nb_descente)
VALUES ('$post_ID_carnet_NEV', '$post_ID_nageur', '$post_encadrant', '$post_ouvreur', '$post_serre_file', '$post_nb_descente')";
// On éxécute la requete
@mysql_query($sql_participants_sortie_club);
}
} // fin du post formulaire