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 :

LocalStorage et SQL


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 LocalStorage et SQL
    Bonjour,
    J'ai créé une liste AJAX. A l'exécution de ce dernier, je souhaite récupérer un ID (l'ID change donc à chaque mouvement de la liste). Je vous l'affiche ici avec un console log à l'intérieur de mon AJAX :
    Nom : stored.png
Affichages : 587
Taille : 20,7 Ko
    A partir de cet ID récupéré, je souhaiterai le réutiliser : lorsque l'on change de client, on charge les factures du nouveau client en virant celle du précédent.
    J'ai donc mis mon ID en local storage dans mon AJAX (car la requête SQL se trouve sur une fenêtre modal à l'extérieur du fichier chargé par l'AJAX):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    localStorage.key = varsociete;
    Et je souhaiterai dynamiser ma requête SQL dans cet esprit (ou autre solution si vous avez):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $varsociete = $_GET["varsociete"];
    echo $varsociete;
     
    $messages = array();
     
    $recup_messages = $bdd->query("SELECT * FROM facture WHERE facture_societe = ".$varsociete ." ORDER by facture_date DESC");
    Est-ce la bonne solution? Faut-il s'y prendre autrement?

    Ne me proposez que des solutions dynamiques SVP, pas de session storage PHP ou quoi que ce soit. Je ne recharge pas ma page et c'est là la difficulté.

    Merci d'avance.

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

    Citation Envoyé par Zarkoffe Voir le message
    ...pas de session storage PHP ou quoi que ce soit. Je ne recharge pas ma page et c'est là la difficulté. ...
    C'est là où tu te trompes. (comme je te l'ai déjà dit).

    A partir du moment où tu appelles des fichiers PHP via Ajax, rien ne t'empêche de stocker la données dans une variable de SESSION PHP, qui sera disponible dans TOUS les fichiers PHP appelés via Ajax.


    PRINCIPE :

    1- JavaScript : à chaque changement de "varsociete" :
    • tu appelles D'ABORD une fonction Js new_varsociete()
    • dans laquelle tu appelles un fichier PHP new_varsociete.php, qui permet de créer/modifier le contenu de la variable de SESSION PHP.
    • Au retour de cet appel Ajax, tu déclenches tes autres fonctions (mise à jour des tables,.....)

    2- new_varsociete.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php session_start(); // important !
    if( empty($_SESSION['varsociete']) ){ $_SESSION['varsociete'] = 0; }
    if( !empty($_GET['varsociete']) ){ $_SESSION['varsociete'] = $_GET['varsociete']; }
    3- Dans tous les autres fichiers PHP (appelée ensuite via Ajax), il n'est plus besoin de récupérer $_GET['varsociete'] : on se sert de $_SESSION['varsociete'].

  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, je m'y prenais mal tu as raison c'est exactement ce qu'il me fallait.
    J'ai encore une petite question : aurais-tu un exemple, ou un cours, sur comment actualiser mes fenêtres/onglets (SQL) qui ont besoin d'être actualisé?
    Dans l'idéal, dès que j'arrive sur la page, ces pages doivent être vierge (ou au moins afficher un message "Choisissez un client pour pouvoir visualiser ses factures" par exemple.
    Donc dans mon ajax je me contente d'appeler une fonction :
    Par exemple.
    Puis sur ma fenêtre de facture, faire un "si la facture est appelé alors chargé le contenu entre 2 div", qui serait ma requête SQL et le tableau qui en découle.
    Sinon, afficher "sélectionner un client".
    Je sais très bien faire un système tel que celui ci en PHP... mais pas en JS ou Jquery.

    Si tu pouvais m'orienter vers un exemple ou un début de solution... merci

    PS : je sous-entends qu'avec le JS ou Jquery je peux très bien appeler ceci quand je le veux, et plusieurs fois dynamiquement... non?

    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
    $recup_messages = $bdd->query('SELECT * from conditions WHERE conditions_clients = "'.$_SESSION['varsociete'].'" AND client_contact = "'.$_SESSION['Contact_id'].'" ORDER by conditions_client DESC');
     
    while($all = $recup_messages->fetch())
    {
      $messages[] = $all;
    } ?>
     
    <table class="table table-bordered table-striped table-condensed">
      <thead> 
        <tr>
          <th width="20%">Groupement</th>
          <th width="20%">Fournisseur</th>
        </tr> 
      </thead>
      <div class="msgcondi"></div>
        <?php foreach($messages as $action) { ?>
        <tr>
            <td><input type="text" class="form-control conditions_groupement" value="<?php echo $action['conditions_groupement'] ?>" /></td>
            <td><input type="text" class="form-control conditions_fournisseur" value="<?php echo $action['conditions_fournisseur'] ?>" /></td>
         </tr>
        <?php } ?>
      </table>

  4. #4
    Invité
    Invité(e)
    Par défaut
    Relis ce que je t'ai écrit dans cette réponse.
    Notamment le point 5-.

    En adaptant à ce que je viens de dire plus haut :

    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    "use strict";
     
    $( "#client_societe" ).on( 'keyup', function(){
       // on récupère la valeur :
       var varsociete_JS = $( "#client_societe" ).val();
       // on traite
       new_varsociete( varsociete_JS );
    });
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    // Nouvelle societe
    function new_varsociete( varsociete_JS )
    {
       // 1- on enregistre le nouveau numéro "varsociete" dans une SESSION PHP, via Ajax
       // appel Ajax (syntaxe jQuery)
       $.ajax({
         method: "POST",
         url: "new_varsociete.php",
         data: { varsociete_Transmis : varsociete_JS }
       })
       .done(function( retour_html ) {
           // 2- éventuellement, on récupère varsociete_PHP en "donnée de retour" ( retour_html )
           var varsociete_JS = retour_html;
     
           // 3- ICI, on peut appeler d'AUTRES fonctions JS, afin de mettre à jour telle ou telle partie du site
           // REMARQUE : on garde varsociete_JS en PARAMETRE de ces fonctions, pour pouvoir faire des tests JS (si varsociete_JS ='' ou si numérique, ou...
           afficher_retour_ajax( varsociete_JS );
           autre_action_js( varsociete_JS );
           encore_autre_chose_a_faire( varsociete_JS );
       })
       .fail(function() {
        alert( "error" );
       });
    }
    Explication du point 2- :

    Pour être sûr qu'on travail avec le bon varsociete, on peut récupérer celui effectivement enregistré dans la variable de SESSION PHP.
    On s'assure ainsi d'"avoir le bon".

    Il suffit de faire un echo dans le fichier PHP new_varsociete.php :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php session_start(); // important !
    if( empty($_SESSION['varsociete']) ){ $_SESSION['varsociete'] = 0; }
    if( !empty($_GET['varsociete']) ){ $_SESSION['varsociete'] = $_GET['varsociete']; }
    echo $_SESSION['varsociete']; // "donnée de retour"

    Explication du point 3- :

    on garde varsociete_JS en PARAMETRE de ces fonctions, pour pouvoir faire des tests JS.
    En effet, si on N'A PAS choisi de varsociete (valeur 0 ou '', en fonction de ce que tu as mis dans le <select>), alors le traitement/affichage sera différent.


    Remarque importante.
    Dans le fichier PHP new_varsociete.php, tu peux/dois faire appel à la BDD pour savoir si cet id "varsociete" est bien présent !
    S'il n'est pas présent, il faut renvoyer une erreur (ou "0", ou...).

    En clair, il faut que tu sois RIGOUREUX sur la LOGIQUE et la chronologie des actions.

  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.
    Je comprends ce que tu fais mais je ne m'y serais pas pris comme ça. Comme mon AJAX balance du php, autant l'utiliser!!!!! non? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        $requete = "SELECT * FROM client WHERE UPPER(client_id) = :client_id";
        $stmt = $bdd->prepare($requete);
        $stmt->bindValue('client_id',trim(strtoupper($_GET['q'])),PDO::PARAM_STR);
        $stmt->execute();
     
        while( $donnees = $stmt->fetch() ) { ?>
     
    <?php
    $_SESSION['varsociete'] = $donnees['client_societe']; 
    echo $_SESSION['varsociete']; ?>
    Et ensuite je voulais simplement inclure cette "$_SESSION['varsociete']; " là où j'en ai besoin. Il ne me restait plus qu'à trouver comment actualiser mon SQL quoi...

    Bon je mets tout ça de côté et je me repenche sur ta proposition. Je comprends ton code (même si il ne marche pas pour ma part).
    Il y a un truc que je ne comprends pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    method: "POST",
    url: "new_varsociete.php",
    Je vais donc devoir écrire cette fonction autant de fois que je vais utiliser ma variable sur mon site?
    (en changement à chaque fois le nom de ma fonction et de mon URL bien sûr). Ca me parait vraiment lourd comme procédé comparé à la solution que je pensais être la plus simple au début de ce message : je fais ma variable session à partir d'un élément que j'ai déjà, et hop je l'appelle quand je veux! et j'ai plus qu'à me faire une fonction JS/jquery qui va m'actualiser chaque SQL que j'ai besoin.

    ci-dessous mon code pour que tu vois ce que j'ai :

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    <?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;
     
                    "use strict";
     
                    $( "#client_societe" ).on( 'keyup', function(){
                        // on récupère la valeur :
                        var varsociete_JS = $( "#client_societe" ).val();
                        // on traite
                        new_varsociete( varsociete_JS );
                    });
     
                    // Nouvelle societe
                    function new_varsociete( varsociete_JS )
                    {
                    // 1- on enregistre le nouveau numéro "varsociete" dans une SESSION PHP, via Ajax
                    // appel Ajax (syntaxe jQuery)
                    $.ajax({
                        method: "POST",
                        url: "menu/condition.php",
                        data: { varsociete_Transmis : varsociete_JS }
                    })
                    .done(function( retour_html ) {
                        // 2- éventuellement, on récupère varsociete_PHP en "donnée de retour" ( retour_html )
                        var varsociete_JS = retour_html;
     
                        // 3- ICI, on peut appeler d'AUTRES fonctions JS, afin de mettre à jour telle ou telle partie du site
                        // REMARQUE : on garde varsociete_JS en PARAMETRE de ces fonctions, pour pouvoir faire des tests JS (si varsociete_JS ='' ou si numérique, ou...
                        afficher_retour_ajax( varsociete_JS );
                        autre_action_js( varsociete_JS );
                        encore_autre_chose_a_faire( varsociete_JS );
                    })
                    .fail(function() {
                        alert( "error" );
                    });
                    }
     
     
     
                }
            };
            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>
    getuser.php en simplifié, la page visée par 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
     
    <?php include '../Include/connection.php' ;
          include 'conditions.php' ;
     
        $requete = "SELECT * FROM client WHERE UPPER(client_id) = :client_id";
        $stmt = $bdd->prepare($requete);
        $stmt->bindValue('client_id',trim(strtoupper($_GET['q'])),PDO::PARAM_STR);
        $stmt->execute();
     
        while( $donnees = $stmt->fetch() ) { ?>
     
     
    // je pensais à ceci
    <?php
    //$_SESSION['varsociete'] = $donnees['client_societe']; 
    //echo $_SESSION['varsociete']; 
    ?>
     
    <div class="container" style="text-align:center;">
     
    <form enctype="multipart/form-data" method="post" action="../PHP/Traitement/update_client.php" >
    <div class="row">
      <div class="pull-left" style="width:45%">
          <table class="table table-bordered table-striped table-condensed">
            <thead> <!-- En-tête du tableau -->
                <tr>
                    <th>Préfixe</th>
                    <th>Nom du client</th>
                </tr>
            </thead>
            <tbody> <!-- Corps du tableau -->
                <tr>
                    <td><input class="form-control client_prefixe" type="text" id="client_prefixe" value="<?php echo $donnees['client_prefixe'] ?>" /></td>
                    <td><input name="get_societe" class="form-control client_societe" type="text" id="client_societe" value="<?php echo $donnees['client_societe'] ?>" /></td>
                </tr>
            </tbody>
          </table>
            <?php } $stmt->closeCursor(); ?>
      </div>
    page condition, l'une des pages où je veux récup la variable session et l'utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php include '../../Include/connection.php' ; 
     
     // important !
    if( empty($_SESSION['varsociete']) ){ $_SESSION['varsociete'] = 0; }
    if( !empty($_GET['varsociete']) ){ $_SESSION['varsociete'] = $_GET['varsociete']; }
    echo $_SESSION['varsociete']; // "donnée de retour"
    Visuellement:
    Nom : Capture d’écran de 2019-02-19 16-25-47.png
Affichages : 503
Taille : 82,6 Ko

  6. #6
    Invité
    Invité(e)
    Par défaut
    Oups...

    En effet, en method: "POST", il faut récupérer avec $_POST (pas $_GET).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if( !empty($_POST['varsociete']) ){ $_SESSION['varsociete'] = $_POST['varsociete']; }

    Quant à l'explication de la syntaxe, je t'ai déjà donné un lien...

  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
    D'accord merci je comprends.

    J'ai maintenant un "0" en résultat à chaque fois.
    un console log :
    Nom : Capture d’écran de 2019-02-20 10-10-35.png
Affichages : 479
Taille : 6,7 Ko
    Seulement si je ne mets que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var varsociete_JS = $( "#client_societe" ).val();
    new_varsociete( varsociete_JS );
    au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $( "#client_societe" ).on( 'keyup', function(){
       var varsociete_JS = $( "#client_societe" ).val();
       new_varsociete( varsociete_JS );
    });
    j'arrive à retrouver:
    Nom : Capture d’écran de 2019-02-20 10-15-23.png
Affichages : 480
Taille : 7,2 Ko
    mais le résultat semble toujours ne pas recevoir "varsociete_JS":
    Nom : Capture d’écran de 2019-02-20 10-17-46.png
Affichages : 473
Taille : 3,7 Ko

    C'est donc ce "$( "#client_societe" ).on( 'keyup', function()" qui ne semble pas comprendre que l'AJAX se déclenche... je me trompe?
    Peut-on l'écrire autrement?

    Merci d'avance pour aide précieuse

  8. #8
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        $requete = ".... UPPER(client_id) = :client_id";
    ...
        $stmt->bindValue('client_id',trim(strtoupper($_GET['q'])),PDO::PARAM_STR);
    ...
    $_SESSION['varsociete'] = $donnees['client_societe']; 
    echo $_SESSION['varsociete']; ?>
    ...
                    $( "#client_societe" ).on( 'keyup', function(){
    ...
                        var varsociete_JS = $( "#client_societe" ).val();
    ...
    client_id, q, client_societe, varsociete_JS, varsociete...

    ON N'Y COMPREND PLUS RIEN !!

    Fais le ménage dans ton code.

  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
    Je te remets tout en intégralité, et proprement:
    AJAX (accueil.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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    <?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;
     
                    "use strict";
     
                    $( "#client_societe" ).on( 'keyup', function(){
                        var varsociete_JS = $( "#client_societe" ).val();
                        new_varsociete( varsociete_JS );
                    });
                    console.log(varsociete_JS);
     
                    function new_varsociete( varsociete_JS )
                    {
                    $.ajax({
                        method: "POST",
                        url: "menu/condition.php",
                        data: { varsociete_Transmis : varsociete_JS }
                    })
                    .done(function( retour_html ) {
                        var varsociete_JS = retour_html;  
                    })
                    .fail(function() {
                        alert( "error" );
                    });
                    }
     
                }
            };
            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>
    page visée par l'AJAX (là où il y a l'input donc je récupère la valeur):
    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
     
    <?php include '../Include/connection.php' ;
     
        $requete = "SELECT * FROM client WHERE UPPER(client_id) = :client_id";
        $stmt = $bdd->prepare($requete);
        $stmt->bindValue('client_id',trim(strtoupper($_GET['q'])),PDO::PARAM_STR);
        $stmt->execute();
     
        while( $donnees = $stmt->fetch() ) { ?>
     
    <div class="container" style="text-align:center;">
     
    <form enctype="multipart/form-data" method="post" action="../PHP/Traitement/update_client.php" >
    <div class="row">
          <table class="table table-bordered table-striped table-condensed">
            <thead> <!-- En-tête du tableau -->
                <tr>
                    <th>Préfixe</th>
                    <th>Nom du client</th>
                </tr>
            </thead>
            <tbody> <!-- Corps du tableau -->
                <tr>
                    <td><input class="form-control client_prefixe" type="text" id="client_prefixe" value="<?php echo $donnees['client_prefixe'] ?>" /></td>
                    //c'est l'input ci-dessous ausquel on va récupérer la valeur
                    <td><input class="form-control client_societe" type="text" id="client_societe" value="<?php echo $donnees['client_societe'] ?>" /></td>
                </tr>
            </tbody>
          </table>    
            <?php } $stmt->closeCursor(); ?>
          </div>
    la page où je veux récupérer la variable, et l'utiliser (condition.php):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php include '../../Include/connection.php' ; 
     
    if( empty($_SESSION['varsociete_JS']) ){ $_SESSION['varsociete_JS'] = 0; }
    if( !empty($_POST['varsociete_JS']) ){ $_SESSION['varsociete_JS'] = $_POST['varsociete_JS']; }
    echo $_SESSION['varsociete_JS']; // "donnée de retour"
    ?>
    Mon message précédent expliquait un soucis avec ce code là, probablement un soucis au niveau du "$( "#client_societe" ).on( 'keyup', function(){" dans l'AJAX je pense.

    Merci d'avance

  10. #10
    Invité
    Invité(e)
    Par défaut
    1- A ta place, je reprendrais TOUT le code JS depuis zéro.

    Car tu mélanges les syntaxes "jQuery" et "JavaScript pur".
    C'est un méli-mélo informe.

    • LIS aussi des tutos sur "syntaxe Ajax en jQuery".
    • FAIS des exercices SIMPLES, pour bien comprendre.


    2- LIS aussi des tutos sur "les variables de SESSION PHP".
    Car tu oublies qu'il faut utiliser session_start().

  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
    "tu oublies qu'il faut utiliser session_start(). " => non, c'est volontaire, si je le mets j'ai une erreur. Car j'ai déjà un session_start(); dans mon fichier de connexion (pour mon utilisateur connecté), donc je ne peux pas refaire un session_start encore une fois (et pas besoin du coup, car déjà ouvert).

    "tu mélanges les syntaxes "jQuery" et "JavaScript pur" => Peux-tu me dire à quel niveau? Le seul JS/Jquery que j'utilise est le tiens, et je comprends bien comment il fonctionne.
    Mais j'ai l'impression qu'il ne parvient pas à récupérer la variable de mon input à ce niveau.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     $( "#client_societe" ).on( 'keyup', function(){
                        var varsociete_JS = $( "#client_societe" ).val();
                        new_varsociete( varsociete_JS );
                    });
    Une idée du pourquoi ? merci

  12. #12
    Invité
    Invité(e)
    Par défaut
    1-
    ...Car j'ai déjà un session_start(); dans mon fichier de connexion...
    Comment veux-tu que je le devine ??


    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
        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;
     
    ...
    ...
            xmlhttp.open("GET","getuser.php?q="+str,true);
            xmlhttp.send();
        }
    }
    Ça, c'est du JavaScript pur, et ce n'est pas "mon" code.

    Tu mélanges tout.

  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
    Comment veux-tu que je le devine ??
    => J'aurai une erreur sinon

    Oui en effet j'en utilise un peu à ce moment, mais ça, ça fait son job : ça me charge mon formulaire sans aucun soucis.

  14. #14
    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
    AAAAH c'est dingue je suis certain que l'on est à 2 doigts d'y arriver!
    Mon console log me ressort bien ma variable!
    si je vise un autre fichier j'ai "error' donc le chemin est le bon!
    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
     
                    // on récupère la valeur :
                    var varsociete_JS = $( "#client_societe" ).val();
                    // on traite
                    new_varsociete( varsociete_JS );
     
                    console.log(varsociete_JS);
                    // Nouvelle societe
                    function new_varsociete( varsociete_JS )
                    {
                    // 1- on enregistre le nouveau numéro "varsociete" dans une SESSION PHP, via Ajax
                    // appel Ajax (syntaxe jQuery)
                    $.ajax({
                        method: "POST",
                        url: "menu/condition.php",
                        data: { varsociete_Transmis : varsociete_JS }
                    })
                    .done(function( retour_html ) {
                        var varsociete_JS = retour_html;
                    })
                    .fail(function() {
                        alert( "error" );
                    });
                    }
    Je suis sur les cours d'AJAX/Jquery sur la partie qui m’intéresse, je suis curieux de savoir d'où vient mon erreur.


    Merci d'avance

  15. #15
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    pas tout lu juste ton dernier post et ce bout de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    .fail(function() {
        alert( "error" );
    });
    cela ne présente pas grand intérêt, il te faut avoir plus d'information si une erreur c'est produite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    .fail(function() {
        console.log( "error  : ", arguments ); // pour analyse
    });

  16. #16
    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 je prends note, je modifie cela.

    Seulement mon code ne passe pas par l'error :S Vois-tu une faille dans mon post précédent? merci

  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
    Le réseau semble dire que tout se passe normalement pourtant :

    Nom : Capture d’écran de 2019-02-21 09-48-22.png
Affichages : 474
Taille : 34,3 Ko

    Pour moi c'est très clair : mon système de fonctionne pas à cause de la récupération :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if( empty($_SESSION['varsociete_JS']) ){ $_SESSION['varsociete_JS'] = 0; }
    if( !empty($_POST['varsociete_JS']) ){ $_SESSION['varsociete_JS'] = $_POST['varsociete_JS']; }
    echo $_SESSION['varsociete_JS']; // "donnée de retour"
    Peut-être que j'envoie une variable dynamique à chaque fois, mais je l'envoie à du PHP, alors ça ne va pas.
    Vous êtes d'accord? Comment faire autrement? comment l'actualiser? Car j'ai besoin de récupérer une variable dans une requête SQL ensuite, qui devra s'actualiser.
    Et j'aurai le même soucis, car le SQL se fait côté serveur.

    merci d'avance

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

    1- Tu n'as pas compris le principe de fonctionnement d'Ajax.

    2- Je t'avais écrit varsociete_JS et varsociete_PHP pour que tu puisses différencier variable JS et variable PHP.

    Mais quand je te vois écrire $_SESSION['varsociete_JS'], je me dis que tu n'as pas compris.

    3- Ton code est un patchwork de bouts de codes disparates, avec des noms de variables incohérents.

    4- si tu n'es pas capable de montrer les codes COMPLETS, je laisse tomber.
    Dernière modification par Invité ; 21/02/2019 à 12h32.

  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
    1. J'ai très bien compris comment il fonctionne, sinon dis moi ce qui t'as fais penser le contraire dans mes messages précédent.
    2. "varsociete_PHP" => Ctrl + F, 2 occurrences en commentaire. Pas de code. Tu t'es mélangé entre ma proposition de variable session PHP, et ta solution Jquery.
    Comme je l'ai dis plus haut, j'ai laissé tombé mon idée pour tenter ton Jquery, et tu as raison je me bloque avec les sessions PHP : simple à récup, très compliqué à renvoyer.

    3 et 4. Tu m'as déjà fais ce reproche et je t'ai remis l'intégralité proprement 2/3 posts plus haut, => voir ma réponse d'Hier, à 14h25. Tu auras tout.

    Le soucis vient de la récup (condition.php), et tu viens de m'en apporter la confirmation, donc j'ai bien procédé.
    Comment récupérer le varsociete_JS envoyé alors?
    Sans oublier le but final: Pour un tour d'AJAX, on a une nouvelle variable varsociete_JS, puis l'objectif est d'actualiser une requête SQL avec cette fameuse variable dedans (dans le WHERE)

    Merci d'avance

  20. #20
    Invité
    Invité(e)
    Par défaut
    (Oups... je n'avais pas vu le message #9...)

    J'ai fait un GRAND nettoyage :

    accueil.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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    <?php require_once('construire.php') ;  ?>
     
    <div class="container">
     
    <script>
    "use strict";
    function ficheclient( client_id )
    {
        if (client_id == "") {
            $("#txtHint").html("");
        } else {
    		$.ajax({
    			method: "POST",
    			url: "getuser.php",
    			data: { client_id : client_id }
    		})
    		.done(function( retour_html ) {
    			$("#txtHint").html( retour_html );
    		})
    		.fail(function() {
    			alert( "error ficheclient" );
    		});
        }
    }
     
    $("#txtHint").on( 'keyup', '.client_societe', function(){
    	var varsociete = $("#client_societe").val();
    	new_varsociete( varsociete );
    });
     
    function new_varsociete( varsociete )
    {
    	$.ajax({
    		method: "POST",
    		url: "menu/condition.php",
    		data: { varsociete : varsociete }
    	})
    	.done(function( retour_html ) {
    		var varsociete = retour_html;
    		console.log(varsociete); // TEST
     
    		// ICI, on peut mettre d'AUTRES FONCTIONS (de mise à jour,...)
     
    	})
    	.fail(function() {
    		alert( "error new_varsociete" );
    	});
    }
    </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>
    getuser.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
    <?php include '../Include/connection.php';
    if( isset($_POST['client_id']) )
    {
    ?>
    <div class="container" style="text-align:center;">
    	<div class="row">
          <table class="table table-bordered table-striped table-condensed">
            <thead> <!-- En-tête du tableau -->
                <tr>
                    <th>Préfixe</th>
                    <th>Nom du client</th>
                </tr>
            </thead>
            <tbody> <!-- Corps du tableau -->
    <?php
        $requete = "SELECT * FROM client WHERE UPPER(client_id) = :client_id";
        $stmt = $bdd->prepare($requete);
        $stmt->bindValue('client_id',strtoupper(trim($_POST['client_id'])),PDO::PARAM_STR);
        $stmt->execute();
        while( $donnees = $stmt->fetch() ) 
            { 
    ?>
                <tr>
                    <td><?php echo $donnees['client_prefixe'] ?></td>
                    <td><button type="button" class="form-control client_societe" data-varsociete="<?php echo $donnees['client_societe'] ?>" /><?php echo $donnees['client_societe'] ?></button></td>
                </tr>
    <?php 
            } // fin while
            $stmt->closeCursor(); 
    ?>
            </tbody>
          </table>
    	</div>
    </div>
    <?php 
    } // fin if

    menu/condition.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php include '../../Include/connection.php' ; 
     
    if( empty($_SESSION['varsociete']) ){ 
    	$_SESSION['varsociete'] = 0; 
    }
    if( !empty($_POST['varsociete']) ){ 
    	$_SESSION['varsociete'] = $_POST['varsociete']; 
    }
    echo $_SESSION['varsociete']; // "donnée de retour"

Discussions similaires

  1. L'avenir du BDE et des SQL Links révélé ! <officiel>
    Par Merlin dans le forum Bases de données
    Réponses: 12
    Dernier message: 02/06/2006, 10h18
  2. Pb migration Access / SQL server
    Par yoyo dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 25/04/2005, 10h39
  3. Backup BD SQL Server
    Par Ethmane dans le forum Administration
    Réponses: 3
    Dernier message: 07/06/2002, 00h42
  4. Cours, tutoriels, logiciels, F.A.Q,... pour le langage SQL
    Par Marc Lussac dans le forum Langage SQL
    Réponses: 0
    Dernier message: 04/04/2002, 10h21

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