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] Menu déroulant - CheckBox


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 172
    Points : 74
    Points
    74
    Par défaut [Tableaux] Menu déroulant - CheckBox
    Bonjour,

    J'ai mis en place un formulaire permettant de lier des groupes à un utilisateur.
    Ainsi, lorsque j'accede à la page d'edition de l'utilisateur, il m'est possible de le lier (ou pas ...) à un groupe.
    Pour l'instant, les groupes sont rangé dans une liste déroulante, mais le probleme vient du fait qu'a partir du moment ou je veux lier l'utilisateur un plusieur groupes, je dois refaire l'action en boucle, c.a.d sélection du groupe - ok - sélection de l'utilisateur - sélection du groupe - ok - sélection de l'utilisateur - ....

    Je voudrais savoir si il était possible d'afficher les groupes sous forme de CheckBox (permettant donc une sélection multiples) et comment faire?

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    il te suffit de changer le type de génération des groupes... c'est pas vraiment compliqué... tu sais faire des checkbox non ?

    sinon il y a aussi la possibilité de faire un select multiple

  3. #3
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 172
    Points : 74
    Points
    74
    Par défaut
    C'est pas vraiment le select multiple ou le checkBox qui me pose probleme, c'est l'enregistrement dans la base de données.

    Voici mon code avec les checkbox:
    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
     
    <form action="../op/op.UsrMgr.php" name="form<?print $us->getID();?>_2" onsubmit="return checkForm2('<?print $us->getID();?>');">
            <input type="Hidden" name="action" value="addgroup">
            <input type="Hidden" name="userid" value="<?print $us->getID();?>">
            <table>
                <tr>
                    <td class="inputDescription"><?printMLText("add_groups");?>:</td>
                    <td>    
                            <?
                                foreach ($allGroups as $currGroup)
                                    if (!$us->isInGroup($currGroup))
                                        print "<input type='checkbox' name='groupid' value=\"".$currGroup->getID()."\">" . $currGroup->getName() . " / \n";;
                            ?>
                        </select>
                    </td>
                </tr>
                <tr>
                    <td colspan="2"><br><input type="Submit"></td>
                </tr>
            </table>
            </form>
    ça renvoit sur l'action :
    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
     
    else if ($action == "addgroup")
    {
        printStartBox(getMLText("add_group"));
        print "<div class=\"standardText\">";
        printMLText("adding_groups");
     
        $member = getUser($userid);
        $newGroup = getGroup($groupid);
     
        $member->addGroup($newGroup);
     
        printMLText("op_finished");
        printGoto(array(array(getMLText("member_management"), "../out/out.UsrMgr.php")));
    }
    qui va donc m'enregistrer dans la base grace à la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function addGroup($group)
        {
            GLOBAL $db;
     
            $queryStr = "INSERT INTO tblGroupMembers (groupID, userID) VALUES (".$group->getID().", ".$this->_id.")";
            $res = $db->getResult($queryStr);
            if ($res)
                return false;
     
            unset($this->_users);
            return true;
        }
    Mon probleme, c'est que pour l'instant, même si je sélectionne plusieurs groupes, il ne m'en enregistre qu'un seul dans la base, et je ne vois pas comment faire pour qu'il prennent en compte tous ce que je sélectionne.

  4. #4
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    rajoute [] à la fin du name de ton select ou de tes checkbox... comme ça c'est un tableau avec toutes les valeurs qui sera envoyé (déjà dit dit dit et rererererdit sur le forum )

  5. #5
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 172
    Points : 74
    Points
    74
    Par défaut
    oki, mais ça se passe comment au niveau de ma requete SQL, il ne va pas comprendre le fait que ID = Array ? ... donc message d'erreur non?

  6. #6
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    il faut que tu parcours tout le tableau pour générer ta requête...

    dans l'absolue, un simple implode devrait même être suffisant ^^

  7. #7
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 172
    Points : 74
    Points
    74
    Par défaut
    Je suis désolé, j'ai du mal à te suivre ....

    Je ne comprend pas ce que je dois faire dans mon code.

  8. #8
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    et bien, au lieu que ce soit une simple variable qui est renvoyée, c'est un tableau... il te suffit de parcourir le tableau pour avoir toutes les valeurs...

  9. #9
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 172
    Points : 74
    Points
    74
    Par défaut
    je vois à peut pres le truc, sauf que je ne comprend pas comment le coder.
    J'ai renommer mon checkbox, et je crois savoir que je dois avoir un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print "<input type='checkbox' name='groupid[]' value=\"".$data['$id']."\">" . $currGroup->getName() . " / \n";;
    ou un truc du genre. Par contre, je ne vois pas comment le traduire dans mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print "<input type='checkbox' name='groupid[]' value=\"".$currGroup->getID()."\">" . $currGroup->getName() . " / \n";;
    , ni ce que je dois inclure dans mes fonctions pour pouvoir faire en sorte que chaque tuple soit enregistrés.

  10. #10
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    la seconde...

    ensuite pour l'enregitrement, tu as simplement un tableau avec l'ensemble des groupes à lier... il te suffit de faire une requête d'insertion multiple...

  11. #11
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 172
    Points : 74
    Points
    74
    Par défaut
    Oui, mais comment faire?
    C'est la premiere fois que j'essai un truc...

    Qu'est ce qu'une requête d'insertion multiple?
    Je pensais mettre en place une boucle, mais ou?

  12. #12
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    une requête d'insertion multiple à cette tête là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO table (champ1, champ2, ..., champN) VALUES (enr1ch1, enr1ch2, ..., enr1chN), (enr2ch1, enr2ch2, ..., enr2chN), ...
    exemple, en supposant que tu es sûr de ce que contient ton tableau (tu as vérifier que les données qu'il contenait n'étaient pas dangeureuses pour ta BDD) de même pour $_POST['userid'] :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = 'INSERT INTO user_groupes (user_id, group_id) VALUES ('.$_POST['userid'].', '.implode('), ('.$_POST['userid'].', ', $_POST['groupid']).')';
    c'est peut être pas super clair vu comme ça... mais ça te génèrera toute ta requête d'insertion d'un coup
    http://fr.php.net/implode au besoin ^^

  13. #13
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 172
    Points : 74
    Points
    74
    Par défaut
    Qu'est ce qui ne va pas avec :


    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
     
    <form action="../op/op.UsrMgr.php" name="form<?print $us->getID();?>_2" onsubmit="return checkForm2('<?print $us->getID();?>');">
            <input type="Hidden" name="action" value="addgroup">
            <input type="Hidden" name="userid" value="<?print $us->getID();?>">
            <table>
                <tr>
                    <td class="inputDescription"><?printMLText("add_groups");?>:</td>
                    <td>    
                            <?
                                foreach ($allGroups as $currGroup)
                                    if (!$us->isInGroup($currGroup))
                                        print "<input type='checkbox' name='groupid[]' value=\"".$currGroup->getID()."\">" . $currGroup->getName() . " / \n";;
                                        $groupid = $_GET["groupid"];
                            ?>
                        </select>
                    </td>
                </tr>
                <tr>
                    <td colspan="2"><br><input type="Submit"></td>
                </tr>
            </table>
            </form>
    et apres, dans ma fonction :

    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
     
    function addGroup($group)
        {
            GLOBAL $db;
            GLOBAL $groupid;
     
            for($i=0; $i< count($groupid); $i++) {
            $queryStr = "INSERT INTO tblGroupMembers (groupID, userID) VALUES (".$group->getID().", ".$this->_id.")";
            $res = $db->getResult($queryStr);
            if ($res)
                return false;
     
            unset($this->_users);
            return true;
            }
        }
    Je pensais qu'en faisant comme ça, ça fonctionnerai, mais j'ai tout le temps la meme erreur:

    You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1: SELECT * FROM tblGroups WHERE id =

  14. #14
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 172
    Points : 74
    Points
    74
    Par défaut
    J'ai remodifier mon code ainsi que ma fonction:
    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
     
    <form action="../op/op.UsrMgr.php" name="form<?print $us->getID();?>_2" onsubmit="return checkForm2('<?print $us->getID();?>');">
            <input type="Hidden" name="action" value="addgroup">
            <input type="Hidden" name="userid" value="<?print $us->getID();?>">
            <table>
                <tr>
                    <td class="inputDescription"><?printMLText("add_groups");?>:</td>
                    <td>    
                            <?
                                foreach ($allGroups as $currGroup)
                                    if (!$us->isInGroup($currGroup))
                                        print "<input type='checkbox' name='group[]' value=\"".$currGroup->getID()."\">" . $currGroup->getName() . " / \n";;
                                        $group = $_POST["group"];
                            ?>
                        </select>
                    </td>
                </tr>
                <tr>
                    <td colspan="2"><br><input type="Submit"></td>
                </tr>
            </table>
            </form>
    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
     
    function addGroup($group)
        {
            GLOBAL $db;
            GLOBAL $group;
     
            foreach($group as $groupe){
                $queryStr = "INSERT INTO tblGroupMembers (groupID, userID) VALUES (".$groupe.", ".$this->_id.")";
                $res = $db->getResult($queryStr);
                if ($res)
                    return false;
     
                unset($this->_users);
                return true;
            }
        }
    Le probleme, c'est qu'il ne m'enregistre qu'une sélection dans le cadre de choix multiple ....

  15. #15
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 172
    Points : 74
    Points
    74
    Par défaut
    J'avance un petit peu

    Pour l'instant, mon truc fonctionne, mais il me reste un probleme. En depit du fait que les requetes sont effectuer dans la base (si deux groupe sont selectionnés, deux tuples différents sont créés), j'ai toujours un message d'erreur:
    Unknown column 'Array' in 'where clause': SELECT * FROM tblGroups WHERE id = Array
    Je ne comprend pas ... il execute pourtant bien la requete!

    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
     
    function addGroup($group)
        {
            GLOBAL $db;
            GLOBAL $group;
     
            foreach($group as $groupe){
                $queryStr = "INSERT INTO tblGroupMembers (groupID, userID) VALUES (".$groupe.", ".$this->_id.")";
                $res = $db->getResult($queryStr);
            }
                if ($res)
                    return false;
                unset($this->_users);
                return true;
        }

  16. #16
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    il 'y a aucun endroit où tu fais de select...

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

Discussions similaires

  1. Checkbox cochés selon menu déroulant
    Par beninsky dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/02/2009, 16h53
  2. Réponses: 6
    Dernier message: 18/10/2007, 23h44
  3. [Tableaux] Menu déroulant et création
    Par Appli dans le forum Langage
    Réponses: 3
    Dernier message: 20/12/2006, 16h18
  4. [Tableaux] Menu déroulant en PHP
    Par dunbar dans le forum Langage
    Réponses: 4
    Dernier message: 11/08/2006, 10h22
  5. [Tableaux] Menu déroulant et MySQL
    Par dunbar dans le forum Langage
    Réponses: 3
    Dernier message: 28/07/2006, 00h14

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