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

Langage PHP Discussion :

[Tableaux] recuperer valeurs dans checkbox


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut [Tableaux] recuperer valeurs dans checkbox
    Bonsoir, je bidouille une petite application php/mysql permettant de lister des personnes et leur affiliation à différents groupes.

    j'ai donc créé 3 tables : contact(id_contact, nom, prenom,...), grp (id_grp,nom_grp,...), grp_contact (id_grp_cont, id_grp, id_contact stockant l'affiliation des personnes aux différents groupes).
    Les formulaires d'ajout et de suppression sont réalisés et fonctionnels.
    Par contre le formulaire de modification des affiliations d'une personne me pose problème : il doit afficher sous forme de cases à cocher tous les groupes d'affiliation possibles où chaque groupe déjà sélectionné doit être coché.

    Pour cela, je procède ainsi :
    au niveau des requêtes :
    requete "modifgrp" pour récupérer un contact et les groupes auxquels il appartient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM grp_contact,contact WHERE contact.id_contact = 1 AND grp_contact.id_contact=contact.id_contact
    requete "grp" pour recuperer l'ensemble des groupes possibles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM grp ORDER BY nom_grp ASC
    et ainsi au niveau de l'affichage, après recherches multiples de tutoriaux :

    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
    <?php
     
    //declaration de la variable $choix
     
    $choix=$row_modifgrp['id_grp'];
     
    //fonction permettant de boucler afin de déterminer les cases déjà cochées
     
    function choixgrp($choix) 
    {
    	GLOBAL $grpsel;
       	for ($i = 0; $i < count($grpsel); $i++)
          	if($grpsel[$i]==$choix)
            return true;
    }
    // boucle pour afficher toutes les cases et cocher celles déjà sélectionnées
    while($data = mysql_fetch_array($grp))
    {?>
    <input type="checkbox" name="grpsel[]" value="$choix" <?php if(choixgrp($choix)) {echo "CHECKED";}?> >
    <?php
    echo ($data['nom_grp']);
    echo "<br/>";
    }
    mysql_close();
    ?>
    Avec ça, l'ensemble des cases à cocher s'affichent correctement... mais elles restent désespérement vides.
    A vrai dire j'ai de gros doutes sur ma variable $choix ainsi que sur ma fonction choixgrp...
    un coup de main serait bienvenu !
    Merci d'avance.

  2. #2
    Membre averti Avatar de spilliaert
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 268
    Points : 307
    Points
    307
    Par défaut
    bonsoir,

    une question: comment la variable '$row_modifgrp['id_grp'];' est-elle obtenue ??? peut-être que ça vient de là si ya pas de messages d'erreur

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    salut spillaert,
    je la recupere comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $row_modifgrp = mysql_fetch_assoc($modifgrp);

  4. #4
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function choixgrp($choix) 
    { 
       GLOBAL $grpsel; 
          for ($i = 0; $i < count($grpsel); $i++) 
             if($grpsel[$i]==$choix) 
            return true; 
    }
    Pourquoi GLOBAL $grpsel; ?

    Si tu veux utiliser ce tableau via les global je ferais plutot

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $GLOBALS["grpsel"] = array();
    // .. t'empiles des valeurs
    function choixgrp($choix) 
    { 
          for ($i = 0; $i < count($GLOBALS["grpsel"]); $i++) 
             if($GLOBALS["grpsel"][$i]==$choix) 
            return true; 
    }
    Mais bon je vois pas l'interets d'utiliser les globales ici.

  5. #5
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Salut

    As-tu essayé en laissant un espace entre le premier (") et CHECKED ?

    Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
    C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.

  6. #6
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    Sa ne changera rien vu qu il y à deja un espace avant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <input type="checkbox" name="grpsel[]" value="$choix" <?php if(choixgrp($choix)) {echo "CHECKED";}?> > 
     
    ="$choix" <?php if(choixgrp($choix)) {echo "CHECKED";}?>

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    concernant l'espace, ça ne change malheureusement rien.
    Concernant, l'utilisation des globales, c'est par igorance...
    j'ai récupéré ce sript sur le net afin de créer ma fonction. Il est vrai que la suppression de :
    ne change absolument rien au résultat : aucun message d'erreur et les cases restent décochées.
    d'autres suggestions seront les bienvenues !

  8. #8
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    regarde comment j'ai invoqué la variables globales plus haut.

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    J'ai remplacé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function choixgrp($choix) 
    { 
       GLOBAL $grpsel; 
          for ($i = 0; $i < count($grpsel); $i++) 
             if($grpsel[$i]==$choix) 
            return true; 
    }
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $GLOBALS["grpsel"] = array(); 
    // .. t'empiles des valeurs 
    function choixgrp($choix) 
    { 
          for ($i = 0; $i < count($GLOBALS["grpsel"]); $i++) 
             if($GLOBALS["grpsel"][$i]==$choix) 
            return true; 
    }
    mais qu'entends tu par "t'empiles des valeurs" ?
    dois-je inclure des valeurs dans array (...); ?

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    suis toujours dans le brouillard. voici l'ensemble du code de la page :
    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
    <?php require_once('...');
     
    $id_contact = $_GET["id_contact"];
     
    mysql_select_db($..., $...);
    $rscontact=mysql_query("SELECT * FROM contact WHERE contact.id_contact='$id_contact'");
    $row_rscontact = mysql_fetch_assoc($rscontact);
     
    mysql_select_db($..., $...);
    $modifgrp=mysql_query("SELECT * FROM contact,grp_contact WHERE contact.id_contact='$id_contact' AND 
    
    grp_contact.id_contact=contact.id_contact");
    $row_modifgrp = mysql_fetch_assoc($modifgrp);
     
    mysql_select_db($..., $...);
    $grp=mysql_query("SELECT * FROM grp ORDER BY nom_grp ASC");
    ?>
     
    <!DOCTYPE HTML PUBLIC...
    <html>
    <body>
     
    <p>Contact :<br/>
    <strong><?php echo $row_rscontact['nom']; ?> <?php echo $row_rscontact['prenom']; ?></strong><br />
    <?php echo $row_rscontact['rue']; ?> <br/>
    <?php echo $row_rscontact['cp']; ?> <?php echo $row_rscontact['ville']; ?></p>
     
    <h4>Appartient au groupe :</h4>
     
    <form action="modif_inscr_grp2.php?id_contact=$id_contact" method="POST" enctype="multipart/form-data" name="grpmodif" 
     
    id="grpmodif">
    <?php
     
    //declaration de la variable $choix
    $choix=$row_modifgrp['id_grp'];
     
    //fonction permettant de boucler afin de déterminer les cases déjà cochées
     
    $GLOBALS["grpsel"] = array(); 
    // .. t'empiles des valeurs 
    function choixgrp($choix) 
    { 
          for ($i = 0; $i < count($GLOBALS["grpsel"]); $i++) 
             if($GLOBALS["grpsel"][$i]==$choix) 
            return true; 
    } 
     
    // boucle pour afficher toutes les cases et cocher celles déjà sélectionnées
    while($data = mysql_fetch_array($grp))
    {?>
    <input type="checkbox" name="grpsel[]" value="$choix" <?php if(choixgrp($choix)) {echo " CHECKED";}?> >
    <?php
    echo ($data['nom_grp']);
    echo "<br/>";
    }
    mysql_close();
    ?>
    <input name="id_contact" type="hidden" value="$id_contact" />
    <p align="center"><input name="submit" type="submit" value="Modifier" /></p>
    </form>
     
    </body>
    </html>
    si quelqu'un a une idée ?

  11. #11
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Jette un oeil là dessus (non testé) :
    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
     
    $id_contact = $_GET["id_contact"];
     
    //récuperation de tous les groupes
    $sql = "SELECT id_grp, nom_grp FROM grp ORDER BY nom_grp ASC";
    $req = mysql_query($sql) or die(mysql_error().$sql);
     
    while($data = mysql_fetch_assoc($req)) {
       //On va voir si ce groupe est selectionné
       $sql = "SELECT * FROM grp_contact WHERE id_contact = $id_contact AND id_grp = ".$data['id_grp'];
       $req2 = mysql_query($sql) or die(mysql_error().$sql);
       $checked = mysql_num_rows($req2) > 0;
     
       //On affiche la checkbox
       echo '<div>';
       echo '<input type="checkbox" 
                    name="grpsel[]" id="grpsel_'.$data['id_grp"].'" 
                    value="'.$data['id_grp"].'" 
                    '.($checked?'checked="checked"':'').' />';
       echo '<label for="grpsel_'.$data['id_grp"].'">'.$data['nom_grp'].'</label>';
       echo '</div>';
    }

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    merci pour le coup de main
    j'ai testé et j'ai une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Parse error: parse error, expecting `']'' in c:\
    sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    value="'.$data['id_grp"].'"
    je ne comprend pas pourquoi...

  13. #13
    Membre du Club
    Développeur Web
    Inscrit en
    Juin 2003
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2003
    Messages : 89
    Points : 47
    Points
    47
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    value="'.$data['id_grp"].'"
    id_grp est précédé d'une quote simple ' et est suivi d'une double quote "

    il faut mettre soit l'un soit l'autre

  14. #14
    Membre averti Avatar de gofono_bass
    Inscrit en
    Décembre 2005
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2005
    Messages : 383
    Points : 448
    Points
    448
    Par défaut
    et dans ton cas, je dirais que le ' simple serait mieux....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    value="'.$data['id_grp'].'"
    mais pourquoi tu cours?

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    ça venait bien de là et à présent tout est OK.
    Merci à tous pour votre aide.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 09/01/2006, 01h24
  2. [Tableaux] Recherche valeur dans tableaux
    Par Kaimann dans le forum Langage
    Réponses: 10
    Dernier message: 21/10/2005, 11h57
  3. [Tableaux] recuperation valeurs dun tableau ou d'un array
    Par pascale86 dans le forum Langage
    Réponses: 5
    Dernier message: 11/10/2005, 16h14
  4. pb recuperation valeur de checkbox
    Par isa21493 dans le forum ASP
    Réponses: 7
    Dernier message: 14/06/2005, 13h32
  5. pb de recuperation valeur dans un champ texte
    Par kikou33 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 14/06/2005, 11h43

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