Gestion Membre
RésoluPour gérer les membres j'ai des chekboxs et une liste déroulante en autre.
Je n'arrive pas à saisir pourquoi cela ne fonctionne pas, je suis curieux de comprendre mais pour ça j'ai besoin de vos compétence en PHP.
Si vous avez un moment pour me dire ce que vous en pensez.
Mes checkboxs s'insert bien dans ma BDD mais pas ma liste déroulante.
Si par contre je remplace ma liste déroulante par des checkboxs cela fonctionne.
Merci de votre aide éventuel.
<!--#######################################################################################################################################-->
<?php
$sql = "SELECT * FROM tb_gestion";
$requete1 = $bdd->prepare($sql);
$requete1->execute();
while ($donnees = $requete1->fetch(PDO::FETCH_ASSOC))
{
echo"<tr>";
echo"<td width='20%'>".$donnees['nom_gestion']."</td>";
echo"<td width='20%'><input type='checkbox' name='nom_gestion[]' value='".$donnees['id_gestion']."'></td>";
}
$requete1->closeCursor();
?>
<!--#######################################################################################################################################-->
<?php
echo"<td width='20%'>";
echo'<select style="width: auto" name="nom_statut" class="content_input" disabled="">';
echo"<option value=''>- - - Membre - - -</option>";
$sql = "SELECT * FROM tb_statut";
$resultat2 = $bdd->prepare($sql);
$resultat2->execute();
while ($donnees = $resultat2->fetch(PDO::FETCH_ASSOC))
{
echo"<option value=".$donnees["nom_statut"].">".$donnees["nom_statut"]."</option>\n";
}
echo"</select>";
echo"</td>";
$resultat2->closeCursor();
?>
<!--#######################################################################################################################################-->
61 réponses
Le fil porte sur la gestion des membres via des checkbox et une liste déroulante, car les cases à cocher s’enregistrent dans la base mais la liste déroulante ne se remplit pas comme attendu. Des réponses recommandent d'utiliser une jointure SQL pour pré-cocher les cases liées à tb_adherent_gestion et d'adapter la requête afin de retourner un indicateur checked selon la présence du lien. La meilleure solution proposée consiste ensuite à tester la requête dans MySQL, puis à intégrer le paramètre d’identifiant adhérent et à afficher dynamiquement les cases cochées via une condition. Des vérifications recommandent aussi de tester séparément le type de colonne rid_statut et de clarifier les mécanismes d’INSERT ou d’UPDATE pour éviter les échecs d’enregistrement.
-
Bonjour,
Un très grand merci pour ton aide liste déroulante et checkboxs super cela fonctionne très bien je n'aurai jamais pu y arriver sans ton aide.
J'ai mis un peu de temps à essayer de mettre en place par rapport à ton premier post je n'avais pas fait un copier/coller j'ai voulu retaper et je me suis apercu que j'avais fait une erreur très con.
Merci beaucoup -
Bonjour
J'ai essayé très longtemps je dois passer à côté de quelque chose, impossible de voir quoi.
Merci si tu peux me coder exactement comme tu le vois, comme ça je pourrai passer à autre chose.
Désolé mais vraiment j'ai fait de mon mieux pour arriver à un résultat met en vain.
Merci -
Bonjour
Merci encore pour ton aide.
Malheureusement j'ai éssayé à la lettre tout ce que tu m'a expliqué, mais toujours aucun résultat.
En fait je me demande si je me suis bien expliqué pour ce problème, en fait je sais pas trop.
La méthode que tu me préconise je me demandais si vraiment il n'y a pas plus simple.
Car par exemple pour les inputs de type text il n'y a rien de tout ça et c'est bien le même principe.
En deux mot je n'y arrive pas.
Si ça t'ennuie pas trop de continuer à m'aider.
Merci -
Bonjour,
après analyse de la nouvelle page que tu m'a envoyé, il faut que tu fasse ce que je t'ai indiqué dans mon précédent poste :
Il faut supprimer tout les droits de ton utilisateur pour les réinsérer après.$sql = "DELETE FROM tb_adherent_gestion WHERE rid_adherent = '" . $PARAM['ID_ADHERENT'] . "'"; // execute ici la requête contenu dans $sql foreach($PARAM['NOM_GESTION'] as $rid_gestion) { $sql = 'INSERT INTO tb_adherent_gestion (rid_adherent, rid_gestion) VALUES ("'.$PARAM['ID_ADHERENT'].'", "'.$rid_gestion.'")'; $requete = $bdd->prepare($sql); $requete->execute(); }
En effet, si tu as modifié les droits en cochant/décochant des cases, il faut supprimer les droits qui ont été décoché et ajouter les droits qui ont été coché.
Le fait de supprimer tout et de remettre que ceux qui sont coché permet de simplifier le processus et d'être sur qu'il n'y a pas de doublons ni de ligne fantôme.
-
Bonjour,
Je voudrais juste savoir si tu as eu le temps de regarder mon bazard (chekbox et liste déroulante)
De mon côté j'essaie met en vain. Avant je l'avais fait en javascript, c'était moins compliqué, mais aussi moins bien c'est pour cela que je voulais quelque chose de dynamique.
Merci de ton aide. -
-
oui je viens bien que tu me renvoi ta page.
ça m'aidera à te fournir des réponses plus précise.
-
Bonjour
Plusieurs heures dessus et toujours pas résolu alors je m'en remet encore à toi.
Je ne comprend pas cette logique en fait.
L'INSERT que j'ai fait pour les checkbox ça fonctionne lorsque j'édit de nouveau le formulaire les valeurs sont présentent.
Alors à ce moment là il faut bien faire un UPDATE ?
Pour que les modifs fonctionnent non?
Tu me dit qu'il faut faire un INSERT au lieu d'un UPDATE je suis perdu complet.
Si j'ai compris ce que tu m'a dit!
Il faut supprimer les valeurs pour de nouveaux les Insérer?
Je sais pas si je vais retourner au javascript un peu moins compliqué parce que j'en perds mon latin...
les inputs de type text c'est cool mais les checkboxs et liste déroulante c'est la galère.
Veux tu que je te renvoie ma page complète? afin que tu puisse revoir mon code au complet.
Merci encore -
Ah désolé, c'est de ma faute.
Ce n'est pas un update qui faut faire, c'est un INSERT.
Il faut supprimer tout les droits de ton utilisateur pour les réinsérer après.
$sql = "DELETE FROM tb_adherent_gestion WHERE rid_adherent = '" . $PARAM['ID_ADHERENT'] . "'"; // execute ici la requête contenu dans $sql
foreach($PARAM['NOM_GESTION'] as $rid_gestion) { $sql = "INSERT ..."; // requête d'insertion des droits de l'utilisateur $requete = $bdd->prepare($sql); $requete->bindParam(':rid_adherent', $PARAM['RID_ADHERENT']); $requete->bindParam(':rid_gestion', $rid_gestion); $requete->execute(); }
il faut aussi que tu modifie ton tableau de paramètres :'NOM_GESTION' => isset($_POST['nom_gestion']) ? $_POST['nom_gestion'] : array()
ça devrait mieux fonctionner.
-
Bonjour
Excuse moi encore.
Je me permet de te faire une petite récap concernant mes checkboxs
Merci
Mon tableau'RID_ADHERENT' => isset($_POST['rid_adherent']) ? $_POST['rid_adherent'] : '', 'RID_GESTION' => isset($_POST['rid_gestion']) ? $_POST['rid_gestion'] :array(), 'ID_GESTION' => isset($_REQUEST['id_gestion']) ? $_REQUEST['id_gestion'] : '', 'NOM_GESTION' => isset($_POST['nom_gestion']) ? $_POST['nom_gestion'] : '',
le switch case à modifierforeach($PARAM['RID_GESTION'] as $rid_gestion) { $sql = "UPDATE tb_adherent_gestion SET rid_adherent=:rid_adherent, id_gestion=:rid_gestion"; $requete = $bdd->prepare($sql); $requete->bindParam(':rid_adherent', $PARAM['RID_ADHERENT']); $requete->bindParam(':rid_gestion', $rid_gestion); $requete->execute(); }
case à éditer pour les modifscase 'edit': $sql = ("SELECT tba.*, tbs.nom_statut, GROUP_CONCAT(tbg.nom_gestion SEPARATOR ', ') nom_gestion FROM tb_adherent tba LEFT OUTER JOIN tb_adherent_statut tbas ON tbas.rid_adherent = tba.id_adherent LEFT OUTER JOIN tb_statut tbs ON tbs.id_statut = tbas.rid_statut LEFT OUTER JOIN tb_adherent_gestion tbag ON tbag.rid_adherent = tba.id_adherent LEFT OUTER JOIN tb_gestion tbg ON tbg.id_gestion = tbag.rid_gestion WHERE id_adherent='" . $PARAM['ID_ADHERENT'] . "' ORDER BY nom ASC");
pour terminer ma liste déroulante dynamique$sql = "SELECT tb_gestion.nom_gestion, tb_gestion.id_gestion, NOT(tb_adherent_gestion.rid_adherent IS NULL) checked FROM tb_gestion LEFT JOIN tb_adherent_gestion ON tb_adherent_gestion.rid_gestion = tb_gestion.id_gestion AND tb_adherent_gestion.rid_adherent ='".$PARAM['ID_ADHERENT']."' ORDER BY tb_gestion.id_gestion"; $requete1 = $bdd->prepare($sql); $requete1->execute(); while ($donnees = $requete1->fetch(PDO::FETCH_ASSOC)) { echo "<tr>"; echo "<td width='5%'><input type='checkbox' name='nom_gestion[]' value='".$donnees['id_gestion']."'". ($donnees['checked'] ? ' checked="checked"':'') . "></td>"; echo "<td width='20%'>".$donnees['nom_gestion']."</td>"; //echo"<tr>"; //echo"<td width='20%'><input id='checkbox_gestion' class='css-checkbox' type='checkbox' name='nom_gestion[]' value='".$donnees['id_gestion']."'". ($donnees['checked'] ? ' checked="checked"':'') . ">"; //echo"<label for='checkbox_gestion' class='css-label'>".$donnees['nom_gestion']."</label></td>"; } $requete1->closeCursor(); -
Bonjour
Merci pour ton temps passé avec moi, malheureusement j'ai suivi à la lettre tes conseisl mais je peux toujours pas faire mes modifs.
Si tu peux encore regarder mon fichu prolème.
J'ai bien parcouru mon tableau avec...($PARAM['RID_GESTION']
et avec($PARAM['NOM_GESTION']
Merci -
Bonjour,
en faite, c'est assez simple.
Normalement, la liste déroulante fonctionne de la manière qu'un champ input.
Par contre, les checkboxs, tu dois les traiter comme un tableau.
Il faut que tu modifie ton tableau$PARAM
:'RID_GESTION' => isset($_POST['rid_gestion'])?$_POST['rid_gestion']:array() /* ... */
puis il faut que tu parcours$PARAM['RID_GESTION']
:foreach($PARAM['RID_GESTION'] as $rid_gestion) { $sql = "UPDATE tb_adherent_gestion SET rid_adherent=:rid_adherent, id_gestion=:rid_gestion"; $requete = $bdd->prepare($sql); $requete->bindParam(':rid_adherent', $PARAM['RID_ADHERENT']); $requete->bindParam(':rid_gestion', $rid_gestion); $requete->execute(); }
il est possible que tu es une erreur et qu'il faille remplacer$PARAM['RID_GESTION']
par$PARAM['NOM_GESTION']
.
-
Bonjour
Oui c'est exactement ce que je souhaiterai pour terminer ma gestion des membres. Malheureusement ça m'a l'air très compliqué par rapport au input de type text.
Les modifs pour checkbox et liste déroulante je n'y parviens pas même avec toutes ma bonne volonté et malgrès les tutos par ci par là.
Pourrai tu m'aider une dernière fois s'il te plait si tu as un peu de temps.
Merci encore -
Bonjour,
je suis désolé pour le temps entre deux réponses.
pour résumer, tu as ton formulaire d'affiché avec les champs (input) nom, prénom, etc et tu as les checkboxs et le select.
Ce que tu veux, c'est enregistré la modification faite avec ce formulaire.
C'est ça ?
Dans ce cas, il faut faire une requête d'UPDATE différente pour les checkbox et le select.
-
Bonjour
Excuse moi mais impossible de trouver pour résoudre mon problème.
J'espère de tout coeur que tu pourras prendre encore un peu de ton temps pour moi.
Merci encore -
Bonjour
En fait je cherche à pouvoir modifier ma liste déroulante et mes checkboxs, je récupére mes valeurs comme tu me l'a fait mais toujours impossible de modifier en fait.
J'espère que tu comprendra ce que je veux car pour moi c'est clair mais mes explications ne le sont peut-être pas.
Tu peux me redire si tu ne vois pas ce que je veux dire.
Merci en tout cas de finir de m'aider car j'ai plus que ça à finir pour pouvoir mettre en ligne mon espace membre.
Merci -
Bonjour,
je comprend pas ce que tu veux faire.
Est-ce pour l'affichage ? Ou pour mettre à jour la base de données ?
-
Bonjour
Excuse moi de te déranger je suis toujours à la recherche pour pouvoir modifier ma liste déroulante et mes checkboxs.
Comme je te disais tous mes input de type text fontionne bien mais checkboxs et select toujours pas trouvé.
Si tu peux encore me dépanner.?
Je te remercie en attendant -
je te renvoie le script que tu m'a fait concernant les modifs je ne vois pas pourquoi ça ne fonctionne pas.
Merci de ta patience avec mon bazard..
$sql = ("SELECT tba.*, tbs.nom_statut, GROUP_CONCAT(tbg.nom_gestion SEPARATOR ', ') nom_gestion FROM tb_adherent tba LEFT OUTER JOIN tb_adherent_statut tbas ON tbas.rid_adherent = tba.id_adherent LEFT OUTER JOIN tb_statut tbs ON tbs.id_statut = tbas.rid_statut LEFT OUTER JOIN tb_adherent_gestion tbag ON tbag.rid_adherent = tba.id_adherent LEFT OUTER JOIN tb_gestion tbg ON tbg.id_gestion = tbag.rid_gestion WHERE id_adherent='" . $PARAM['ID_ADHERENT'] . "' ORDER BY nom ASC"); -
Petite info
Ies input de type text fonctionne normalement..
Merci
- 1
- 2
- 3
- 4