Gestion Membre

Résolu/Fermé
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 - 2 mai 2014 à 08:13
Gigatrappeur Messages postés 226 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 3 juillet 2014 - 3 juil. 2014 à 18:16
Bonjour,

Pour 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();
?>
<!--#######################################################################################################################################-->
A voir également:

61 réponses

labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
6 mai 2014 à 18:54
Bonjour
En fait c'est pour pouvoir modifier si besoin comme les types texte où ça me réaffiche les coordonnés des membres donc après les INSERT.

donc c'est bien cela...
Est-ce de ré-afficher les précédentes cases cochées ?

Merci beaucoup
0
Gigatrappeur Messages postés 226 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 3 juillet 2014 25
Modifié par Gigatrappeur le 6/05/2014 à 19:39
OK.
Donc, le vrai besoin, c'est de cocher les case pour lesquelles on a une ligne qui est présente dans tb_adherent_gestion.
Je pense que tu peux résoudre le problème à l'aide d'une requête sql jointe :
$sql = "SELECT tbg.nom_gestion nom_gestion, tbg.id_gestion id_gestion, (NOT(tbag.rid_adherent IS NULL) AND tbag.rid_adherent = '" . $donnees['id_adherent'] . "') checked FROM tb_gestion tgb LEFT JOIN tb_adherent_gestion tbag ON tbag.rid_gestion = tbg.id_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']."'". ($donnees['checked'] ? ' checked="checked"':'') . "></td>";
 echo "</tr>";
}
$requete1->closeCursor();


Cordialement,
Gigatrappeur
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
6 mai 2014 à 20:20
Bonjour

J'ai juste une chose à te dire un grand MERCI.
Cela fonctionne comme je le souhaitais jamais je n'aurai pensé à faire une telle requète.
Merci encore
Bonne soirée.
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
6 mai 2014 à 21:32
Excuse mpoi tu peux m'expliquer cette partie s'il te plait
Merci

(NOT(tbag.rid_adherent IS NULL)
0
Gigatrappeur Messages postés 226 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 3 juillet 2014 25
7 mai 2014 à 09:35
La requête SQL fait un left join. Cela veut dire que MySQL construit une table temporaire à l'aide de tb_gestion et tb_adherent_gestion. le ON indique la condition de jointure. Sauf que dans le cas ou il n'y a pas de correspondance dans tb_adherent_gestion, la colonne est égale à null.
Pour que PHP puisse interpréter facilement, j'ai ajouté une modification de la valeur de cette colonne pour te permettre de voir un booléen plutôt qu'une donnée inconsistante.
0

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

Posez votre question
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
7 mai 2014 à 09:10
Bonjour
Je viens de m'apercevoir qu'il y a juste un tout petit soucis.
En fait lorsque j'insére un nouveau membre ça me garde les valeurs des checkboxs stocké du dernier membre enregistré et du coup ça m'insére une nouvelle checkbox alors il y a doublon, même si je décoche la checkbox et si un membre existe déjà avec une même valeur ça me fait un doublon.
J'espère que tu pourras me comprendre dans mon explication.
Je te remercie beaucoup de ton aide si précieuse.
0
Gigatrappeur Messages postés 226 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 3 juillet 2014 25
7 mai 2014 à 09:50
ok.

j'ai modifié la requête, elle comportait des erreurs :
SELECT
    tbg.nom_gestion nom_gestion,
    tbg.id_gestion id_gestion,
    NOT(tbag.rid_adherent IS NULL) checked
FROM tb_gestion tbg
    LEFT JOIN tb_adherent_gestion tbag
        ON tbag.rid_gestion = tbg.id_gestion
        AND tbag.rid_adherent = 'mettre_ici_l_id_adherent'
ORDER BY tbg.id_gestion


Essaye de remplacer
'mettre_ici_l_id_adherent'
par
$PARAM['ID_ADHERENT']
.
0
Gigatrappeur Messages postés 226 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 3 juillet 2014 25
7 mai 2014 à 09:50
N'hésite pas à tester la requête directement dans MySQL, cela peut aider à comprendre.
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
7 mai 2014 à 11:02
Bonjour
Merci tout à l'air de bien fonctionner, je fait encore quelques essais pour être sur mais à priori c'est super cool.
J'ai juste supprimé dans le SELECT nom_gestion et id_gestion car je suppose que c'est en trop.
Juste me définir le NOT je voudrais comprendre le fonctionnement il y a pas trop longtemps que je me suis lancé dans le SQL et PHP.
Merci
0
Gigatrappeur Messages postés 226 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 3 juillet 2014 25
7 mai 2014 à 14:15
Non, le nom_gestion et le id_gestion ne sont pas en trop, c'est juste pour renommer les colonnes que tu reçoit en PHP.

NOT = PAS
SI NOT NULL = SI PAS NULL (en fr)
En gros, ça donne la valeur inverse.
Exemple:
SI PAS NULL retourne VRAI sinon retourne FAUX

Je sais pas si c'est clair.
C'est pas spécifique au SQL.
C'est de la logique.
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
7 mai 2014 à 18:49
Merci

En fait j'ai la table suivi du nom du champ et encore 1 fois le nom du champ
Ca me semblais pas normal.
Merci encore
0
Gigatrappeur Messages postés 226 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 3 juillet 2014 25
7 mai 2014 à 19:06
N'oublie pas de marquer le sujet comme résolue, si c'est le cas.
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
8 mai 2014 à 19:08
Bonjour
Pour terminer j'aurai aimé une dernière fois te demander encore une chose s'il te plait.
Pour ma liste déroulante afin que les valeurs rester afficher je peux me baser sur ton exemple a propos de mes checkboxs? mis à part que je met selected à la place de checked
Merci encore de ton aide
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
11 mai 2014 à 14:52
Bonjour
Un petit coup de main s'il te plait juste pour me corriger mon echo je pense que l'erreur vient de là pour que ça fonctionne pas.
J'ai beau essayer de comprendre mais je ne vois pas.
Encore une fois de plus un très grand merci.
Cordialement
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
11 mai 2014 à 14:52
			echo"<td width='15%'>";
			echo"<select name='nom_statut' class='content_input' disabled=''>";
			echo"<option value=''>- - - Statut - - -</option>";
	$sql = "SELECT
		tb_statut.nom_statut,
		tb_statut.id_statut,
		NOT(tb_adherent_statut.rid_adherent IS NULL) selected
		FROM tb_statut
	    LEFT JOIN tb_adherent_statut
        ON tb_adherent_statut.rid_statut = tb_statut.id_statut
        AND tb_adherent_statut.rid_adherent ='".$PARAM['ID_ADHERENT']."'
		ORDER BY tb_statut.id_statut";
	$requete2 = $bdd->prepare($sql);
	$requete2->execute();

		while ($donnees = $requete2->fetch(PDO::FETCH_ASSOC))
		{
			echo"<option value='".$donnees["id_statut"]."'>".$donnees["nom_statut"]." ". ($donnees['selected'] ? ' selected="selected"':'') . "</option>\n";
		}
			echo"</select>";
			echo"</td>";
	$requete2->closeCursor();
0
Gigatrappeur Messages postés 226 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 3 juillet 2014 25
11 mai 2014 à 15:55
Salut,

désolés de ne pas avoir répondu plutôt. Je suis pas mal occupé et donc je n'ai pas eu le temps.
A première vu, ton attribut selected est écrit dans le texte qui est affiché et non dans la balise option.
Tu devrais normalement avoir un truc comme ça :
echo"<option value='".$donnees["id_statut"]."'". ($donnees['selected'] ? ' selected="selected"':'') . ">".$donnees["nom_statut"]."</option>\n";



Sinon, ta requête à l'air correcte. Par contre, il faut que tes adhérents n'est qu'un seul status.
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
11 mai 2014 à 23:11
Bonjour
Non y a pas de soucis j'ai voulu déjà regarder par moi-même si je pouvais trouver la solution.
Je te dis encore une fois un grand merci, je sais tu dois en avoir plein les poches mais je suis admiratif des personnes comme toi qui aide des personnes à résoudre leurs problème c'est vraiment génial de ta part ça fonctionne vraiment impec. Oui effectivement 1 adherent n'a qu'un et un seul statut.
Pour terminer ma gestion des membres j'ai une dernière fois besoin de ton savoir.

Pour modifier les données du formulaire j'ai la case 'edit' qui édite les données. Etant donnée que j'affiche les données des checkboxs et de la liste déroulante avec une requète, je pense qu'il faudrait faire une requète imbriquée?
Qu'en pense tu j'espère que tu pourras comprendre mon explication.

Merci

Avec cette requète j'affiche les données des adherents à l'exception des checkboxs et liste déroulante.
Bien sur j'ai aussi essayé de faire une requète avec jointure mais aucun résultat.

		case 'edit':
			$sql = ("SELECT *
					FROM tb_adherent
					WHERE id_adherent='" . $PARAM['ID_ADHERENT'] . "'
					ORDER BY nom ASC");
			$requete = $bdd->prepare($sql);
			$requete->execute();
			$reponse = $requete->setFetchMode(PDO::FETCH_ASSOC);
			$donnees = $requete->fetch();
0
Gigatrappeur Messages postés 226 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 3 juillet 2014 25
12 mai 2014 à 19:15
Salut,

pour confirmer : tu cherche à récupérer toutes les données que tu as sur UN adhérent ?

0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
12 mai 2014 à 20:40
Bonjour
Oui c'est ça donc pour la table tb_adherent ça fonctionne je récupére tous les coordonnées d'un membre.
Voici le lien qui m'affiche les données du formulaire
					<a href="./index.php?body=gestion_membre&type=compte&action=edit&id_adherent=<?php echo $donnees['id_adherent'];?>" onclick="ad_user()">						
0
Gigatrappeur Messages postés 226 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 3 juillet 2014 25
15 mai 2014 à 13:19
Bonjour,

je pense que ta requête doit ressembler à ça :
SELECT *
FROM tb_adherent tba
    -- partie pour récupérer le status de l'adhérent	
    INNER JOIN tb_adherent_statut tbas
        ON tbas.rid_adherent = tba.id_adherent
    INNER JOIN tb_statut tbs
        ON tbas.rid_statut = tbs.id_statut
		
WHERE id_adherent='" . $PARAM['ID_ADHERENT'] . "'
ORDER BY nom ASC


L'
ORDER BY
n'est peut-être pas utile ici, si ?

Par contre, comme tu peux avoir plusieurs lignes "nom_gestion", tu ne peux pas faire une requête imbriqué simplement.
Ou alors, il faut intégrer tous les "nom_gestion" pour l'adhérent dans une seule colonne.

En faisant un truc du genre :
SELECT tba.*, tbs.nom_statut, GROUP_CONCAT(tbg.nom_gestion SEPARATOR ', ') nom_gestions
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'] . "'

0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
16 mai 2014 à 06:59
Bonjour
Malheureusement ça ne fonctionne pas, peut-être faut-il modifier la case modifier?
comme tu l'avais fait pour la case ajouter.
Merci

INSERT
if (isset($_POST['nom_gestion'])) {
		foreach($PARAM['NOM_GESTION'] as $nom_gestion)
		{
			$sql = 'INSERT INTO tb_adherent_gestion (rid_adherent, rid_gestion)
					VALUES ("'.$adherent_insert.'", "'.$nom_gestion.'")';
			$requete = $bdd->prepare($sql);
			$requete->bindParam(':rid_adherent',			$adherent_insert);
			$requete->bindParam(':rid_gestion',				$nom_gestion);
			$requete->execute();
		}
}
if (isset($_POST['nom_statut'])) {
	$nom_statut = $PARAM['NOM_STATUT'];

			$sql = 'INSERT INTO tb_adherent_statut (rid_adherent, rid_statut)
					VALUES ("'.$adherent_insert.'", "'.$nom_statut.'")';
			$requete = $bdd->prepare($sql);
			$requete->bindParam(':rid_adherent',			$adherent_insert);
			$requete->bindParam(':rid_statut',				$nom_statut);
			$requete->execute();
}
			break;

UPDATE
			$sql = "UPDATE tb_adherent_gestion
					SET rid_adherent=:rid_adherent, rid_gestion=:rid_gestion";
			$requete = $bdd->prepare($sql);
			$requete->bindParam(':rid_adherent',			$PARAM['RID_ADHERENT']);
			$requete->bindParam(':rid_gestion',				$PARAM['RID_GESTION']);	
			$requete->execute();

			$sql = "UPDATE tb_adherent_statut
					SET rid_adherent=:rid_adherent, rid_statut=:rid_statut";
			$requete = $bdd->prepare($sql);
			$requete->bindParam(':rid_adherent',			$PARAM['RID_ADHERENT']);
			$requete->bindParam(':rid_statut',				$PARAM['RID_STATUT']);
			$requete->execute();
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
16 mai 2014 à 07:06
J'ai également enlevé le s au nom de colonne "nom_gestion" j'ai dit on sait jamais, mais toujours pas.
0
labourette Messages postés 657 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 24 juillet 2016 6
Modifié par labourette le 18/05/2014 à 10:20
Bonjour

Il y a quelque chose qui me chagrine en fait.
si je test cette requète dans phpmyadmin ça retourne bien uniquement les données de l'adherent OK
SELECT *
FROM tb_adherent
WHERE id_adherent='1';

si je test cette requète dans phpmyadmin ça retourne bien les données de l'adhérent avec toutes les jointures OK
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='1';

Maintenant si dans ma page php si je met uniquement la première requète ça devrais pas m'afficher les données de l'adhérent avec les checkbox et la liste déroulante.
Ca devrais m'afficher que ce qui concerne la table "tb_adherent"
Merci
0
Gigatrappeur Messages postés 226 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 3 juillet 2014 25
19 mai 2014 à 17:21
Pourquoi cela ne devrait pas afficher les checkboxs et le select ?
0