Récupération, Affichage des checkboxs issus de ma BDD

Fermé
LaChaux78 Messages postés 581 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 21 novembre 2024 - 23 sept. 2019 à 15:52
LaChaux78 Messages postés 581 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 21 novembre 2024 - 24 sept. 2019 à 09:56
Bonjour,
J'ai créé des checkbox grâce à une boucle, et j'aimerai pouvoir récupérer ensuite toutes les checkbox cochées afin de faire un UPDATE dans ma BDD. Mon formulaire se compose d'une checkbox, deux boutons radio, une liste déroulante et mes checkbox généré par une boucle issu de ma BDD d'où mon soucis. Actuellement quand je coche deux cases, j'ai bien deux entrée dans ma BDD. Voici à quoi ressemble mon affichage.
DUPOND Pierre => Trompette
DURAND Paul => Trompette

J'aimerai que mon lien de modification me retourne:

DUPOND Pierre - DURAND Paul => Trompette

J'ai essayé de rasembler les éléments de mon tableau en une chaine avec "implode" mais sans succes. Pouvez-vous m'aider s'ils vous plait.
$action 	= 'new';
$a 			= !empty($_GET['a']) ? $_GET['a'] : NULL;
$submit 	= !empty($_POST['submit']) ? $_POST['submit'] : NULL;
$haction 	= !empty($_POST['haction']) ? $_POST['haction'] : NULL;

$idpers 	= !empty($_POST['idpers']) ? $_POST['idpers'] : '';
$idpup 		= !empty($_POST['idpup']) ? $_POST['idpup'] : '';
$cl 		= !empty($_POST['cl']) ? $_POST['cl'] : '';
$grcommun 	= !empty($_POST['grcommun']) ? $_POST['grcommun'] : '';
$grindiv 	= !empty($_POST['grindiv']) ? $_POST['grindiv'] : '';
$ptcarnet 	= !empty($_POST['ptcarnet']) ? $_POST['ptcarnet'] : '';
$oldid 		= !empty($_POST['oldid']) ? $_POST['oldid'] : '';
$possession = !empty($_POST['possession']) ? $_POST['possession'] : NULL;

// On initialise les variables à 0
$grcommun 	= 0; 
$grindiv 	= 0; 

// On test le choix
if ($cl == 'grcommun') 
$grcommun = 1; 

if ($cl == 'grindiv')
$grindiv = 1;

switch($a) {
	case 'new': $action = 'new';  break; 
	case 'ls' : $action = 'list'; break;
	case 'mod': $action = 'mod';  break;		
	case 'sup': $action = 'sup';  break;
	default   : $action = 'new';  break; 
} 

if($action == 'list') {
	echo '<h1>'.$title.'</h1>';
	
	$sql = "SELECT *
			FROM cdc_classeurs 
				LEFT JOIN cdc_pupitres ON cdc_pupitres.idpup = cdc_classeurs.idpup
				LEFT JOIN cdc_personnes ON cdc_personnes.idpers = cdc_classeurs.idpers
			ORDER BY nom,prenom";
	$result = executeQuery($sql,$datas);

	echo '<ul>';
	while ($donnees = $result->fetch()) {
		$idpers 	= $donnees->idpers;
		$idpup 		= $donnees->idpup;
		$oldid		= "$idpers,$idpup";  // Sauvegarder identifiant original (en cas de modif de l'ID)
		
		$lien   = $_SERVER["PHP_SELF"].'?a=mod&idpers='.$idpers.'&idpup='.$idpup.'&oldid='.$oldid;
		echo '<li> <a href="'.$lien.'">'.$donnees->nom.' '.$donnees->prenom.' => '.$donnees->pupitre.'</a>';
	}
	echo '</ul>';

	// Ecrire bas de page et sortir : listage fini.
	echo dmaj("sais_classeur.php");
	echo "</div></body></html>";
	exit;
}

$checked = $grcommun ? " checked " : "";
$checked2 = $grindiv ? " checked " : "";
$checked3 = $ptcarnet ? " checked " : "";
$checked4 = $idpers ? " checked " : "";

echo '<form method="post" name="cla" action="'.$_SERVER["PHP_SELF"].'" onsubmit="return verif()">';
	echo '<h1>'.$title.'</h1>';
	
	echo '<table style="float:right">';
	echo '<tr>';
	echo '<p>';
		//Le for du label doit-être identique à l'id de l'input
		echo '<input type="radio" id="grcommun" class="css-grcommun" name="cl" value="grcommun" '.$checked.' />';
		echo '<label for="grcommun" class="css-grcommun">Classeur Commun</label>';
	echo '</p>';
	echo '</tr><tr>';
	echo '<p>';
		//Le for du label doit-être identique à l'id de l'input
		echo '<input type="radio" id="grindiv" class="css-grindiv" name="cl" value="grindiv" '.$checked2.' />';
		echo '<label for="grindiv" class="css-grindiv">Classeur Individuel</label>';
	echo '</p>';
	echo '</tr><tr>';
	echo '<p>';
		//Le for du label doit-être identique à l'id de l'input
		echo '<input type="checkbox" id="ptcarnet" class="css-ptcarnet" name="ptcarnet" value="1"  '.$checked3.' />';
		echo '<label for="ptcarnet" class="css-ptcarnet">Carnet Défilé</label>';
	echo '</p>';
	echo '</tr><tr>';
	echo '<td class="libel">Sélectionner un Pupire pour le classeur:</td>';
	echo '<td class="data">'; echo $LDpup->write($idpup).'</td>';	
	echo '</tr>';
	echo '<tr>';
	echo '<td>';
		echo '<input type="hidden" name="haction" value="'.$action.'" />';
		echo '<input type="hidden" name="oldid" value="'.$oldid.'" />';
	echo '</td>';
	echo '</tr>';
	echo '</table>';

echo '<p>NB: La saisie dans les zones à fond jaune pâle est obligatoire.</p>';

	$sql = "SELECT cdc_adherer.idpers,nom,prenom
			FROM cdc_adherer
				LEFT JOIN cdc_personnes ON cdc_personnes.idpers = cdc_adherer.idpers
			WHERE annee = :annee
			AND cdc_adherer.idclas IN (3,4)
			ORDER BY nom,prenom";
			$datas = array('annee' => $aadh);
			$result = executeQuery($sql,$datas);
	
	foreach ($result as $donnees) {
			echo '<input type="checkbox" id="'.$donnees->idpers.'" class="css-possession" name="possession[]"'; if($donnees->idpers == "$idpers") echo $checked4; echo 'value="'.$donnees->idpers.'" />';
			echo '<label for="'.$donnees->idpers.'" class="css-possession"> '.$donnees->nom.' '.$donnees->prenom.'</label><br/>';		
	}
	echo '<br/>';

	echo '<td class="data"><input type="submit" name="submit" value="'.$btsub.'" /></td>';
echo '</form>';

3 réponses

jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
23 sept. 2019 à 16:26
Bonjour,

Une fois de plus.. ta question est des plus obscures.... :-(

Quel est ton souci exactement ?
La récupération des cases cochées ( visiblement tu y arrives... ) ?
l'UPDATE en BDD (code que tu ne sembles pas nous montrer... ) ?
Ou l'affichage d'un lien (on ne sait où... ) ?

Tu dis :
Actuellement quand je coche deux cases, j'ai bien deux entrée dans ma BDD

Deux cases... où ça ? Parmis celles générées par ta boucle ?
ici donc :
$sql = "SELECT cdc_adherer.idpers,nom,prenom
			FROM cdc_adherer
				LEFT JOIN cdc_personnes ON cdc_personnes.idpers = cdc_adherer.idpers
			WHERE annee = :annee
			AND cdc_adherer.idclas IN (3,4)
			ORDER BY nom,prenom";
			$datas = array('annee' => $aadh);
			$result = executeQuery($sql,$datas);
	
	foreach ($result as $donnees) {
			echo '<input type="checkbox" id="'.$donnees->idpers.'" class="css-possession" name="possession[]"'; if($donnees->idpers == "$idpers") echo $checked4; echo 'value="'.$donnees->idpers.'" />';
			echo '<label for="'.$donnees->idpers.'" class="css-possession"> '.$donnees->nom.' '.$donnees->prenom.'</label><br/>';		
	}


Quand comprendras tu que tes explications sont loin d'être limpides ???
Il serait bien que tu nous expliques, par rapport au code posté :
1 - Ce que tu obtiens actuellement
2 - Ce que tu souhaites avoir
3 - le BOUT DE CODE concerné (et pas tout le pavé )
4 - Si besoin, la structure de ta bdd

0
LaChaux78 Messages postés 581 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 21 novembre 2024 32
23 sept. 2019 à 17:32
Bonjour,
Je suis conscient que mes explications ne sont peut-être pas clair et pourtant je fais beaucoup d'effort ce ce côté là.
Mon soucis réside dans mes checkbox généré par ma BDD (post que tu as retourné). Lorsque je sélectionne disons allez trois checkbox ( cela concerne name="possession[]" ) j'ai bien mes trois entrées dans ma BDD après INSERT bien sur.. Mais je veux pouvoir faire une modification de ses trois entrées en une seule fois, donc l'affichage que je souhaiterai c'est...
DUPOND Pierre - DURAND Paul - PACAL Luc => Trompette

Lorsque je clique sur mon lien pour modification j'ai mes trois entrées avec trois lignes séparément donc je peux modifier chacune de ses trois entrée séparément, mais ce n'est pas ce que je veux en fait.
DUPOND Pierre => Trompette
DURAND Paul => Trompette
PACAL Luc => Trompette
.
A priori cela peut concerner l'affichage du lien (ci-dessous)
if($action == 'list') {
	echo '<h1>'.$title.'</h1>';
	
	$sql = "SELECT *
			FROM cdc_classeurs 
				LEFT JOIN cdc_pupitres ON cdc_pupitres.idpup = cdc_classeurs.idpup
				LEFT JOIN cdc_personnes ON cdc_personnes.idpers = cdc_classeurs.idpers
			ORDER BY nom,prenom";
	$result = executeQuery($sql,$datas);

	echo '<ul>';
	while ($donnees = $result->fetch()) {
		$idpers 	= $donnees->idpers;
		$idpup 		= $donnees->idpup;
		$oldid		= "$idpers,$idpup";  // Sauvegarder identifiant original (en cas de modif de l'ID)
		
		$lien   = $_SERVER["PHP_SELF"].'?a=mod&idpers='.$idpers.'&idpup='.$idpup.'&oldid='.$oldid;
		echo '<li> <a href="'.$lien.'">'.$donnees->nom.' '.$donnees->prenom.' => '.$donnees->pupitre.'</a>';
	}
	echo '</ul>';

UPDATE
		case 'mod':
			if (is_array($possession)) {
				foreach($possession as $idpers) {
					// Constrution de la condition de modification ($oi = old ID)
					$oi = explode(",", $oldid); // Tableau des identifiants
					$condition = "WHERE (idpers='".$oi[0]."' AND idpup='".$oi[2]."')";
					// Construction de la requete de modif
					$sql = "UPDATE cdc_classeurs SET idpers = :idpers, idpup = :idpup, grcommun = :grcommun, grindiv = :grindiv, ptcarnet = :ptcarnet $condition";
					$datas = array('idpers' => $idpers, 'idpup' => $idpup, 'grcommun' => $grcommun, 'grindiv' => $grindiv, 'ptcarnet' => $ptcarnet);
					$result = executeQuery($sql,$datas);
					$typenr = "modififié"; 
					$reqmod = $sql;
					
					$sql = "SELECT nom,prenom,pupitre
							FROM cdc_personnes
								LEFT JOIN cdc_classeurs ON cdc_classeurs.idpers = cdc_personnes.idpers
								LEFT JOIN cdc_pupitres ON cdc_pupitres.idpup = cdc_classeurs.idpup
							WHERE cdc_personnes.idpers = :idpers
							AND cdc_pupitres.idpup = :idpup";
					$datas = array('idpers' => $idpers,'idpup' => $idpup);
					$result = executeQuery($sql,$datas);
					$donnees = $result->fetch();
					$success = "<span class='success'>Le classeur - ".$donnees->pupitre." - de ".$donnees->nom." ".$donnees->prenom." a été $typenr.</span>";
				}
			}
0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
23 sept. 2019 à 19:31

affichage que je souhaiterai c'est...

DUPOND Pierre - DURAND Paul - PACAL Luc => Trompette

"L'affichage" ? L'affichage où ça ?

Et comment tu sais que les trois personnes sont à "modifier" en même temps ? Pourquoi pas deux ou dix ?

Tu veux dire que tu souhaiterai pouvoir modifier d'un seul coup toutes les "personnes" provenant de cette requête ?
SELECT *
FROM cdc_classeurs 
LEFT JOIN cdc_pupitres ON cdc_pupitres.idpup = cdc_classeurs.idpup
LEFT JOIN cdc_personnes ON cdc_personnes.idpers = cdc_classeurs.idpers
ORDER BY nom,prenom


Si c'est le cas... pourquoi envoyer des paramètres dans ton lien ?
Il suffit que tu rappelles cette même requête dans ta page de modification ...



Je suis conscient que mes explications ne sont peut-être pas clair et pourtant je fais beaucoup d'effort ce ce côté là.

Ton principal souci vient du fait que tu développes des pages au fil de l'eau... sans les avoir pensé avant...
On ne commence à coder qu'après avoir réaliser un cahier des charges puis un cahier des spécificités fonctionnelles détaillées...
Sans ça, on ne sait pas où on va ni comment ....
Si un tel travail avait été réalisé, tu n'aurais aucun mal à expliquer tes besoins.

Donc... sans parler de code.... explique en détail le cheminement de ton application.
Par exemple ;
- Sur l'écran <<ici tu donnes le nom de la page >>, un lien permet de modifier << Toutes >> (ou 1.. ) personne(s)
- Si on clique sur ce lien, cela mène à la page << Nommer la page... >>
- Cette page va chercher en BDD les liste des personnes en fonction de ..<< ??? (leur id par exemple >>
- Puis, les personnes trouvées, sont <<mises à jour >> (préciser quelles données sont mises à jour.... )

bref.. j'espère que tu as compris.......

Je te laisse faire ce travail et revenir vers nous une fois que ça sera suffisamment clair.
0
LaChaux78 Messages postés 581 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 21 novembre 2024 32
24 sept. 2019 à 09:56
Bonjour, je vais repartir de zéro et recréé un post si besoin.
Merci.
0