IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Affectations multiples via cases à cocher [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 2
    Par défaut Affectations multiples via cases à cocher
    Bonjour à tous

    Voici mon problème.

    Je souhaite affecter des classes à des profs dans le cadre de la création d'une application de gestion d'un suivi d'élèves.

    Ma base de donnée comporte une table 'profs' et une table 'classes', ainsi qu'une table "jointure_profs_classes", où figureront les enregistrements des affectations profs/classes.

    J'ai décidé d'utiliser, pour la saisie des affectations des classes aux profs, un tableau qui affiche les profs sur les lignes, et les classes sur les colonnes. La saisie dans chaque case se fait avec des cases à cocher.

    Le code suivant affiche bien le tableau souhaité, mais j'ai bien sûr un énorme doute sur la ligne qui est chargée d'afficher les cases à cocher, afin de pouvoir récupérer les multiples associations profs/classes dans le fichier php cible.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    $requete_classes = $bdd->query('SELECT * FROM classes');
    $requete_profs = $bdd->query('SELECT * FROM profs ORDER BY nom');
     
    echo "<TABLE BORDER=1>";
    echo "<tr><td colspan=2></td>";
     
    while ($donnees_classes = $requete_classes->fetch())
    {
    	echo "<td>".$donnees_classes['classe_nom']."</td>";
    }
     
    echo "</tr>";
    while ($donnees_profs = $requete_profs->fetch())
    {
    	echo "<tr><td>" . $donnees_profs['nom'] . "\n </td><td>" . $donnees_profs['prenom'] . "\n </td>";
    	$requete_classes = $bdd->query('SELECT * FROM classes');
    	while ($donnees_classes_affich = $requete_classes->fetch())
    		{
    		echo "<td><input type='checkbox' name='affectation[]' value='" . $donnees_profs['prof_id'] . "'></td>";
    		}
    	echo "</tr>";
    }
     
    $requete_profs->closeCursor();
    $requete_classes->closeCursor();
     
    echo "</TABLE>";
    Par ailleurs, je suis pour le moment dans le plus grand flou artistique en ce qui concerne le code PHP à utiliser pour effectuer les enregistrements dans la table de jointure grâce au fichier php cible. Auriez-vous une idée sur une solution éventuelle ?

    Un grand merci d'avance.

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    Doute justifié, avec ton code <input type='checkbox' name='affectation[]' value='" . $donnees_profs['prof_id'] . "'> comment feras-tu pour savoir à quelle classe correspond la case à cocher ?
    Il faudrait que tu mixes les id.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    1/ évite les "SELECT * ..." et mets les noms des champs qui seront effectivement utiles (et utilisés)
    Pour les classes, je suppose que tu as un identifiant unique classe_id
    Pour les profs, tu as un identifiant unique prof_id (vu dans ton code)
    2/ Pour récupérer correctement les liens classe-prof au niveau des checkbox, il faut bien les identifier.
    Remplace donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	echo "<td><input type='checkbox' name='affectation[]' value='" . $donnees_profs['prof_id'] . "'></td>";
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	echo '<td><input type="checkbox" name="affectation[' . $donnees_classes_affich['classe_id'] . ']" value="' . $donnees_profs['prof_id'] . '"></td>';
    Tu remarqueras que j'ai interverti les ' et " (pour moins de confusion).
    4/ Récupération :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $affectation_array = $_POST['affectation']; // array
    foreach($affectation_array as $classes_array){
    	foreach($classes_array as $id_class => $id_prof){
    		// pour chaque affectation, on récupère le couple $id_class/$id_prof
    		echo $id_class.' => '.$id_prof.'<br />';
    	}
    }
    N.B. Tu peux vérifier la structure de l'array avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo '<pre>';
    print_r ($affectation_array);
    echo '</pre>';
    Autre solution : en mettant "id_class-id_prof" en value :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	echo '<td><input type="checkbox" name="affectation[]" value="' . $donnees_classes_affich['classe_id'].'-'.$donnees_profs['prof_id'] . '"></td>';
    On "économise" un foreach :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $affectation_array = $_POST['affectation']; // array
    foreach($affectation_array as $id_class_id_prof){
    	$couple_array = explode('-', $id_class_id_prof);
    	echo $couple_array[0].' => '.$couple_array[1].'<br />';
    }

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 2
    Par défaut
    Merci à tous les 2 !

    La solution de jreaux62 fonctionne au poil, merci pour le temps passé pour me proposer cette solution.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Affecter macro à une case à cocher
    Par hypothese dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/01/2013, 17h59
  2. [AC-2003] Print via cases à cocher
    Par lucas-18 dans le forum IHM
    Réponses: 8
    Dernier message: 25/08/2009, 12h00
  3. Table de multiplication avec case à cocher
    Par DBA_OCP dans le forum Langage
    Réponses: 12
    Dernier message: 11/03/2009, 20h41
  4. Problemes multiples avec "case à cocher"
    Par guidzit dans le forum Access
    Réponses: 13
    Dernier message: 21/09/2006, 14h46
  5. Sélection dans un query via case à cocher dans un form
    Par Bernard123 dans le forum Access
    Réponses: 2
    Dernier message: 22/12/2005, 14h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo