Recup de checkbox en javascript/php

Bonjour,

J'ai une petit problème

Je vous décrit ma page : j'ai un premier tableau avec quelque collonnes et plus particulièrement des checkbox
(checkbox car l'utilisateur doit pouvoir choisir plusieurs lignes)
ensuite j'ai trois bouttons ajouter modifier et supprimer
enfin un deuxième tableau et au lieu de checkbox des radio.

Mon problème aujourd'hui est de récupérer grâce a une fonction javascript la ou les valeurs coché par l'utilisateur des checkbox pour les transmettre dans une popup.

Alors hier on m'a aidé (car je suis une bille en JS c'est du charabiat) a faire une fonction pour récupérer les valeurs radio
et l'on m'a dit que c'était le meme système sauf qu'il faut récupérer les valeurs dans un tableau.

Si ca peut vous donner une indication

je vous met la fonction JS

function ouvreFenetreModifier()
{
valeurCheckDansLien="";
TabChecks=document.getElementsByName('check');
TCL=TabChecks.length;
for( var i=0;i<TCL;i++) { // ici on parcourre les elements pour savoir lequel est coché
if(TabChecks[i].checked) {
valeurCheckDansLien="Modif_plan.php?check="+TabChecks[i].value;
}
}
if( valeurCheckDansLien.length > 0){// si un radio est coché
window.open(valeurCheckDansLien, "", config='width=600, height=600, resizable=no, toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no');
} else {
alert("pas de d'arrêts chaînes selectionné !") //si pas de radio coché
}

}

ainisi que mon tableau en php

echo "<tr>";
echo "<td class='table-ligne1-centre' width='100'> <input type='checkbox' name='checkbox1' > </td>";
echo "<td class='table-ligne1-centre' width='100'>$TYPE</td>";
echo "<td class='table-ligne1-centre' width='100'>$DEBUT</td>";
echo "<td class='table-ligne1-centre' width='100'>$FIN</td>";
echo "<td class='table-ligne1-centre' width='100'>$CONSTAT</td>";
echo "<td class='table-ligne1-centre' width='100'>$DEMANDE</td>";
echo "<td class='table-ligne1-centre' width='100'>$CAUSE</td>";
echo "<td class='table-ligne1-centre' width='100'>$INFO</td>";
echo "<td class='table-ligne1-centre' width='100'>$IMPUTATION</td>";
echo "</tr>";

Si vous pouvez m'aider svp

merci d'avance
Configuration: Windows 2003
Internet Explorer 7.0

35 réponses

Résumé de la discussion

Récupérer les valeurs cochées des checkbox et les transmettre dans une popup via JavaScript est le problème, avec un premier tableau de cases à cocher et un second utilisant des radio. Plusieurs intervenants proposent de parcourir les éléments par getElementsByName, vérifier .checked et construire une URL, puis ouvrir la popup en passant les valeurs via GET ou dans un tableau. D'autres échanges portent sur l'utilisation de PHP pour générer les lignes du tableau, l'envoi des paramètres entre pages avec $_GET ou $_POST et la persistance éventuelle via $_SESSION. Une nuance utile est que la fiabilité dépend de l'alignement entre l'envoi des paramètres et leur récupération sur la page cible, en veillant à nommer les inputs et tester sur les pages.

Bobot (l’IA à votre service)
  1. Effectivment...

    Alors

    voici le code de ma page

    <?php
    session_start();
    ?>

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

    <html>

    <!##########################################################################################################################>

    <head>
    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">

    <title>Ajout d'un plan d'action</title>

    <link rel="stylesheet" media="screen" type="text/css" title="identification" href="Require\Application.css">

    </head>

    <body>

    <?php
    //--------------- Connexion à la base ---------------//

    require('Require\Connexion.php');

    //--------------- Définition des variable de la table ---------------//

    $INTITULE = $_POST['INTITULE'];
    $DELAI = $_POST['d'];
    $PILOTE = $_POST['PILOTE'];

    //--------------- Calcul et incrémente le numéro ---------------//

    $sqlnum = " SELECT NUMERO_PLAN_ACTION
    FROM PLAN_ACTION";

    $req = odbc_exec($conn,$sqlnum) or die('Erreur SQL : <br />'.$sqlnum);
    {
    $result=odbc_result_all($req);
    }
    $num = $result++;

    //--------------- Requete éxecuté dans la table ---------------//

    $sql1 = " INSERT INTO PLAN_ACTION (NUMERO_PLAN_ACTION, INTITULE, DELAI, PILOTE)
    VALUES ($num, '$INTITULE', '$DELAI', '$PILOTE')";

    foreach($_SESSION[$key]as $key=>$val)
    {
    $requete =" UPDATE ARRET_CHAINE
    SET NUMERO_PLAN_ACTION = '$result'
    WHERE NUMERO_ARRET_CHAINE =".$val;
    echo 'requete : ' . $requete . '<br />';
    $req = odbc_exec($conn,$requete) or die('Erreur SQL : <br />'.$requete);
    }

    $req = odbc_exec($conn,$sql1) or die('Erreur SQL : <br />'.$sql1);

    ?>
    </body>
    </form>

    </html>

    et voici l'erreur car apparemment il ne prend pas la valeur

    NUMERO_PLAN_ACTION
    0

    Warning: Invalid argument supplied for foreach()

    qu'en pense tu?
    1. Contributeur
      Ben enlève le renvoie dans la page de traitement.

      Ton echo va s'afficher normalement.
      1. je l'ai fait je l'ai éxécuter et ca passe dans la base mais pas par le code

        en fait j'ai 3 pages tu vois la page plan action avec le tableau

        ensuite la page x jrécup la valeur des checkbox

        enfin la page de traitement y

        et j'ai mis la requete dans la page x et la c'est bon je suis sur que je récupère car j'ai fait le echo par contre dans la page de traitement je ne sais pa scomment faire pour faire en sorte que je vois la requete pour etre sur que les valeurs passent

        donc si ta une idée...
        1. salut passarinho44,

          en ayant modifier comme tu me l'avait conseillé dans ton post au dessus une de mes deux requetes s'insère
          le insert into.

          Mais toujours le meme problème avec le update

          j'ai fait ca :

          foreach($_SESSION[$key]as $key=>$val)
          {
          $requete = "UPDATE ARRET_CHAINE
          SET NUMERO_PLAN_ACTION = '$result'
          WHERE NUMERO_ARRET_CHAINE = $val";
          //echo 'requete : ' . $requete . '<br />';
          $req = odbc_exec($conn,$requete) or die('Erreur SQL : <br />'.$requete);
          }

          peut tu me dire si c'est normal que le update ne marque pas d'erreur et qu'il n'insère rien dans la table stp?
          1. Contributeur
            Tu peux afficher la requete avec le echo et me la montrer stp?
            A priori je ne vois pas d'erreur ...

            Quand tu as un problème de requete qui ne s'execute pas, essaie toujours de l'afficher et de l'executer directement dans ta base.
        2. oui effectivement quand je test ca et que je fais un echo ca marche mais ca doit déconner dans lotre page avec le update je sais pas pourquoi...
          1. Contributeur
            foreach($_GET as $val)
            {
            $_SESSION['val'] = $val;
            }

            Là tu réinitialise toujours la même variable SESSION, c'est normal? ...

            Il faudrait plutôt mettre ça :

            foreach($_GET as $key=>$val) {
            $_SESSION[$key] = $val;
            }

            Essaie ça et dis moi si ça change quelque chose ...
            1. je sais ke ca va faire long mais regarde stp

              plan_action.php

              <form method="post" action="Plan_action.php" >

              <body>
              <?php

              //--------------- Bannière ---------------//

              echo" <div id='ban2' > </div>";

              //--------------- Choix de la période ---------------//

              echo" <div id='cal_debut'></div>";

              echo"<div style='text-align: center;'>";
              echo"<input name='debut_periode' value='Début de période' class='calendrier' type='text'>";
              echo"  ";
              echo"<input name='fin_periode' value='Fin de période' class='calendrier' type='text'>";

              //--------------- Button SUBMIT qui charge le tableau ---------------//

              echo "  ";
              echo"<input value='Ok' name='button' type='submit'>";
              echo"</div><br>";

              require('Connexion.php');

              //--------------- Requete appelant le POST selectionné ---------------//

              $DATE_DEBUT = $_POST['debut_periode']." 00:00:00";
              $DATE_FIN = $_POST['fin_periode']." 00:00:00";

              list($datedeb, $heure_deb)=explode(" ",$DATE_DEBUT);
              list($datefin, $heure_fin)=explode(" ",$DATE_FIN);

              list($jj_deb, $mm_deb, $yy_deb)=explode("/",$datedeb);
              list($jj_fin, $mm_fin, $yy_fin)=explode("/",$datefin);

              $date_deb = $yy_deb."-".$mm_deb."-".$jj_deb;
              $date_fin = $yy_fin."-".$mm_fin."-".$jj_fin;

              //--------------- Tableaux des arrêts chaîne ---------------//

              //--------------- Requete du tableau des arrêts chaîne ---------------//

              if (isset($_POST['debut_periode']) && isset($_POST['fin_periode']))
              {
              $sql0="SELECT * FROM ARRET_CHAINE WHERE DEBUT BETWEEN #$date_deb# AND #$date_fin#" ;
              $rs = odbc_exec($conn,$sql0) or die('Erreur SQL : <br />'.$sql0);
              }
              //--------------- Tableau des arrêts chaîne ---------------//

              echo "<div style='overflow-y: scroll; height: 181'> ";

              echo "<table border='0' cellpadding='0' cellspacing='0' width='500'>";
              echo "<tbody>";
              echo "<tr>";

              echo "<table style='width: 968px; height: 60px;' border='5' cellpadding='2' cellspacing='1'>"; // Taille du tableau //
              echo "<tbody>";

              echo "<tr>";
              echo "<td class='table-titre' colspan='9'> Tableau des arrêts chaîne </td>";
              echo "</tr>";

              echo "<tr>";
              echo "<td class='table-entete-centre' width='20'>Choix</td>";
              echo "<td class='table-entete-centre' width='20'>Type</td>";
              echo "<td class='table-entete-centre' width='20'>Début</td>";
              echo "<td class='table-entete-centre' width='20'>Fin</td>";
              echo "<td class='table-entete-centre' width='20'>Constat</td>";
              echo "<td class='table-entete-centre' width='20'>Demande </td>";
              echo "<td class='table-entete-centre' width='20'>Cause</td>";
              echo "<td class='table-entete-centre' width='20'>Information</td>";
              echo "<td class='table-entete-centre' width='20'>Imputation</td>";
              echo "</tr>";
              if (isset($_POST['debut_periode']) && isset($_POST['fin_periode']))
              {
              while (odbc_fetch_row($rs))
              {
              $NUM=odbc_result($rs,"NUMERO_ARRET_CHAINE");
              $TYPE=odbc_result($rs,"TYPE");
              $DEBUT=odbc_result($rs,"HEURE_DEBUT");
              $FIN=odbc_result($rs,"HEURE_FIN");
              $CONSTAT=odbc_result($rs,"CONSTAT");
              $DEMANDE=odbc_result($rs,"DEMANDE");
              $CAUSE=odbc_result($rs,"CAUSE");
              $INFO=odbc_result($rs,"COMPLEMENT_INFORMATION");
              $IMPUTATION=odbc_result($rs,"IMPUTATION");

              echo "<tr>";
              echo "<td class='table-ligne1-centre' width='100'> <input type='checkbox' name='checkbox1' value='" . $NUM . "' /> </td>";
              echo "<td class='table-ligne1-centre' width='100'>$TYPE</td>";
              echo "<td class='table-ligne1-centre' width='100'>$DEBUT</td>";
              echo "<td class='table-ligne1-centre' width='100'>$FIN</td>";
              echo "<td class='table-ligne1-centre' width='100'>$CONSTAT</td>";
              echo "<td class='table-ligne1-centre' width='100'>$DEMANDE</td>";
              echo "<td class='table-ligne1-centre' width='100'>$CAUSE</td>";
              echo "<td class='table-ligne1-centre' width='100'>$INFO</td>";
              echo "<td class='table-ligne1-centre' width='100'>$IMPUTATION</td>";
              echo "</tr>";

              }
              }

              echo "</tbody>";
              echo "</table>";

              echo "</tr>";
              echo "</tbody>";
              echo "</table>";

              echo "</div>";
              ?>

              <!--------------- Boutton --------------->

              <br>

              <div style="text-align: center;">

              <input type="button" name="lien1" value="Ajouter un plan d'action" onclick="ouvreFenetreAjouter();">   

              <input type="button" name="lien2" value="Modifier" onClick="ouvreFenetreModifier();">   

              <input type="button" name="lien3" value="Cloturer" onClick="ouvreFenetreCloturer();">   

              <br><br>
              </div>

              <!--------------- Tableau des plans d'action --------------->

              <?php

              require('Connexion.php');
              require('Requete.php');

              //--------------- Requete du tableau des plans d'action ---------------//

              $sql1="SELECT * FROM PLAN_ACTION ";

              $req = odbc_exec($conn,$sql1) or die('Erreur SQL : <br />'.$sql1);

              echo "<div style='overflow-y: scroll; height: 180'>";
              echo "<table border='0' cellpadding='0' cellspacing='0' width='500'>";
              echo "<tbody>";

              echo "<tr>";
              echo "<table style='width: 973px; height: 115px;' border='5' cellpadding='2' cellspacing='1'>";
              echo "<tbody>";

              echo "<tr>";
              echo "<td class='table-titre' colspan='6'> Tableau des plans d'action</td>";
              echo "</tr>";

              echo "<tr>";
              echo "<td class='table-entete-centre' width='20'></td>";
              echo "<td class='table-entete-centre' width='150'>Intitulé</td>";
              echo "<td class='table-entete-centre' width='5'>Délai</td>";
              echo "<td class='table-entete-centre' width='50'>Pilote</td>";
              echo "<td class='table-entete-centre' width='10'>Cloture</td>";
              echo "<td class='table-entete-centre' width='30'>Complément </td>";
              echo "</tr>";

              while (odbc_fetch_row($req))
              {
              $CHOIX= odbc_result($req,"NUMERO_PLAN_ACTION");
              $INTITULE=odbc_result($req,"INTITULE");
              $DELAI=odbc_result($req,"DELAI");
              $PILOTE=odbc_result($req,"PILOTE");
              $CLOTURE=odbc_result($req,"CLOTURE");
              $COMPLEMENT_CLOTURE=odbc_result($req,"COMPLEMENT_CLOTURE");

              echo "<tr>";
              echo "<td class='table-ligne1-centre' width='20'> <input type=\"radio\" id=\"check\" name=\"check\" value='".$CHOIX."' /> </td>";
              echo "<td class='table-ligne1-centre' width='150'>$INTITULE</td>";
              echo "<td class='table-ligne1-centre' width='10'>$DELAI</td>";
              echo "<td class='table-ligne1-centre' width='50'>$PILOTE</td>";
              echo "<td class='table-ligne1-centre' width='10'>$CLOTURE</td>";
              echo "<td class='table-ligne1-centre' width='30'>$COMPLEMENT_CLOTURE</td>";
              echo "</tr>";

              }

              echo "</tbody>";
              echo "</table>";
              echo "</tr>";
              echo "</tbody>";
              echo "</table>";

              //--------------- Fin de la page Action ---------------//
              ?>
              </body>

              </form>

              <!##########################################################################################################################>

              </html>

              <?php
              session_start();
              ?>

              <form method="post" action="Formulaire_add_plan.php">

              <body>

              <!------------------ Bannière ------------------>

              <div id="ban3"> </div>

              <br>

              <!------------------ Intitulé du plan ------------------>

              Intitulé :
              <input name="INTITULE" value="" maxlength="50" size="50" type="text">

              <br><br>

              <?php
              //--------------- Champs de saisie du délais ---------------//

              foreach($_GET as $val)
              {
              $_SESSION['val'] = $val;
              }

              echo"<div>";

              echo"Délai : ";
              echo"<input name='d' value='' class='calendrier' type='date'> ";
              echo"</div>";

              ?>

              <br>

              Pilote :
              <input name="PILOTE" value="" maxlength="50" size="50" type="text">

              <br><br><br>

              <!------------------ Boutton ------------------>

              <div style="text-align: center;">

              <input value="Valider" onclick="self.close()" name="button" type="submit">

              </div>

              </body>
              </form>
              <!##########################################################################################################################>

              </html>

              <?php
              session_start();

              //--------------- Connexion à la base ---------------//

              require('Connexion.php');

              //--------------- Définition des variable de la table ---------------//

              $INTITULE = $_POST['INTITULE'];
              $DELAI = $_POST['DELAI'];
              $PILOTE = $_POST['PILOTE'];

              //--------------- Calcul et incrémente le numéro ---------------//

              $sqlnum = " SELECT MAX(NUMERO_PLAN_ACTION)
              FROM PLAN_ACTION";

              $req = odbc_exec($conn,$sqlnum) or die('Erreur SQL : <br />'.$sqlnum);

              {
              $result=odbc_result($req);
              }
              $result++;

              //--------------- Requete éxecuté dans la table ---------------//

              $sql1 = " INSERT INTO PLAN_ACTION (NUMERO_PLAN_ACTION, INTITULE, DELAI, PILOTE)
              VALUES ($result, '$INTITULE', '$DELAI', '$PILOTE')";

              foreach($_SESSION as $val)
              {
              $requete = "UPDATE ARRET_CHAINE
              SET NUMERO_PLAN_ACTION = '$result'
              WHERE NUMERO_ARRET_CHAINE = $val";
              //echo 'requete : ' . $requete . '<br />';
              $req = odbc_exec($conn,$requete) or die('Erreur SQL : <br />'.$requete);
              }

              $req = odbc_exec($conn,$sql1) or die('Erreur SQL : <br />'.$sql1);

              ?>jette un oeuil stp j'en peut plus
              1. Contributeur
                Oui envoie les codes de tes pages je vais essayer de voir ça ...
                1. excuse mais il n'y a pas d'erreur en faite!!!

                  J'ai testé ton dernier post et donc le problème c'est que la requete n'est que sur une page de traitement dc le echo est impossible j'ai testé dans la bdd et la ca a bien fonctionné pourrais je te mettre le code des trois pages concerné car la je suis perdu je ne voi pas ce qui marche pas... stp
                  1. Contributeur
                    Modifie ça :
                    foreach($_SESSION as $val)
                    {
                    $requete = "UPDATE ARRET_CHAINE
                    SET NUMERO_PLAN_ACTION = '$result'
                    WHERE NUMERO_ARRET_CHAINE = $val";
                    $req = odbc_exec($conn,$requete) or die('Erreur SQL : <br />'.$requete);
                    }

                    Par ça :
                    foreach($_SESSION as $val)
                    {
                    $requete = "UPDATE ARRET_CHAINE
                    SET NUMERO_PLAN_ACTION = '$result'
                    WHERE NUMERO_ARRET_CHAINE = $val";
                    echo 'requete : ' . $requete . '<br />';
                    //$req = odbc_exec($conn,$requete) or die('Erreur SQL : <br />'.$requete);
                    }

                    Tu auras toutes tes requetes qui vont s'afficher!
                    Si tu ne trouves pas l'erreur dessus, tu essaye de les executer dans ta base de données.
                    Il va te donner l'erreur normalement.
                    1. Excuse moi mec mais j'ai encore besoin de tes lumières...

                      dans la page plan action j'envoie les donnée des checkbox (ce que tu as fait hier) dans la page form_action

                      foreach($_GET as $val)
                      {
                      $_SESSION['val'] = $val;
                      }

                      enfin je veut récupérer ca pour faire ma requete mais ca ne passe pas hélas

                      foreach($_SESSION as $val)
                      {
                      $requete = "UPDATE ARRET_CHAINE
                      SET NUMERO_PLAN_ACTION = '$result'
                      WHERE NUMERO_ARRET_CHAINE = $val";
                      $req = odbc_exec($conn,$requete) or die('Erreur SQL : <br />'.$requete);
                      }

                      je n'est pas d'erreur mais ca ne s'insère pas
                      1. Contributeur
                        Ben dans la popup tu affiche la valeur avec :
                        <?php
                        echo 'liste : ' . $_GET['liste'];
                        ?>
                        1. par contre dans le popup ca n'indique pas la valeur quand je fais echo $_GET['...']

                          merci bcp tu es trop fort
                          1. Contributeur
                            echo"<center><select name='liste' id='liste' size='1'>";
                            echo"<option>Choisissez une liste</option>";
                            echo"<option> </option>";
                            echo"<option>Type </option>";
                            echo"<option>Cause</option>";
                            echo"<option>Constat </option>";
                            echo"<option>Demande </option>";
                            echo"<option>Imputation </option>";
                            echo"</select>";

                            Déjà il y a un problème dans ta liste : tes option n'ont pas de valeurs ... :s
                            Remplace par ça :
                            echo"<center><select name='liste' id='liste' size='1'>";
                            echo"<option value=''>Choisissez une liste</option>";
                            echo"<option value=''> </option>";
                            echo"<option value='type'>Type </option>";
                            echo"<option value='Cause'>Cause</option>";
                            echo"<option value='Constat'>Constat </option>";
                            echo"<option value='Demande'>Demande </option>";
                            echo"<option value='Imputation'>Imputation </option>";
                            echo"</select>";

                            Ensuite pour ta fonction javascript, elle est beacoup plus simlpe ^^ :
                            function ouvreFenetreListe() {
                            var valeurListeDansLien="";
                            var liste = document.getElementById('liste');
                            if ( liste.value != "" ) {
                            valeurListeDansLien="Formulaire_liste.php?liste="+liste.value;
                            window.open(valeurListeDansLien, "", config='width=600, height=560, resizable=no, toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no');
                            } else {
                            alert("Selectionnez une liste avant de cliquer sur valider")
                            }
                            }
                            1. ok merci bcp encore une fois j'ai un dernier petit soucis promis

                              Pour le problème dans ma base le truc c'est que je dois insérer un numéro dans la table arret chaine mais dans les tuples qui ont les valeurs $val.

                              c'est pour transmettre la valeur d'une liste dans un popup

                              voici la liste

                              echo"<center><select name='liste' id='liste' size='1'>";
                              echo"<option>Choisissez une liste</option>";
                              echo"<option> </option>";
                              echo"<option>Type </option>";
                              echo"<option>Cause</option>";
                              echo"<option>Constat </option>";
                              echo"<option>Demande </option>";
                              echo"<option>Imputation </option>";
                              echo"</select>";

                              et la fonction

                              function ouvreFenetreListe()
                              {
                              valeurCheckDansLien="";
                              TabChecks=document.getElementsByName('liste');
                              TCL=TabChecks.length;

                              for( var i=0;i<TCL;i++)
                              {
                              if(TabChecks[i].checked)
                              {
                              valeurCheckDansLien="Formulaire_liste.php?check="+TabChecks[i].value;
                              }
                              }
                              if (valeurCheckDansLien.length > 0)
                              {
                              window.open(valeurCheckDansLien, "", config='width=600, height=560, resizable=no, toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no');
                              }
                              else
                              {
                              alert("Selectionnez une liste avant de cliquer sur valider")
                              }
                              }

                              j'arrive pas alors la fonction doit etre fausse car il me met sans cesse vous n'avez pas sélectionnez de liste
                              1. Contributeur
                                Je suis en 2eme année de BTS Informatique de Gestion ^^
                                Je suis en stage actuellement et à fond dans une appli PHP/MySQL/Javascript ^^

                                Il y a quelques mois j'aurais même pas compris tout ce que tu me demandais ! ;)

                                Voilà comment ajouter dans une base (à adapter ;) )
                                foreach($_GET as $key=>$val) { 
                                	$requete = "INSERT INTO tatable (tonchamps) VALUES ('" . $val . "')";
                                	mysql_query($requete); 
                                } 
                                • 1
                                • 2