Affectation d'un variable javascript a un vri

Résolu
Bonjour,
j'utilise actuellement un bibliotheque jquery jqwidgets. Celui ci permet nottament de faire un combobox(liste deroulante) a partir de données mysql.J'aimerai bien savoir comment recuperer l'element selectionné dans ce combobox et l'affecter dans un variable php pour une utilisation plus tard.

12 réponses

  1. bizarre chez moi ça ne marche pas, même avec le code de InchRay

    je l'ai pourtant bien mis dans la partie $(document).ready(function () {

    tant mieux si tu t'en est sorti

    au passage qui peut me dire l'intéret de jqxcombox sachant que l'on peut faire une liste déroulante directement avec du php et une BDD, ou même en Ajax
    et un peu de CSS pour la rendre plus jolie
    1. Si tu a bien visiter le site que j'ai referencer en haut, c'est deja un plugin complet avec differents theme css, l'avantage est donc de reduire le temps de developpement, et aussitu peut voir qu'on peut utiliser aussi ajax pour completer le combobox donc c'est encore mieux. :)
    2. Pour ton pbm verifier bien si le name dans le input est egale a celui du$-POST dans le PHP
  2. C'était mon idée aussi de passer par un champ caché, mais impossible de récupérer l'item sélectionné même avec la partie de code event que tu as donné

    on a toujours:
    Valeurs recues dans le POST:

    Array
    (
    [jqxComboBox_input] =>
    [envoyer] => Envoyer
    )



    j'ai l'impression de l'event n'est pas "capté"
    1. Il va falloir créer un champ type='hidden' pour transporter la valeur dans le <form/> (l'API ne semble pas le supporter par défaut ... ).

      Ajout de JS :
      $('#jqxcombobox').bind('select', function (event) {
      var args = event.args;
      var item = $('#jqxcombobox').jqxComboBox('getItem', args.index);
      $('#jqxComboBox_input').value = item;
      // $('#jqxComboBox_input').value = args.index;
      });

      Ajout dans le <form>
      <input type="hidden" id="jqxComboBox_input" name="jqxComboBox_input" />
      1. J'ai fait le meme type hidden mais comme suit:
        $("#jqxcombobox").bind('select', function (event) {
        if (event.args) {
        var item = event.args.item;
        if (item) {
        var valueelement = item.value;

        $("#selectionlog").children().remove();

        $("#selectionlog").append('<input type="hidden" name="selection">'+valueelement+'</input>');
        }// #selectionlog est le div contenant le resultat
        }

        puis dans le body:

        <body class='default'>
        <?php
        if(isset($_POST['selection'])){
        echo 'Valeurs recues dans le POST: <pre>';
        echo $_POST['selection'];
        echo '</pre>';
        };
        ?>

        Resultat: la valeur selectionnée est bien inseré dans l'input.
      2. C'est donc résolu ? :)
      3. on peut dire ca; :) merci
    2. j'ai remarqué que tu faisait un include('connect.php'); et qu'ensuite tu te connectais à la base de données. tu n'aurais pas fait une double connexion par hasard ?
      Non car connect.php ne contient que les codes de la BDD, pas d'instructions de connexion.

      je crois que le seul moyen de passer les paramètres du javascript vers le php, c'est par les $_GET et $_POST

      oui ça on sait ok mais comment, car apparemment lors de la génération de la liste par JQuery on n'a pas les arguments habituels du HTML notamment le name= dans la balise <select

      le print_r ($_POST) nous dit qu'il n'y a que le bouton qui est posté ??
      1. je crois que le seul moyen de passer les paramètres du javascript vers le php, c'est par les $_GET et $_POST (vu que le php est executé coté serveur, il faut bien que les variables javascript soit envoyé au serveur pour que ça marche.

        au faite, j'ai remarqué que tu faisait un include('connect.php'); et qu'ensuite tu te connectais à la base de données. tu n'aurais pas fait une double connexion par hasard ?
        1. le fichier connect.php permet seulement d'enumerer le host, user et password, il n'y a pas de double connection.
      2. daccord;
        moi je pense que c'est $("#jqxcombobox").jqxComboBox qui creer le combo box et dans l'api il est dit que pour recuperer l'element selectionner si j'ai bien compris est: $("#jqxComboBox").jqxComboBox('getSelectedItem');
        mais je sais plus comment affecter ce valeur recuperer vers un variable de php
        1. je viens de tester ce script sur mon serveur wamp, même problème, je ne comprend pas comment est créee cette liste par JQ

          quel name=

          essayes peut être de poser la question sur le forum de JQuery ?
          1. bojour, ca me donne ca lorsque je clique sur le bouton:

            Valeurs recues dans le POST:
            
            Array
            (
                [envoyer] => Envoyer
            )
            

            Est ce que ca veut dire que j'ai recuperer la variable selectionner ou pas?? Est ce que ce ne doit pas etre la valeur selectionner qui sera afficher??
            1. provisoirement mets une trace de ce que tu reçoit en créant un petit formulaire dans ta page index.php
              <!DOCTYPE html>
              <html lang="en">
              <head>
              <link rel="stylesheet" href="../../jqwidgets/styles/jqx.base.css" type="text/css" />
              <link rel="stylesheet" href="../../jqwidgets/styles/jqx.energyblue.css" type="text/css" />
              <script type="text/javascript" src="../../scripts/jquery-1.7.2.min.js"></script>
              <script type="text/javascript" src="../../jqwidgets/jqxcore.js"></script>
              <script type="text/javascript" src="../../jqwidgets/jqxbuttons.js"></script>
              <script type="text/javascript" src="../../jqwidgets/jqxscrollbar.js"></script>
              <script type="text/javascript" src="../../jqwidgets/jqxdata.js"></script>
              <script type="text/javascript" src="../../jqwidgets/jqxlistbox.js"></script>
              <script type="text/javascript" src="../../jqwidgets/jqxcombobox.js"></script>
              <script type="text/javascript">
              $(document).ready(function () {
              // prepare the data
              var source =
              {
              datatype: "json",
              datafields: [
              { name: 'CompanyName'},
              { name: 'ContactName'},
              { name: 'ContactTitle'},
              { name: 'Address'},
              { name: 'City'},
              ],
              url: 'data.php'
              };
              
              var dataAdapter = new $.jqx.dataAdapter(source);
              
              $("#jqxcombobox").jqxComboBox(
              {
              source: dataAdapter,
              theme: 'energyblue',
              width: 200,
              height: 25,
              selectedIndex: 0,
              displayMember: 'CompanyName',
              valueMember: 'ContactName'
              });
              });
              </script>
              </head>
              <body class='default'>
              <?php
              if(isset($_POST['envoyer'])){
              	echo 'Valeurs recues dans le POST: <pre>';
              	print_r($_POST); //la tu verra le name de ta liste
              	echo '</pre>';
              
              }
              
              ?>
              <form name="form1" method="post" action="">
              <div id="jqxcombobox"></div>
              <input type="submit" name="envoyer" value="Envoyer" />
              </form>
              </body>
              </html> 
              :
              1. C'est la mon probleme, je t'explique:
                il y a un fichier nommer data.php qui fait la requete vers la base de données . Voici le code:
                <?php
                #Include the connect.php file
                include('connect.php');
                #Connect to the database
                //connection String
                $connect = mysql_connect($hostname, $username, $password)
                or die('Could not connect: ' . mysql_error());
                //select database
                mysql_select_db($database, $connect);
                //Select The database
                $bool = mysql_select_db($database, $connect);
                if ($bool === False){
                	print "can't find $database";
                }
                // get data and store in a json array
                $query = "SELECT * FROM customers";
                $from = 0; 
                $to = 30;
                $query .= " LIMIT ".$from.",".$to;
                
                $result = mysql_query($query) or die("SQL Error 1: " . mysql_error());
                while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
                	$customers[] = array(
                        'CompanyName' => $row['CompanyName'],
                        'ContactName' => $row['ContactName'],
                	'ContactTitle' => $row['ContactTitle'],
                	'Address' => $row['Address'],
                	'City' => $row['City']
                      );
                }
                
                echo json_encode($customers);
                ?>
                


                puis on l'utilise a partir d'un fichier index.php comme suit:
                <!DOCTYPE html>
                <html lang="en">
                <head>
                <link rel="stylesheet" href="../../jqwidgets/styles/jqx.base.css" type="text/css" />
                <link rel="stylesheet" href="../../jqwidgets/styles/jqx.energyblue.css" type="text/css" />
                <script type="text/javascript" src="../../scripts/jquery-1.7.2.min.js"></script>
                <script type="text/javascript" src="../../jqwidgets/jqxcore.js"></script>
                <script type="text/javascript" src="../../jqwidgets/jqxbuttons.js"></script>
                <script type="text/javascript" src="../../jqwidgets/jqxscrollbar.js"></script>
                <script type="text/javascript" src="../../jqwidgets/jqxdata.js"></script>
                <script type="text/javascript" src="../../jqwidgets/jqxlistbox.js"></script>
                <script type="text/javascript" src="../../jqwidgets/jqxcombobox.js"></script>
                <script type="text/javascript">
                $(document).ready(function () {
                // prepare the data
                var source =
                {
                datatype: "json",
                datafields: [
                { name: 'CompanyName'},
                { name: 'ContactName'},
                { name: 'ContactTitle'},
                { name: 'Address'},
                { name: 'City'},
                ],
                url: 'data.php'
                };

                var dataAdapter = new $.jqx.dataAdapter(source);

                $("#jqxcombobox").jqxComboBox(
                {
                source: dataAdapter,
                theme: 'energyblue',
                width: 200,
                height: 25,
                selectedIndex: 0,
                displayMember: 'CompanyName',
                valueMember: 'ContactName'
                });
                });
                </script>
                </head>
                <body class='default'>
                <div id="jqxcombobox"></div>
                </body>
                </html>

                Bref, le combo box fonctionne bien mais je sais pas maintenant comment recuperer les valeurs selectionner de la liste deroulante. Voici le lien dont j'ai trouver ce tutoriel:https://www.jqwidgets.com/jquery-widgets-documentation/documentation/phpintegration/bind-jquery-combobox-to-mysql-database-using-php.htm
                1. Bonjour,
                  Tu ne confondrais pas
                  - traitement cote serveur (php)
                  - et presentation de données CotéClient (balise Html)

                  Quoiqu il en soit, ton combobox fesant parti d un formululaire (balise <form>), lorsque tu valides ce formualire (evenement onsubmit="self") tu apelles une page Php ...

                  Tu a joutes un traitement sur les variables $_GET ou $_POST ....

                  if (sizeof($_GET)>0){
                  if (isset($_GET['Ok'])) echo "ma valeur est ".$_GET['Ok'];
                  }