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 :

affichage checkbox coché ou décoché selon SQL [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué Avatar de legrandse
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2010
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 350
    Points : 149
    Points
    149
    Par défaut affichage checkbox coché ou décoché selon SQL
    Bonjour à tous,

    Je vous donne mon exemple:
    J'ai créé des agences qui gèrent des maisons de vacances.

    J'ai donc un formulaire qui affiche par agence, toutes les maisons disponibles et il faut cocher celles qui doivent être gérées ou non par cette agence.
    Jusque là pas de problème pour moi puisque l'on part du principe qu'aucune maison n'est cochée au début.

    Voici où cela se corse:
    Lorsque l'on retourne dans le formulaire pour mettre à jour les gestions de maisons, je n'arrive pas à afficher celles qui sont déjà gérée par l'agence.

    Pouvez-vous m'aider svp

    Voici mon script:
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    include ("connexion.php");
     $id_agency = $_GET['link_id'];
     
    //Affichage données agence
    $stmtAgency = $connexion->prepare("SELECT * FROM agency WHERE id = :id");
    $stmtAgency->BindParam(":id",$id_agency);
    $stmtAgency->execute();
    $dspAgency = $stmtAgency->fetch(PDO::FETCH_OBJ);
     
    //affichage contenu maisons
    $stmtHouse = $connexion->prepare("SELECT * FROM houses");
    $stmtHouse->execute();
     
    //affichage maison liées
    $stmtLinked = $connexion->prepare("SELECT * FROM houses_linked WHERE id_agency = :id ");
    $stmtLinked->BindParam(":id",$id_agency);
    $stmtLinked->execute();
     
     
     
    if(isset($_POST['edit']))
    {
     
     
       $checkbox = $_POST['name'];
     
    	for ($i=0; $i<sizeof($checkbox);$i++) {
        $stmtInsert = $connexion->prepare("INSERT INTO houses_linked (id_agency, id_house) VALUE (:id_agency, '".$checkbox[$i]."') ");
    	$stmtInsert->BindParam(":id_agency",$id_agency);
    	//$stmtInsert->BindParam(":id_house",$checkbox[$i]);
    	$stmtInsert->execute();
    	}
        header("Location:linkhouse.php?ok&id=0");
     
     
     
    }
     
     
     
     
    ?>
     
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Untitled Document</title>
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
      <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    </head>
     
    <body>
    <div class="container">
      <div class="jumbotron">
        <h1>Lier une maison</h1>
        <p>Complétez les champs ci-dessous selon les critères définis.
        </p>
      </div>
     
      <p>
      Agence : <?php echo $dspAgency->name; ?>
      </p>
    		  				<?php
                            if(isset($error))
                            {
                                foreach($error as $error)
                                {
                                ?>
                                <div class="alert alert-danger alert-dismissable" >
                                <a href="edit.php?false" class="close" data-dismiss="alert" aria-label="close">&times;</a>
                                <i class="glyphicon glyphicon-warning-sign"></i> &nbsp; <?php echo $error; ?> !
                                </div>
     
                            <?php }
                            }
     
                            else if(isset($_GET['ok']))
                            {
     
    						?>
                            <div class="alert alert-success" id="success">
                                    <i class="glyphicon glyphicon-log-in"></i> &nbsp; Modification effectuée ! &nbsp;<a href="index.php">Retour</a>
                                </div>
     
    						<?php } ?>
     
     
                   <form class="form-horizontal" method="post">
     
                    <?php while( $dspHouse = $stmtHouse->fetch(PDO::FETCH_OBJ) ) {
    					?>
                    <div class="form-group">
                      <label class="control-label col-sm-2" for="name"><?php echo $dspHouse->name;?>:</label>
                      <div class="col-sm-10">
                        <input type="checkbox" class="form-control" name="name[]"  value="<?php echo $dspHouse->id;?>">
                        </div>
                      </div>
                    <?php }
    				?>
     
                    <div class="form-group">
                      <div class="col-sm-offset-2 col-sm-10">
                        <button type="submit" class="btn btn-default" id="edit" name="edit">Envoyer</button>
                        &nbsp;<a href="index.php">Annuler</a>
                      </div>
                    </div>
     
     
     
                  </form> 
    </div>
     
    </body>
    </html>

    sachant que le contenu de ma table houses_linked est composé comme suit:
    id_agency id_house
    1 1
    1 2
    3 1
    3 2
    3 3




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //affichage maison liées
    $stmtLinked = $connexion->prepare("SELECT * FROM houses_linked WHERE id_agency = :id ");
    $stmtLinked->BindParam(":id",$id_agency);
    $stmtLinked->execute();
    est la requête qui récupère les maisons gérées par agence et retourne des nombres 1, 2, 3....


    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="checkbox" class="form-control" name="name[]"  value="<?php echo $dspHouse->id;?>">
    devrait afficher l'attribut checked="checked" selon le résultat de la requète $stmtLinked

    Sauf que je ne vois pas comment intégrer cette requête

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Tu peux récupérer les ids des maisons gérées dans un tableau et vérifier lors de l'affichage de la checkboxes si l'id est dans ton tableau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $stmtLinked = $connexion->prepare("SELECT id_house FROM houses_linked WHERE id_agency = :id ");
    $stmtLinked->BindParam(":id",$id_agency);
    $stmtLinked->execute();
    $idHousesAgence = $stmtLinked->fetchAll(PDO::FETCH_COLUMN);
    (On notera l'usage de FETCH_COLUMN pour récupérer directement la colonne)

    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <?php $checked = in_array($dspHouse->id, $idHousesAgence)?'checked':''; ?>
    <input type="checkbox" class="form-control" name="name[]"  value="<?php echo $dspHouse->id;?>" <?=$checked;?> >
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre habitué Avatar de legrandse
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2010
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 350
    Points : 149
    Points
    149
    Par défaut
    Merci Celira.

    Cà fonctionne parfaitement

    J'ai juste adapté au résultat souhaité : fetchAll(PDO::FETCH_COLUMN,1);

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

Discussions similaires

  1. checkbox cochée selon variable sur 2 frames
    Par themateo dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 08/11/2007, 08h52
  2. Checkbox coché / décoché
    Par Ikonic dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/06/2007, 13h47
  3. [AJAX] Exécuter une requête SQL des la checkbox cochée
    Par dje064 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 31/05/2007, 11h25
  4. Etat coché ou décoché d'une checkbox
    Par El Saigneur dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/10/2004, 16h56

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