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

jQuery Discussion :

$post comment faire passer mes variables?


Sujet :

jQuery

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 6
    Par défaut $post comment faire passer mes variables?
    Bonsoir,

    J'ai un script php qui génère un formulaire. Un onSubmit sur ce formulaire déclanche une fonction javascript qui est celle là:

    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 affecter(logiciel, nbrCheckbox)
    {
         var commentaire = $('#form_affectation').find("input[name=commentaire]").val();
         var version = $('#form_affectation').find("input[name=version]").val();
         var nbrCheckbox = nbrCheckbox;
         for(i=1 ; i <= nbrCheckbox ; i++) 
         {
              var currentCheckbox = document.getElementById("salle_" + i);
             if(currentCheckbox.checked) 
              { 
                   window[currentCheckbox] = document.getElementById("salle_" + i).value
                   alert(currentCheckbox.name + " est coché et son id est " + window[currentCheckbox] );	
             }
         }		
    }
    mon script php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    ...
    $nbr_salles = mysql_num_rows($result);
    $numCheckbox =0;
    $echo .= "<form id='form_affectation' onsubmit='affecter($id_logiciel, $nbr_salles); vider_div(\"tableau_logiciels_salles\"); return false;'>";
    $echo .= "Version logiciel : <input type='text' name='version' size=30>";
    $echo .= "Commentaire : <input type='text' name='commentaire' size=30>";
    while ($res=mysql_fetch_array($result)) 
    {
        $numCheckbox++;
        $echo .= "<input type=checkbox name='salle-".$res['numSalle']."' id='salle_".$numCheckbox."' value=".$res['idSalle']." />".$res['numSalle']." (".$res['nomSite'].")<br>";
    }
    $echo .= "<input type='submit' value='Afficher'>";
    $echo .= "</form>";
    Désolé mon code est un peu longt (et encore je l'ai simplifié ).
    Ah oui et aussi, j'ai lu qu'il ne fallait pas mettre de php, mais je l'ai mis quand meme pour que vous compreniez d'ou vient l'id de mes checkbox et mon paramètre nbrCheckbox

    Pour l'instant ma fonction affecter() ne fait que des alert() et ça marche. Par exemple si je coche 4 checkbox alert j'ai 4 alert() qui s'exécute à la suite indiquant l'id du checkbox et l'id de la salle (pour ma base de donné).

    Maintenant ce que j'aimerais c'est utiliser le $post en ajax pour pouvoir passer les id des salles que l'on a coché dans une page php qui exécutera une requète. Et là c'est la catastrophe, j'ai appris qu'on ne pouvait pas passer de tableau !!!
    Alors ma question est simple : comment faire?
    (Question simple -> réponse difficile )

    J'ai essayé pleins de trucs qui n'ont pas marché dont ça :

    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
     
    function affecter(logiciel, nbrCheckbox)
    {
         var commentaire = $('#form_affectation').find("input[name=commentaire]").val();
         var version = $('#form_affectation').find("input[name=version]").val();
         var nbrCheckbox = nbrCheckbox;
         for(i=1 ; i <= nbrCheckbox ; i++) 
         {
              var currentCheckbox = document.getElementById("salle_" + i);
               if(currentCheckbox.checked) 
               { 
    	   window[currentCheckbox] = document.getElementById("salle_" + i).value
                    alert(currentCheckbox.name + " est coché et son id est " + window[currentCheckbox] );
                     $.post("jQuery/affecter.php", {id_logiciel: id_logiciel, currentCheckbox: window[currentCheckbox] },
                         function success(data){
                                 alert("ça marche");
                      });
     
                  }
         }
    }
    Bon là c'était évident que ça n'allait pas marché mais on sait jamais

    Donc voilà si quelqu'un veut bien se pencher sur mon cas je serais très heureux...

    merci d'avance ++

  2. #2
    Membre éclairé
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Par défaut
    Pour résumer , tu veux pouvoir passer 4 identifiants en AJAX sachant que ça concerne 4 checkbox?
    Parce que là le code est un peu indigeste , j'essaie de simplifier ta requête.
    Oops j viens de voir que c'était jquery.. Desolé je reçois par rss les questions.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 6
    Par défaut
    Bonjour cotede2

    Oui mon problème vient bien de jQuery et plus particulièrement de la fonction ajax $post .

    Le but est de passer les valeurs des checkbox cochés dans une page php.

    Merci quand meme ++

    PS: désolé pour le code indigèste je ne vois pas comment le simplifier plus

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    En utilisant surement serialize()

    Voir ici pour $.post()

    A+

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 6
    Par défaut
    Merci pour les liens

    J'ai essayé avec .serialize() mais ça ne marche pas. Pourtant je fais exactement comme sur la documentation jQuery.

    Voilà ma fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $(document).ready(function(){
     
        function showValues() {
          var str = $("form").serialize();
          alert(srt);
        }
        $(": checkbox").click(showValues);
        showValues();
     
    });
    et le code html généré par mon scipt php :

    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
     
    <form>
       <table border=1>
          <tr>
             <td colspan=4 align='center'>
                Version logiciel : <input type='text' name='version' size=30>
             </td>
          </tr>
          <tr>
             <td colspan=4 align='center'>
                Commentaire : <input type='text' name='commentaire' size=30>
             </td>
          </tr>
          <tr>
             <td colspan=4 align='center'>
                Date : <input type='text' name='date' value=2009-10-31 size=30>
             </td>
          </tr>
          <tr>
             <td>
                <input type='checkbox' name='salle' id='salle_1' value=6 checked='checked'/>
                <label for='salle_1'>A099 (C2M - Denis Papin)</label><br>
                <input type='checkbox' name='salle' id='salle_2' value=5 checked='checked'/>
                <label for='salle_2'>B020 (C2M - Denis Papin)</label><br>
                <input type='checkbox' name='salle' id='salle_3' value=4 checked='checked'/>
                <label for='salle_3'>B055 (C2M - Sciences)</label><br>
                <input type='checkbox' name='salle' id='salle_4' value=2 checked='checked'/>
                <label for='salle_4'>C100 (C2M - Denis Papin)</label><br>
             </td>
          </tr>
          <tr>
            <td colspan=4 align=center>
              <input type='submit' value='Afficher'>
            </td>
          </tr>
       </table>
    </form><br>
    Je me demande si ce n'est pas le fait que mon formulaire soit généré par du php le problème... non?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Re,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $(document).ready(function(){
     
        function showValues() {
          var str = $("form").serialize();
          alert(srt); // c'est plutot str
        }
        $(": checkbox").click(showValues); // pas d'espace entre : et checkbox
        showValues();
     
    });
    Que t'affiche "alert(str)"?

    a+

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 6
    Par défaut
    Rien du tout c'est bien ça le problème.

    d'ailleur si je met : $("#results").text(str); à la place rien ne s'affiche non plus

  8. #8
    Invité
    Invité(e)
    Par défaut
    Re,

    Avec ce code (qui est le tien), cela m'affiche
    version=&commentaire=&date=2009-10-31&salle=6&salle=5&salle=4&salle=2
    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
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
    <html lang="en">
    <head>
        <title>syntaxe json</title>
        <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
        <script type="text/javascript">
        $(document).ready(function(){
     
            function showValues() {
              var str = $("form").serialize();
              alert(str);
            }
     
            $(":checkbox").click(showValues);
            showValues();
     
        });
        </script>
    </head>
    <body>
        <form>
            <table border=1>
               <tr>
                  <td colspan=4 align='center'>
                     Version logiciel : <input type='text' name='version' size=30>
                  </td>
               </tr>
               <tr>
                  <td colspan=4 align='center'>
                     Commentaire : <input type='text' name='commentaire' size=30>
                  </td>
               </tr>
               <tr>
                  <td colspan=4 align='center'>
                     Date : <input type='text' name='date' value=2009-10-31 size=30>
                  </td>
               </tr>
               <tr>
                  <td>
                     <input type='checkbox' name='salle' id='salle_1' value=6 checked='checked'/>
                     <label for='salle_1'>A099 (C2M - Denis Papin)</label><br>
                     <input type='checkbox' name='salle' id='salle_2' value=5 checked='checked'/>
                     <label for='salle_2'>B020 (C2M - Denis Papin)</label><br>
                     <input type='checkbox' name='salle' id='salle_3' value=4 checked='checked'/>
                     <label for='salle_3'>B055 (C2M - Sciences)</label><br>
                     <input type='checkbox' name='salle' id='salle_4' value=2 checked='checked'/>
                     <label for='salle_4'>C100 (C2M - Denis Papin)</label><br>
                  </td>
               </tr>
               <tr>
                 <td colspan=4 align=center>
                   <input type='submit' value='Afficher'>
                 </td>
               </tr>
            </table>
        </form>
     
    </body>
    </html>
    NB:
    Dans le html, mettre des " plutot que des '. Les valeurs des attributs sont toujours entourrées de "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="checkbox" name="salle" id="salle_3" value="4" checked="checked"/>
    edit, bien enlever l'espace de $(":checkbox").click(showValues);

    a++

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 6
    Par défaut
    J'ai enlevé l'espace et remplacé les cote par des double cotes ^^

    Maintenant j'ai bien une alert qui s'affiche sauf que mon script php (qui génére mon formulaire) est issu d'une requète ajax ($.post).

    Donc ma fonction ShowValue() est lancé avant que mon formulaire existe!

    Ya a t'il un moyen pour qu'elle ne se lance que lorsque mon formulaire existe?

    ps: ce que je peux faire c'est mettre tout ça sur mon compte ovh et te passer l'adresse pour que tu comprennes mieux... si ça t'interesse

  10. #10
    Invité
    Invité(e)
    Par défaut
    Re,

    Voir peut-être du coté de load(fn) et encore live(type, fn)

    A+

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 6
    Par défaut
    J'édit car j'ai trouvé une solution

    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
     
    $(document).ready(function(){
     
        $("#dede").live("submit", function(){
     
            var version = $('#dede').find("input[name=version]").val();
            var commentaire = $('#dede').find("input[name=commentaire]").val();
            var date = $('#dede').find("input[name=date]").val();
            var salles = $(":checkbox").serialize();
     
            $.post("jQuery/affecter.php", {version: version, commentaire: commentaire, date: date, salles: salles  },
            function success(data){
                $('#liste_salles').html(data);		
            });
        });
    });
    Voilà . Je ne suis pas arrivé à distinguer chaque salle comme je le voulais au départ mais je pense pouvoir me débrouiller en php.

    Merci encore Jlmag ++

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

Discussions similaires

  1. Comment faire passer une variable en plus d'un formulaire
    Par frisouille12 dans le forum Langage
    Réponses: 1
    Dernier message: 06/08/2009, 15h06
  2. Comment faire passer un menu par dessus une autre frame
    Par barthelv dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/11/2005, 11h03
  3. faire passer une variable d'une fct js à une page php
    Par harlock59 dans le forum Langage
    Réponses: 1
    Dernier message: 25/11/2005, 14h41
  4. Réponses: 5
    Dernier message: 08/03/2004, 10h28

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