CheckBox et MySQL

podezebi
Invité n'ayant pas de compte PHPfrance

30 août 2008, 13:58

Bonjour !
J'ai 3 table :
Une table groupe (idgroupe,libgroupe), une table exercice(idexercice,libexercice), une table groupexo(idgroupe,idexercice).

Je voudrais que le nom de mes groupes apparaissent dans un select, avoir en dessous l'ensemble des exercice dans des CheckBox, pour pouvoir enregistrer l'association Groupe/exo dans la table Groupe exo!

Voila ce que j'ai pour le moment :
<?php
			//Connexion à la base de donnée
			mysql_connect("localhost","root","root");
			mysql_select_db("Muscu");
			
			// Creation du select
			$sql='SELECT * FROM groupe';
			$query = mysql_query($sql);
			?>
			<form method="POST" action="aj_groupexo.php">
				<select name="choix">
				<?php
					if(isset($_POST[choix])) 
						$d=''; 
					else 
						$d='selected';
				?>
				<option <?php echo $d;?>></option>
				<?php
					while ($data2 = mysql_fetch_array ($query))
						{
							if(isset($_POST[choix]) && $_POST[choix]==$data2['idgroupe'])  
							$d='selected';
							else $d='';
						?>
	            <option value="<?php echo $data2['idgroupe']; ?>" <?php echo $d;?>> <?php echo $data2['libgroupe'];?></option></br>
	            <?php 
						}?>
				</select><p>
				<?php
					//affichage des Types
					$sql2 = "SELECT * FROM exercice";
					$query2 = mysql_query($sql2);
					while ($donnees = mysql_fetch_array($query2)) 
						{
							echo '<input type="checkbox" name="exercice[]" value="'.$donnees['idexercice'].'" />';
							echo $donnees['libexercice'].'</br>';
						}
				?>
				<p>
				<input type="submit" value="envoyer"  />
			</form>
Et dans mon aj_groupexo.php
<?php
		// Recuperation des variables
		$choix = $_POST['choix'];
		$exercice = $_POST['exercice'];
			
		//Connexion à la base de donnée
		mysql_connect("localhost","root","root");
		mysql_select_db("Muscu");

		//Requete sql
		$req = "INSERT INTO groupexo (idgroupe,idexercice) VALUES('".$choix."','".$exercice."')";
		mysql_query($req);
		
		//Affichage des entrainements créés
		$req2 ="SELECT * 
				FROM groupexo 
				INNER JOIN groupe ON groupexo.groupe_idgroupe = groupe.idgroupe 
				INNER JOIN exercice ON groupexo.exercice_idexercice = exercice.idexercice";
		$query2 = mysql_query($req2);
		
			
		?>
		<table>
			<tr>
				<td>Ngroupe</td>
				<td>groupe</>
				<td>N° exo</td>
				<td>exo</td>
			</tr>
		<?php
		while ($donnees = mysql_fetch_array($query2)) 
			{
		?>
		<tr>
			<td><?php echo $donnees['groupe_idgroupe']; ?></td>
			<td><?php echo $donnees['libgroupe']; ?></td>
			<td><?php echo $donnees['exercice_idexercice']; ?></td>
			<td><?php echo $donnees['libexercice']; ?></td>
		</tr>
		<?php }
		?>
Bien sur, vous vous en doutez, ca ne marche pas !
mon probleme c'est qu'en fait, je ne vois pas du tout comment je vais pouvoir faire entrer ma variable exercice[] dans ma table !

Si quelqu'un peu m'aider ca serait super sympas !
merci a vous !!!

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

30 août 2008, 14:58

Tu as nommé les checkbox "exercice[]" dans ton formulaire et ça c'est bien, donc il faut savoir que PHP reçoit ces champs comme un tableau contenant la liste des valeurs cochées dans les checkbox.

Et c'est au niveau de l'instruction PHP que tu récupère ce tableau et ça tu l'as fait c'est bien :
$exercice = $_POST["exercice"]; // retourne un tableau des valeurs cochées dans les checkbox 
Maintenant, ce que tu dois faire est de parcourir le tableau $exercice pour accéder aux valeurs une par une puis exécuter ta requête INSERT pour chacune.

C'est logique : Pour associer un groupe G1 à plusieurs exercices choisis il faut exécuter la requête INSERT plusieurs fois pour chaque couple G1, exercice X.

Voici la boucle manquante :
if (is_array($exercice)) foreach($exercice as $id_exercice)
{
    //Requete sql
        $req = "INSERT INTO groupexo (idgroupe,idexercice) VALUES('".$choix."','".$id_exercice."')";
        mysql_query($req); 
}
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Podezebi
Invité n'ayant pas de compte PHPfrance

30 août 2008, 18:02

Merci beaucoup !!!
j'ai fait la modif...
mais le probleme c'est que ca n'ajoute toujours rien du tout a ma base :s

je me demande si j'ai pas un probleme de type de valeur (int, varchar...)
je suis un peu pommer la

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

30 août 2008, 20:50

Y'a un hic là.

En regardant ta requête :
$req2 ="SELECT * 
                FROM groupexo 
                INNER JOIN groupe ON groupexo.groupe_idgroupe = groupe.idgroupe 
                INNER JOIN exercice ON groupexo.exercice_idexercice = exercice.idexercice"; 
Il semble que les noms des champs de la table "groupexo" ne sont pas les mêmes que ceux que tu utilise dans le INSERT :
$req = "INSERT INTO groupexo (idgroupe,idexercice) VALUES('".$choix."','".$id_exercice."')"; 
ni ceux que tu as présenté au début dans :
Bonjour !
J'ai 3 table :
Une table groupe (idgroupe,libgroupe), une table exercice(idexercice,libexercice), une table groupexo(idgroupe,idexercice).
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Podezebi
Invité n'ayant pas de compte PHPfrance

31 août 2008, 10:11

Mais ouiiii !!! je suis un cretin pfff !!!
c'était la sous mon nez !


Merci vraiment de ton aide !!! ca fonctionne impeccable maintenant!