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 :

Checkbox cochée en fonction de la db


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2013
    Messages : 12
    Points : 10
    Points
    10
    Par défaut Checkbox cochée en fonction de la db
    Bonjour ,

    J'ai crée un système d'hobby pour mes utilisateurs , je souhaite afficher tout les hobby de ma db et coché que ceux que possède l'utilisateurs

    Voici ma requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT hobby.id as idhobby hobby.nom AS nomHobby FROM liaison1,hobby,membre WHERE id_membre = $affMembre->id AND id_hobby = hobby.id AND membre.id = id_membre;
    Ensuite j'effectue ceci pour afficher les donnée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <p><label><?php echo $affHobbyModif->nomHobby?></label><input type="checkbox" value="<?php echo $affHobbyModif->idhobby?>" <?php if($affcheck->id_membre == $affPreModif->id) {echo "checked='checked'";} ?>/></p>
    Quand je fais ceci ca m'affiche que les checkbox cochée et pas les autres .

    Merci pour votre aide .

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- La requête est mauvaise.

    Actuellement, tu as :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT hobby.id as idhobby hobby.nom AS nomHobby 
    FROM liaison1,hobby,membre 
    WHERE id_membre = $affMembre->id 
    AND id_hobby = hobby.id 
    AND membre.id = id_membre;

    Il est préférable d'utiliser les JOINTURES SQL :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT HH.id as idhobby HH.nom AS nomHobby 
    FROM hobby HH
    INNER JOIN liaison1 LL
      ON LL.id_hobby = HH.id
    INNER JOIN membre MM
      ON  LL.id_membre = MM.id
    WHERE LL.id_membre = $affMembre->id ;

    2- Bien faire la différence entre INNER JOIN et LEFT JOIN

    Dans ton cas, si on écrit "INNER JOIN...", alors on obtient le résultat que tu as : UNIQUEMENT CEUX qui ont un hobby d'enregistré.
    Pour "élargir" aux membres qui n'ont pas (encore) de hobby enregistré : "LEFT JOIN...".


    3- A priori, essaie :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT HH.id as idhobby HH.nom AS nomHobby 
    FROM hobby HH
    LEFT JOIN liaison1 LL
      ON LL.id_hobby = HH.id
    LEFT JOIN membre MM
      ON  LL.id_membre = MM.id
    WHERE LL.id_membre = $affMembre->id ;

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2013
    Messages : 12
    Points : 10
    Points
    10
    Par défaut Tester
    Bonjour ,

    Cela fonctionne mais ca n'affiche pas les hobby qui ne sont pas possédé par l'utilisateur , le but est que tous les hobby de la db s'affiche mais que ceux possédé soit coché .

  4. #4
    Invité
    Invité(e)
    Par défaut
    ...Cela fonctionne...
    Laquelle ??


    Il faut alors 2 requêtes.

    1- Toutes les checkbox :

    SELECT HH.id as idhobby HH.nom AS nomHobby
    FROM hobby HH;

    2- les checkbox cochées, pour un membre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT HH.id as idchecked
    FROM hobby HH
    INNER JOIN liaison1 LL
      ON LL.id_hobby = HH.id
    INNER JOIN membre MM
      ON  LL.id_membre = MM.id
    WHERE LL.id_membre = $affMembre->id ;
    La 1ère affiche toutes les checkbox, la 2ème coche celles qui le sont.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2013
    Messages : 12
    Points : 10
    Points
    10
    Par défaut Sur la bonne voie
    Merci pour ton aide , je suis sur la bonne voie , voici mon code entier :

    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
    28
    29
    <?php
    			$seltous ="SELECT hobby.id as idhobby, hobby.nom AS nomHobby 
    				FROM hobby;";
     
    			$exeseltous = mysqli_query($connect,$seltous);
     
    			$selHobbyModif = "SELECT hobby.id as idchecked,id_membre
    			FROM hobby
    			INNER JOIN liaison1
      			ON liaison1.id_hobby = hobby.id
    			INNER JOIN membre 
      			ON  liaison1.id_membre = membre.id
    			WHERE liaison1.id_membre = $affPreModif->id;
    			";
     
    			$exeHobbyModif = mysqli_query($connect,$selHobbyModif);
     
    			while($affHobbyModif = mysqli_fetch_object($exeseltous)) {
     
     
    		?>
     
    		<p><label><?php echo $affHobbyModif->nomHobby?></label><input type="checkbox" value="<?php echo $affHobbyModif->idhobby?>" <?php while($affhobcheck = mysqli_fetch_object($exeHobbyModif)) { echo "checked='checked'";} ?>/></p>
     
    		<?php
    		}
    		mysqli_free_result($exeHobbyModif);
     
    		?>
    Le problème est celui-ci à présent : j'ai 2 hobby dans ma db , bowling et piscine .

    l'utilisateur 1 à les 2 hobby
    l'utilisateur 2 à que bowling

    Pour l'utilisateur 1 , seul le bowling est coché et pas le piscine ...

    merci .

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bon.

    Au lieu de donner les infos au compte-goutte, merci d'expliquer ce que tu veux faire vraiment !

    • C'est une "fiche membre" (un seul membre) ?
    • C'est un "listing des membres" (tous) ?
    • $affPreModif->id sort d'où ?
    • ...

    ET AUSSI : AFFICHE les résultats de tes 2 requêtes !
    Il faut au moins que tu saches ce qu'ils contiennent pour comprendre comment les utiliser.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2013
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Il s'agit d'un backoffice , on clique sur modifier et on peut modifier le membre (voir capture d'écran ci-jointe)

    Nom : Capture d’écran 2018-10-08 à 15.33.14.png
Affichages : 159
Taille : 59,8 Ko

    Nom : Capture d’écran 2018-10-08 à 15.33.26.png
Affichages : 194
Taille : 70,2 Ko

    $affpremodif->id correspond a l'id du membre reçu en get que l'on veut modifier .

  8. #8
    Invité
    Invité(e)
    Par défaut
    OK.
    Donc pour UN SEUL membre.

    Code php : 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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    <?php
    // -----------------
    // 1- TOUS les Hobby
    $hobby_All = "SELECT hobby.id as idhobby, hobby.nom AS nomHobby 
    	FROM hobby;";
    $exehobby_All = mysqli_query($connect, $hobby_All);
     
    // -----------------
    // 2- on crée un array des id 
    $hobby_All_array = array();
    while($row_All = mysqli_fetch_object($exehobby_All))  // on boucle sur TOUS les Hobby
    {
    	$hobby_All_array[$row_All->idhobby] = $row_All->nomHobby; // on met l'id en index
    }
    var_dump($hobby_All_array); // TEST
     
    mysqli_free_result($exehobby_All);
     
    // -----------------
    // 3- Les Hobby COCHES pour CE MEMBRE
    $hobby_User = "SELECT hobby.id as idchecked
    	FROM hobby
    	INNER JOIN liaison1
    	  ON liaison1.id_hobby = hobby.id
    	INNER JOIN membre 
    	  ON  liaison1.id_membre = membre.id
    	WHERE liaison1.id_membre = $affPreModif->id;
    	";
    $exehobby_User = mysqli_query($connect, $hobby_User);
     
    // -----------------
    // 4- on crée un array des id cochés
    $hobby_User_array = array();
    while($row = mysqli_fetch_object($exehobby_User))  // on boucle sur les Hobby COCHES
    {
    	$hobby_User_array[] = $row->idchecked;
    }
    var_dump($hobby_User_array); // TEST
     
    mysqli_free_result($exehobby_User);
     
    // -----------------
    // 5- on affiche les cases à cocher
    foreach($hobby_All_array as $idhobby => $nomHobby) // on boucle sur TOUS les Hobby
    {
    	$checked = ( in_array( $idhobby, $hobby_User_array ) )? ' checked="checked"' : '';
    ?>
    <p>
    	<label><input type="checkbox" value="<?php echo $idhobby; ?>" <?php echo $checked; ?>/> <?php echo $nomHobby; ?></label>
    </p>
    <?php
    }
    // -----------------
    Dernière modification par Invité ; 08/10/2018 à 16h57.

Discussions similaires

  1. Telecharger des fichiers en fonction des checkbox cochées
    Par simos dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 13/01/2009, 15h25
  2. Réponses: 0
    Dernier message: 13/01/2009, 11h47
  3. fonction qui calcule le nombre de checkbox cochés
    Par namstou3 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/10/2007, 13h55
  4. Réponses: 2
    Dernier message: 10/06/2007, 19h41
  5. fonction pour compter le nombre de checkbox coché ?
    Par Death83 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 15/09/2005, 11h28

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