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

PHP & Base de données Discussion :

Update lors d'une déconnexion. [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Par défaut Update lors d'une déconnexion.
    Bonjour,

    Lors de chaque changement de page, une fonction de sauvegarde est appelée sur mon site afin de mettre à jour les données de celle-ci dans une base de données. Cette fonction prends en paramètre une donnée issue de $_SESSION, 'id_simu'. L'ensemble des données est enregistré au format JSON dans un champ donnee.
    J'ai un problème, lorsque je me déconnecte du site, ma fonction me renvoi un message d'erreur, je souhaiterai savoir comment gérer la déconnexion.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    function save(id_simu) {
        var donnees = lecture_saisie();
        var donnees_base = $("#donnee").val();
        var type = 1;
        $.ajax({
            type: "POST",
            async: false,
            url: "/monFichier.php",
            data: {
                type:type,
                id_simu:id_simu,
                donnees:donnees,
                donnees_base:donnees_base
            },
            success: function(value){
                if(value!=1) {
                    alert('Une erreur est survenue lors de la sauuvegarde');
                }
            }
        });
    }
    Dans monFichier.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
    if($type == 1) {
        $t = json_decode($donnees_base, true);
        $donnees = json_decode($donnees, true);
        foreach ($donnees as $key => $value) {
            $t[$key] = $value;
        }
     
        $json = json_encode($t);
        $json = CheckDataStringJSON($json);
        $query = "update fdc_simu set donnee=$json where id_simu=$id_simu";
        sql_query($query);
        sql_close($db0);
        echo('1');
    }

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    Est-ce que tu as essayé de voir ce que te renvoyais le serveur au lieu d'afficher le message d'erreur ? Un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    success: function(value) {
       alert(typeof value + ' -- ' + value);
    }
    Et en faisant ça, tu obtiens quoi ?

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Par défaut
    Les alertes sont toutes deux de type string.

    Dans le cas normal :
    string -- 1

    Dans le cas d'une déconnexion :

    tring --
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <script language="javascript" type="text/javascript">
    		window.location.href = '/identification.php';	// barre url
    		</script>

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Donc quand tu l'utilisateur se déconnecte, tu sauvegardes et renvoies tout le script de redirection en paramètre de réponse. C'est pourquoi c'est toujours différent de 1.

    Il faut procéder autrement.
    En paramètres passés à la requête il faut ajouter si l'utilisateur souhaite se déconnecter en retour.
    Au lieu de renvoyer un simple echo('1'); tu peux renvoyer une réponse plus précise.
    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
    function save(id_simu, deconnect) {
        var donnees = lecture_saisie();
        var donnees_base = $("#donnee").val();
        var type = 1;
        $.ajax({
            type: "POST",
            async: false,
            url: "/monFichier.php",
            data: {
                type:type,
                id_simu:id_simu,
                donnees:donnees,
                donnees_base:donnees_base,
                deconnect:deconnect
            },
            success: function(value){
                if(value='redirect') {
                   window.location.href = '/identification.php';
                } else if(value!=1) {
                    alert('Une erreur est survenue lors de la sauuvegarde');
                }
            }
        });
    }

  5. #5
    Membre émérite
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Par défaut
    Bonsoir,

    et en php ? si tu dois juste récupérer des valeurs dans $_SESSION,

    tu peux essayer d'utiliser register_shutdown_function ?

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Par défaut
    Bonjour,
    Merci sur vos réponse, j'ai pu avancer et travailler sur ces pistes.

    Citation Envoyé par syl2095
    et en php ? si tu dois juste récupérer des valeurs dans $_SESSION,
    La plupart des valeurs à récupérer se trouvent dans des buffer qui vont être déchargés, je ne pense pas pouvoir utiliser cette fonction.

    J'aimerai précisé un peu le contexte de l'appel de ma fonction save().
    Voici un exemple d'appel sur la page mapage.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'body' => ' onload="lecture_base(' . $_SESSION['id_simu'] . ', \'mapage\');" onunload="save(' . $_SESSION['id_simu'] . ');" '
    Vous voyez que cette fonction est appelée dans son principe à chaque fois que l'utilisateur quitte la page mapage.php.
    Je ne comprend pas pourquoi lors d'une déconnexion ma fonction renvoie le script de redirection et ne se termine pas "normalement" comme dans tous les autres cas.

  7. #7
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Mets le code de ta page php et surtout la partie renvoyant le script de redirection.

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Par défaut
    Voici tout d'abord la page appelée lors d'une déconnexion :
    Code deconnexion.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
    <?PHP
        // deconnexion
        define("SANS_IDENTIFICATION", 1);
        session_start();
     
        include ("config.php");
     
        unset($_SESSION['profil']);
        unset($_SESSION['IDENTIFICATION']);
     
        // On détruit la session
        session_unset();
        session_destroy();
    ?>
     
    <script language="javascript" type="text/javascript">
        window.location.href = '/';	// barre url
    </script>
     
    <?PHP
        die();
     
    ?>

    Un exemple de page ou mes données sont amenées à être sauvegardées grâce à ma fonction de sauvegarde :
    Code cession.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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <?php
    	include(dirname(__FILE__) . "/../../config.php");
            /*
             * Gestion des droits
             */
    	ya_droit('DROITS');
     
            if (isset($_POST['simu'])) {
                $_SESSION['id_simu'] = $_POST['simu'];
            }
     
                include(ROOT . "/design/header.php");
                include(ROOT . "/globals.inc.php");
            $param = Array(
            'title' => 'TITLE',
            'body' => ' onload="lecture_base(' . $_SESSION['id_simu'] . ', \'cession\');" onunload="save(' . $_SESSION['id_simu'] . ');" '
            );
            draw_header(0, $param);
    ?>
    <noscript><h1>Vous devez activer javascript pour pouvoir utiliser cet outil dans son intégralité</h1></noscript>
    <div style="width: 900px;"></div>
    <script type="text/javascript">
        function acquisition(param){
            [...] Implémentation [...]
        }
    </script>
    <table>
        <tr>
            <td style="vertical-align: top"><?php include(ROOT . "/menu_simu.php"); ?></td>
            <td> <div class="group">
                    <h1>Eléments de cession</h1>
                    <table>
                        <tr>
                            <td>
                                <table class="tabbox" style="margin-bottom: 10px;">
                                    <tr>
                                      <td><input class="saisie" id="sf_total_equipement" type="text" onkeyup="ajax('cession')" /></td>
                                        [ ... ]  input, select ... permettant la saisie ou l'affichage de mes données [ ... ] 
    <?php
    draw_footer();
    ?>

    Je vous remet les codes respectifs de la fonction de sauvegarde et de la page qu'elle appelle.
    Code mesfonctions.js : 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
    function save(id_simu) {
        var donnees = lecture_saisie();
        var donnees_base = $("#donnee").val();
        var type = 1;
        $.ajax({
            type: "POST",
            async: false,
            url: "/fdc/fdc_base.php",
            data: {
                type:type,
                id_simu:id_simu,
                donnees:donnees,
                donnees_base:donnees_base
            success: function(value) {
               if(value!=1){
                    alert('Une erreur est survenue lors de la sauuvegarde');
            }
        });
    }
            },
    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
    include('globals.fun.php');
     
    extract($_POST);
     
    //  Type :      Desc :
    //  1           Sauvegarde effectuée au changement de page
    //
    //              Récupération des données json en BDD pour le bilan et pour la simu
    //  2           données simu
    //  4           données bilan
    //
    //  3           Sauvegarde pour le bilan de chaque bien
    //
    //  5           Récupération des données json en BDD pour le bilan des commerces
     
     
     
    if($type == 1) {
     
        $t = json_decode($donnees_base, true);
        $donnees = json_decode($donnees, true);
        foreach ($donnees as $key => $value) {
            $t[$key] = $value;
        }
     
        $json = json_encode($t);
        $json = CheckDataStringJSON($json);
        $query = "update fdc_simu set donnee=$json where id_simu=$id_simu";
        sql_query($query);
        sql_close($db0);
        echo('1');
    }
    Merci pour votre aide, je vous tiens au courant des avancées de mes tests.

  9. #9
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Bon il va falloir utiliser ce que je t'ai déjà posté, à savoir un paramètre supplémentaire indiquant qu'au retour de la mise à jour, l'utilisateur souhaite se déconnecter.
    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
    function save(id_simu, deconnect) {
        var donnees = lecture_saisie();
        var donnees_base = $("#donnee").val();
        var type = 1;
        $.ajax({
            type: "POST",
            async: false,
            url: "/monFichier.php",
            data: {
                type:type,
                id_simu:id_simu,
                donnees:donnees,
                donnees_base:donnees_base,
                deconnect:deconnect
            },
            success: function(value){
                if(value='redirect') {
                   window.location.href = '/identification.php';
                } else if(value!=1) {
                    alert('Une erreur est survenue lors de la sauuvegarde');
                }
            }
        });
    }
    deconnexion.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
    <?php
        // deconnexion
        define("SANS_IDENTIFICATION", 1);
        session_start();
     
        include ("config.php");
     
        unset($_SESSION['profil']);
        unset($_SESSION['IDENTIFICATION']);
     
        // On détruit la session
        session_unset();
        session_destroy();
        echo 'redirect'; // on renvoie le souhait de redirection
        die();
    ?>
    Et le dernier script :
    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
    <?php
    include('globals.fun.php');
     
    extract($_POST);
     
    //  Type :      Desc :
    //  1           Sauvegarde effectuée au changement de page
    //
    //              Récupération des données json en BDD pour le bilan et pour la simu
    //  2           données simu
    //  4           données bilan
    //
    //  3           Sauvegarde pour le bilan de chaque bien
    //
    //  5           Récupération des données json en BDD pour le bilan des commerces
     
     
    if($type == 1) {
     
        $t = json_decode($donnees_base, true);
        $donnees = json_decode($donnees, true);
        foreach ($donnees as $key => $value) {
            $t[$key] = $value;
        }
     
        $json = json_encode($t);
        $json = CheckDataStringJSON($json);
        $query = "update fdc_simu set donnee=$json where id_simu=$id_simu";
        sql_query($query);
        sql_close($db0);
        echo('1');
    }
     
    // paramètre supplémentaire lors de l'appel AJAX
    if ($deconnect) {
       include 'deconnexion.php';
    }
    ?>

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Par défaut
    La redirection est bien effectuée mais les données ne sont toujours pas sauvegardées lorsque l'on la quitte la page en appuyant sur le lien de déconnexion.

  11. #11
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par geoffrey34 Voir le message
    La redirection est bien effectuée mais les données ne sont toujours pas sauvegardées lorsque l'on la quitte la page en appuyant sur le lien de déconnexion.
    C'est normal, dans ton script deconnexion.php il n'y pas une once de code renvoyant vers la sauvegarde.

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Par défaut
    Citation Envoyé par rawsrc
    C'est normal, dans ton script deconnexion.php il n'y pas une once de code renvoyant vers la sauvegarde.
    Oui il n'y a pas de code de sauvegarde dans ce fichier. Dans mon esprit, la déconnexion me fait quitter la page en cours, entrainant sa sauvegarde grâce au ' Onunload '. Cette même sauvegarde qui me renvoyait le code de redirection et qui ne se termine pas correctement.

  13. #13
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Pour faire simple si à chaque mouvement de l'utilisateur tu sauvegardes les données, appelle la fonction save() sur le click de Déconnecter ou sur onunload() avec en second paramètre save(...,true);

  14. #14
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Par défaut
    Ca me semble bon oui. J'essaye ça au plus vite, je te remercie pour ton attention.

  15. #15
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Par défaut
    Bonjour,

    J'ai réussi à régler le problème de sauvegarde facilement après ta dernière remarque.

    Je te remercie rawsrc. A plus !

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/03/2011, 17h01
  2. Erreur lors d'une requete update
    Par Rémiz dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/04/2009, 15h14
  3. erreur lors d'une requete update
    Par kimcharlene dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 03/01/2009, 19h29
  4. [ASE 12.5] Pb lors d'une déconnexion réseau
    Par jokos2000 dans le forum Adaptive Server Enterprise
    Réponses: 4
    Dernier message: 17/09/2007, 09h47
  5. [MySQL] Les champs sont vides lors d'une mise à jour (update)
    Par gregos13 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 26/04/2006, 08h01

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