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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2018
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Janvier 2018
    Messages : 300
    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 : 647
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 éclairé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2018
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Janvier 2018
    Messages : 300
    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 éclairé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2018
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Janvier 2018
    Messages : 300
    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 : 575
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
    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.

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