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

JavaScript Discussion :

Liste AJAX : faire passer une variable javascript en globale


Sujet :

JavaScript

  1. #1
    Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2018
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2018
    Messages : 299
    Points : 67
    Points
    67
    Par défaut Liste AJAX : faire passer une variable javascript en globale
    Bonjour,
    J'utilise une liste ajax qui fonctionne comme ceci : https://www.w3schools.com/xml/tryit....yajax_database
    Je voudrai passer une variable javascript en mode globale, utilisable partout sur l'intégralité de mon site (one page website), à plusieurs reprises, dans des inputs et dans des requêtes SQL.
    Merci d'avance,

    Zarkoffe

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut
    soit tu la déclares en amont sur ta page soit tu la déclares avec window.mavarname
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2018
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2018
    Messages : 299
    Points : 67
    Points
    67
    Par défaut
    Merci pour ta réponse.
    Bon je ne peux pas la déclarer en amont, car cette variable est en faite la variable sélectionnée par ma liste AJAX, donc obligé de passer par la sortie de mon AJAX.
    Comment utiliser ma variable dans mes requêtes SQL?
    Ci-dessous ma variable globale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                //global variable nom du client que he choppe depuis un input et que je mets dans une fonction
                var varsociete = $( "#client_societe" ).val();
                iencli();
                function iencli() {
                document.getElementById("client").innerHTML = varsociete; 
                }
    Je voudrai quelque chose de ce style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $recup_messages = $bdd->query("SELECT * from action WHERE action_client = client");
    Sauf que "client" ici devrait être ma variable javascript varsociete (ça s'utilise comment <p id="client"></p je sais bien, mais là je veux chopper ma variable et la mettre dans ma requête SQL).
    Comment intégrer ma variable dans ma requête?

    Merci d'avance

  4. #4
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 177
    Points
    17 177
    Par défaut
    Salut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $recup_messages = $bdd->query("SELECT * from action WHERE action_client =" + varsociete + ");
    Ou je n'ai pas compris la question
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  5. #5
    Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2018
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2018
    Messages : 299
    Points : 67
    Points
    67
    Par défaut
    Merci pour ta réponse,
    Oui ça devrait être un truc comme ça. Ce que je trouve bizarre, c'est que mon IDE (visual studio code) le laisse en blanc, comme si il comprenait pas ce que c'était.
    Mais le plus génant, c'est l'affichage :
    Nom : facture.png
Affichages : 1300
Taille : 54,8 Ko

    Ma requête complète :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $recup_messages = $bdd->query("SELECT facture_ref, facture_date, facture_fournisseur, facture_produit, facture_quantite,
    facture_montant, client_id, client_societe FROM facture, client WHERE client_societe = "+ varsociete +" ORDER by facture_date DESC");
    client_societe est bien le nom de ville sur lequel "varsociete" doit se mettre à filtrer.
    Il y a une contrainte entre facture_contact et client_id.

    Si quelqu'un a une idée.. merci!

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $recup_messages = $bdd->query(
    tu es coté php serveur
    ou js client ????
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2018
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2018
    Messages : 299
    Points : 67
    Points
    67
    Par défaut
    Tu as raison, cette fichue variable est côté serveur...
    Comment faire ?
    Code php : 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
    <?php include '../../Include/connection.php' ; 
     
    $messages = array();
     
    $recup_messages = $bdd->query("SELECT facture_ref, facture_date, client_id, client_societe FROM facture, client WHERE client_societe = "+ varsociete +" ORDER by facture_date DESC");
     
    while($all = $recup_messages->fetch())
    {
      $messages[] = $all;
    } ?>
     
    <table class="table table-bordered table-striped table-condensed">
      <thead> 
        <tr>
        <th width="15%">N° facture</th>
        <th width="12%">Date Facture</th>
        </tr> 
      </thead>
        <?php foreach($messages as $message) { ?>
        <tr>
          <td><h4><B><?php echo $message['facture_ref'] ?><B></h4></td>
          <td><h4><B><?php echo $message['facture_date'] ?><B></h4></td>
     
        </tr>
        <?php } ?>
      </table>
    Merci d'avance

  8. #8
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Il faut que tu transmettes la variable et sa valeur via get ou post et récupérer la valeur dans la page php via le tableau $_POST ou $_GET.

    Exemple avec get.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $varsociete = $_GET["varsociete"];
    Poste le code pour appeler la page php.
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  9. #9
    Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2018
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2018
    Messages : 299
    Points : 67
    Points
    67
    Par défaut
    Merci pour ta réponse.
    Voici ma liste ajax:
    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
     
    <?php require_once('construire.php') ;  ?>
     
    <div class="container">
    <!-- code qui va appeler mon php -->
    <script>
    function ficheclient(str) {
        if (str == "") {
            document.getElementById("txtHint").innerHTML = "";
            return;
        } else {
            var xmlhttp;
            if (window.XMLHttpRequest) {
                // code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp = new XMLHttpRequest();
            } else {
                // code for IE6, IE5
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange = function() {
                if (this.readyState == 4 && this.status == 200) {
                    document.getElementById("txtHint").innerHTML = this.responseText;
     
     
                //global variable nom du client
                var varsociete = $( "#client_societe" ).val();
                iencli();
                function iencli() {
                document.getElementById("client").innerHTML = varsociete; 
                }
     
     
                }
            };
            xmlhttp.open("GET","getuser.php?q="+str,true);
            xmlhttp.send();
        }
    }
    </script>
     
    <div id="txtHint"><b>La fiche client va être chargée ici une fois votre choix fait.</b></div>
     
    <?php include '../Include/footer.php' ; ?>
        </body>
      </html>
    Je récupère la valeur d'un input de "getuser.php" qui correspond à mon client et qui est donc chargé à chaque fois que je sélectionne un nouvel élément dans ma liste AJAX

  10. #10
    Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2018
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2018
    Messages : 299
    Points : 67
    Points
    67
    Par défaut
    up please!
    J'ai essayé d'intégrer ma variable JS dans ma requête, ou encore d'utiliser un GET variable et d'intégrer ma variable ma requête mais le résultat est le suivant:
    Nom : Capture d’écran de 2019-01-21 10-11-27.png
Affichages : 1253
Taille : 60,5 Ko
    Avec variable JS directement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $varsociete = $_GET["varsociete"];
    echo $varsociete;
     
    $messages = array();
     
    $recup_messages = $bdd->query("SELECT facture_ref, facture_date, facture_fournisseur, facture_produit, facture_quantite,
    facture_montant, client_id, client_societe FROM facture, client WHERE client_societe = "+ varsociete +" ORDER by facture_date DESC");
    Avec GET de la variabe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $varsociete = $_GET["varsociete"];
    echo $varsociete;
     
    $messages = array();
     
    $recup_messages = $bdd->query("SELECT facture_ref, facture_date, facture_fournisseur, facture_produit, facture_quantite,
    facture_montant, client_id, client_societe FROM facture, client WHERE client_societe = ".$varsociete." ORDER by facture_date DESC");
    Je ne sais pas si "$recup_messages" une variable PHP comme celle ci contenant une variable JS dans sa requête sera dynamique ou non. Pour moi, comme cette variable est PHP, donc côté serveur, il n'y aura aucune actualisation malgrès ma variable JS dans la requête.
    Si quelqu'un pouvait m'éclairer.. merci

  11. #11
    Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2018
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2018
    Messages : 299
    Points : 67
    Points
    67
    Par défaut Rendre variable JS dispo sur tout le site
    Bonjour,
    J'aimerai rendre une variable js disponible sur tout mon site (un One Page Website).
    Cette variable doit être actualisé à chaque chargement d'une liste AJAX. Voici donc ce que j'ai fais:
    Code html : 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
    <?php require_once('construire.php') ;  ?>
     
    <div class="container">
    <!-- code qui va appeler mon php -->
    <script>
    function ficheclient(str) {
        if (str == "") {
            document.getElementById("txtHint").innerHTML = "";
            return;
        } else {
            var xmlhttp;
            if (window.XMLHttpRequest) {
                // code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp = new XMLHttpRequest();
            } else {
                // code for IE6, IE5
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange = function() {
                if (this.readyState == 4 && this.status == 200) {
                    document.getElementById("txtHint").innerHTML = this.responseText;
     
                //ici j'ai ma variable que je récupère depuis un input (elle y arrive bien, j'ai verif via un console log)
                var varsociete = $( "#client_societe" ).val();
                     }                         
                }
     
            };
            xmlhttp.open("GET","getuser.php?q="+str,true);
            xmlhttp.send();
        }
    }
    </script>
     
     
    <div id="txtHint">
        <div class="alert alert-info">
            <strong>Info:</strong> La fiche client va être chargée ici une fois une fois que vous aurez sélectionné votre client.
        </div>
    </div>
     
     
    <?php include '../Include/footer.php' ; ?>
        </body>
      </html>

    Je souhaiterai ensuite l'utiliser à 30 endroits différents de mon site, dont la majorité du temps dans des requêtes SQL.
    Donc quand je fais tourner ma liste AJAX, il faut que mes requêtes SQL s'actualisent en fonction de ma variable "varsociete".
    Exemple de requête:
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php include '../../Include/connection.php' ; 
     
    $varsociete = $_GET["varsociete"];
    echo $varsociete;
     
    $messages = array();
     
    $recup_messages = $bdd->query("SELECT facture_ref, facture_date, facture_fournisseur, facture_produit, facture_quantite,
    facture_montant FROM facture WHERE facture_societe = ".$varsociete ." ORDER by facture_date DESC");
     
    //la suite est un tableau (il n'est pas utile que je vous le mette ici, sauf si vous le voulez vraiment

    Mon soucis vient donc du : comment récupérer ma variable? Comment la récupérer d'une manière aussi simple que les variables sessions en PHP?
    Faut-il que je me tourne vers ceci : https://www.w3schools.com/jsref/tryi...n_localstorage ?
    Merci d'avance!

  12. #12
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2019
    Messages : 9
    Points : 11
    Points
    11
    Par défaut
    Bonjour

    Quand tu dis "récupérer ma variable", tu veux dire que tu veux y avoir accès dans toutes tes fonction javascript ?
    Et tu travaille en single page (sans rechargement de page) ? Dans ce cas tu peux utiliser une variable myVar globale ou window.myVar

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    myVar = null;
    // ou
    window.myVar = null;
    Tu peux aussi utiliser le localstorage pour un stockage persistant, mais ce n'est peut-être pas nécéssaire dans ton cas

  13. #13
    Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2018
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2018
    Messages : 299
    Points : 67
    Points
    67
    Par défaut
    Merci pour ta réponse!
    D'accord donc ma variable devrait déjà être présente partout.
    Comment intégrer cela à mes requêtes SQL?
    Comme tu peux le voir je passe par un GET et ensuite je l'introduis dans am requête, mais ça ne donne rien...
    Il faut à tout prix que ma requête SQL s'actualise à chaque mouvement de l'AJAX, et cela sur plusieurs pages!

    Comment faire?

    merci

  14. #14
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2019
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2019
    Messages : 9
    Points : 11
    Points
    11
    Par défaut
    Dans ce cas tu dois transmettre ta variable JS au PHP en la passant en paramètre (query param) dans toutes tes requêtes ajax, exactement comme tu le fais avec le paramètre "q" ici : xmlhttp.open("GET","getuser.php?q="+str,true);

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    xmlhttp.open("GET","getuser.php?q="+str+"&varsociete="+varsociete,true);
    // et si besoin, encoder le paramètre
    xmlhttp.open("GET","getuser.php?q="+str+"&varsociete="+encodeURIComponent(varsociete),true);

  15. #15
    Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2018
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2018
    Messages : 299
    Points : 67
    Points
    67
    Par défaut
    merci pour ta réponse, mais cela ne marche pas : cela bloque ma requête AJAX.
    Je n'ai pas besoin de l'envoyer (ma variable JS), elle est déjà disponible partout sur mon site.

    Ma question, c'est comment la récupérer et l'insérer dans une requête SQL qui sera dynamique!

    Merci!

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

    je n'ai pas tout lu, ni tout compris...

    Par contre, j'ai l'impression que TU n'as pas compris une chose essentielle :
    • AJAX est (par défaut) ASYNCHRONE.


    Autrement dit, il faut ATTENDRE le retour AJAX pour pouvoir utiliser une variable.
    • Ce n'est pas "instantané"
    • Et il faut en tenir compte


    La question :
    • n'est pas : "comment la récupérer ?",
    • mais : "QUAND est-elle disponible ?"




    Par conséquent, il faut sans doute revoir la conception de ton script JS.


    Cela dit, tu ne nous montres pas une vision globale de ton script (enchainement des "actions" *,....).
    Donc : difficile d'en dire plus.

    * L'enchainement des "actions" n'a pas forcément de rapport avec l'ordre dans lequel sont écrites les actions/fonctions dans le script.

    Citation Envoyé par Zarkoffe Voir le message
    ...J'aimerai rendre une variable js disponible sur tout mon site (un One Page Website)....
    Alors il faut effectuer les modif./appel PHP A CHAQUE FOIS QUE cette variable est modifiée :
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function change_variable()
    {
       // appel Ajax pour modifier la variable
       appel Ajax.... (){
          var la_variable = {retour_Ajax};
          // modification des données liées à cette variable
          modif_machin( la_variable );
          modif_truc( la_variable );
          modif_bidule( la_variable );
       }
    }
    Dernière modification par Invité ; 13/02/2019 à 19h31.

  17. #17
    Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2018
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2018
    Messages : 299
    Points : 67
    Points
    67
    Par défaut
    Alors là je ne suis pas d'accord.
    Oui l'AJAX est asynchrone.
    "il faut ATTENDRE le retour AJAX pour pouvoir utiliser une variable." Oui merci c'est bien ce que je fais, c'est pour ça que j'introduis dans le retour de mon AJAX ma variable (et elle disponible instantanément, ou très très rapidement, car avec un console log ou autre j'ai le résultat direct et ça marche à la perfection).
    Je ne vous mets pas l'intégralité de mon code pour que vous puissiez comprendre la petite chose que je vous demande sans que n'aillez à vous étaler et vous perdre dans des lignes superflus.

    Je vous dis ceci : je parviens bien à rendre ma variable disponible sur mon site, seulement je ne sais pas comment la récupérer et la traiter pour l'utiliser dans mes variables SQL. Je vous remets mon AJAX :
    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
     
    <?php require_once('construire.php') ;  ?>
     
    <div class="container">
    <!-- code qui va appeler mon php -->
    <script>
    function ficheclient(str) {
        if (str == "") {
            document.getElementById("txtHint").innerHTML = "";
            return;
        } else {
            var xmlhttp;
            if (window.XMLHttpRequest) {
                // code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp = new XMLHttpRequest();
            } else {
                // code for IE6, IE5
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange = function() {
                if (this.readyState == 4 && this.status == 200) {
                    document.getElementById("txtHint").innerHTML = this.responseText;
     
                //ici j'ai ma variable que je récupère depuis un input (elle y arrive bien, j'ai verif via un console log)
                var varsociete = $( "#client_societe" ).val();
                     }                         
                }
     
            };
            xmlhttp.open("GET","getuser.php?q="+str,true);
            xmlhttp.send();
        }
    }
    </script>
     
     
    <div id="txtHint">
        <div class="alert alert-info">
            <strong>Info:</strong> La fiche client va être chargée ici une fois une fois que vous aurez sélectionné votre client.
        </div>
    </div>
    Et ici une requête SQL sur mon site, où je voudrai récupérer ma variable à l'intérieur de mon SQL et faire comprendre à ma requête que dès que la variable change, je refais une requête à la place de la précédente pour toujours être en accord avec "varsociete" qui a été définis.
    Ci-dessous le SQL par exemple:
    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
     
    <?php include '../../Include/connection.php' ; 
     
    $varsociete = $_GET["varsociete"];
    echo $varsociete;
     
    $messages = array();
     
    $recup_messages = $bdd->query("SELECT facture_ref, facture_date, facture_fournisseur, facture_produit, facture_quantite,
    facture_montant FROM facture WHERE facture_societe = ".$varsociete ." ORDER by facture_date DESC");
     
    while($all = $recup_messages->fetch())
    {
      $messages[] = $all;
    } ?>
     
    <table class="table table-bordered table-striped table-condensed">
      <thead> 
        <tr>
        <th width="15%">N° facture</th>
        <th width="12%">Date Facture</th>
        <th width="20%">Fournisseur</th>
        <th width="20%">Produit</th>
        <th width="15%">Quantité</th>
        <th width="20%">Montant</th>
        <th width="5%%">Modifier/Supprimer</th>
        </tr> 
      </thead>
        <?php foreach($messages as $message) { ?>
        <tr>
          <td><h4><B><?php echo $message['facture_ref'] ?><B></h4></td>
          <td><input type="date" class="form-control" id="facture_date" value="<?php echo $message['facture_date'] ?>" /></td>
          <td><input type="text" class="form-control" id="facture_fournisseur" value="<?php echo $message['facture_fournisseur'] ?>" /></td>
          <td><input type="text" class="form-control" id="facture_produit" value="<?php echo $message['facture_produit'] ?>" /></td>
          <td><input type="text" class="form-control" id="facture_quantite" value="<?php echo $message['facture_quantite'] ?>" /></td>
          <td><input type="text" class="form-control" id="facture_montant" value="<?php echo $message['facture_montant'] ?>" /></td>
          <td><form enctype="multipart/form-data" method="post" action="../PHP/Traitement/update/interlocuteur.php">
                <input type="hidden" name="id_interlocuteur" value="<?php echo $interlocuteur['interlocuteur_id']; ?>"/>
                <button type="submit" class="btn btn-success btn-block" name="interlocuteur_update">Modifier</button>
            </form>
          <form enctype="multipart/form-data" method="post" action="../PHP/Traitement/delete/interlocuteur.php">
                <input type="hidden" name="id_interlocuteur" value="<?php echo $interlocuteur['interlocuteur_id']; ?>"/>
                <button type="submit" class="btn btn-danger btn-block" name="interlocuteur_delete">Supprimer l'interlocuteur</button>
            </form></td>
        </tr>
        <?php } ?>
      </table>
    PS : peux-tu clarifier ta réponse? "modif_machin" etc, je ne comprends pas totalement. Merci d'avance

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

    je pense surtout que tu as une grande confusion dans ta tête... et que tu mélanges un peu tout :
    • JavaScript et PHP (variables)
    • JavaScript et jQuery (syntaxes)
    • "one page" et "plusieurs pages"
    • ...

    Bref : on n'y comprends rien parce que tu ne sais pas l'exprimer clairement.

    Reprenons depuis le début, avec un exemple simple.

    1- Un <input> et un <div> pour afficher le retour :

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <input id="client_societe" type="text" value="" />
    <div id="retour_affichage"></div>

    2- Un script jQuery, pour afficher un retour quand on modifie l'<input> :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $( "#client_societe" ).on( 'keyup', function(){
       // on récupère la valeur :
       var varsociete_JS = $( "#client_societe" ).val();
       // ici, on peut TRAITER cette valeur (appel de fonctions JS)
       afficher_retour_ajax( varsociete_JS );
    });
    3- La fonction JS afficher_retour_ajax() va permettre de faire un appel Ajax (voir : jQuery.ajax() ):
    Code JavaScript : 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 afficher_retour_ajax( varsociete_JS )
    {
       // appel Ajax (syntaxe jQuery)
       $.ajax({
         method: "POST",
         url: "traitement-ajax.php",
         data: { varsociete_Transmis : varsociete_JS }
       })
       .done(function( retour_html ) {
           $( "#retour_affichage" ).html( retour_html ); // on affiche le résultat du retour dans la <div>
       })
       .fail(function() {
        alert( "error" );
       });
    }
    Voir aussi jQuery.post(), pour une syntaxe (un peu) simplifiée :
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function afficher_retour_ajax( varsociete_JS )
    {
       // appel Ajax (syntaxe jQuery)
       $.post( 'traitement-ajax.php', { varsociete_Transmis : varsociete_JS } )
       .done(function( retour_html ) {
           $( "#retour_affichage" ).html( retour_html ); // on affiche le résultat du retour dans la <div>
       })
       .fail(function() {
           alert( "error" );
       });
    }
    4- traitement-ajax.php :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php 
    if( isset($_POST["varsociete_Transmis"]) )
    {
       $varsociete_PHP = $_POST["varsociete_Transmis"];
     
       // la variable PHP est disponible pour un traitement PHP (requete SQL,.....)
       include '../../Include/connection.php' ; 
     ...
     
       // moi, je me contente d'un affichage :
       echo 'OK, la variable est : <b>'.$varsociete_PHP.'</b>';
    }

    Avec ça, tu as de quoi faire un traitement Ajax simple.
    Maintenant, pour aller plus loin....

    5- Si tu dois faire plusieurs appels Ajax ou autres traitements JS (plusieurs mise à jour DANS la MEME page), il suffit d'avoir plusieurs fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $( "#client_societe" ).on( 'keyup', function(){
       // on récupère la valeur :
       var varsociete_JS = $( "#client_societe" ).val();
       // ici, on peut TRAITER cette valeur (appel de fonctions JS)
       afficher_retour_ajax( varsociete_JS );
       autre_action_js( varsociete_JS );
       encore_autre_chose_a_faire( varsociete_JS );
    });
    6- Enfin, tu parles de "conserver cette valeur" quand tu CHANGES de page (donc, avec RECHARGEMENT de page).
    Là, c'est autre chose : il faut ENREGISTRER cette valeur.
    Pour ma part, j'utilise une variable de SESSION PHP, que j'enregistre dans le 1er fichier PHP appelé (ici : dans traitement-ajax.php) :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php session_start(); // IMPORTANT : démarrage de la SESSION
    if( isset($_POST["varsociete_PHP"]) )
    {
       $varsociete_PHP = $_POST["varsociete_PHP"];
     
       // on enregistre dans une variable de SESSION
       $_SESSION["varsociete_PHP"] = $varsociete_PHP;
     
       // la variable PHP est disponible pour un traitement PHP (requete SQL,.....)
    ...
    }

    Ainsi, si tu CHANGES de page, tu peux récupérer la valeur enregistrée avec:
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?php session_start(); // IMPORTANT : démarrage de la SESSION
       $varsociete_PHP = ( isset($_SESSION["varsociete_PHP"]) )? $_SESSION["varsociete_PHP"] : '';


    En espérant que ce soit plus clair maintenant.
    Dernière modification par ProgElecT ; 14/02/2019 à 09h29.

  19. #19
    Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2018
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2018
    Messages : 299
    Points : 67
    Points
    67
    Par défaut
    Merci pour ta réponse.

    je pense surtout que tu as une grande confusion dans ta tête... et que tu mélanges un peu tout :
    JavaScript et PHP (variables)
    JavaScript et jQuery (syntaxes)
    "one page" et "plusieurs pages"
    => Alors non merci je connais bien ces différences et je sais comment ils fonctionnent.
    Enfin, tu parles de "conserver cette valeur" quand tu CHANGES de page (donc, avec RECHARGEMENT de page).
    => Si je te dis que j'ai un One Page Website et je te parle de changement de pages, je change de page "dynamiquement", c'est évident."

    Ne vas pas croire que je me contredis moi-même car tu as mal compris. Si mon site est dynamique, j'entends bien sûr par un changement de page par "un changement d'onglet", ou des fenêtres modales. Mais on reste bien sûr sur la même page, tout se fait dynamiquement (JS pur & boostrap 3 pour ma part). Donc pas de variable de session car j'ai besoin de quelque chose de réellement dynamique.

    Merci pour ton code JS et Jquery, c'est à peu près ça que je cherche mais je connaissais déjà cela.
    Seulement j'ai quelque chose d'étrange : Après l'exécution de l'AJAX. un console log placé HORS du retour en AJAX ne me donne rien. Il ne me renvois l'élément que j'ai sélectionné (celui récupéré par varsociete bien sûr) QUE lors que je console.log dans mon AJAX (comme indiqué dans le code que j'ai posté) : donc ma variable n'est pas "globale", pas disponible sur tout mon site, et c'est déjà le 1er problème.

    En essayant le code Jquery dans la sortie de mon AJAX, j'ai le 'error', comme si il ne parvenait pas à trouver ma variable alors que mon console log me la rends bien :


    le code :
    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
     
                //global variable nom du client
                var varsociete = $( "#client_societe" ).val();
                iencli();
                function iencli() {
                document.getElementById("client").innerHTML = varsociete; 
                //là par exemple je la renvois vers une DIV, et ça marche. mais ce n'est pas ce que je veux. Je veux en faire une variable réutilisable dans des requêtes SQL. Je m'en fous de l'afficher.
                }
                console.log(varsociete);
     
                function afficher_retour_ajax( varsociete )
                {
                // appel Ajax (syntaxe jQuery)
                $.ajax({
                    method: "POST",
                    url: "constuire.php",
                    data: { varsociete_Transmis : varsociete }
                })
                .done(function( retour_html ) {
                    $( "#retour_affichage" ).html( retour_html ); // on affiche le résultat du retour dans la <div>
                })
                .fail(function() {
                    alert( "error" );
                });
                }
                afficher_retour_ajax();
    Il y a autre chose encore que je ne sais pas : Est-ce que ma requête SQL va t-elle se refaire simplement parce que je lui aurais redonné une variable? Ca m'étonnerait, car ça se passe côté SERVEUR. Et comment lui la donner? Faire un GET de ma variable JS, et inclure la variable récupéré à l'intérieur de la requête comme ceci? Ca suffira?
    Donc comment je dois m'y prendre? (j'ai comme solution de faire un setInterval(function, 1000). Mais je veux actualiser ma requête SQL que lorsque varsociete change, et pas tout les 1000 millièmes de secondes.
    Si quelqu'un pouvait m'éclairer sur les points précis que j'ai abordé et m'apporté un début de réponse, merci d'avance

Discussions similaires

  1. [AJAX] passer une variable javascript dans python
    Par stoner2008 dans le forum AJAX
    Réponses: 2
    Dernier message: 15/05/2012, 15h52
  2. [AJAX] Faire passer une variable AJAX dans autre chose qu'un <div></div>
    Par fixbraun dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/02/2009, 14h34
  3. [AJAX] Faire passer une variable $_FILE par AJAX
    Par Mazike dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 06/03/2007, 12h22
  4. [Javascript] Passer une variable javascript en param de page
    Par Psykorel dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/04/2006, 15h04
  5. 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

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