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 :

se déconnecter n'est pas possible..


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut se déconnecter n'est pas possible..
    Bonjour,

    j'ai créé un forum avec évidemment une connexion. Dans la page principale, je teste la connexion pour n'afficher des actions (style modifier ou supprimer) que si on est connecté (et l'auteur du post). J'ai aussi un bouton "se déconnecter". Pour mémoriser la connexion, je préfère utiliser une bdd MySQL que un cookie, pour le cas où l'utilisateur les a désactivés. Donc j'ai une table "login" avec notamment les champs "login" et "connecte", et sur le bouton "se déconnecter", on remet à 0 le champ "connecte" :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $sql="select connecte from `login`";
     
    $result=$id_conn->prepare($sql);
    $result->execute();
    while ($res=$result->fetch())
     {
        $sql="update `login` set `connecte`=0";
        $result1=$id_conn->prepare($sql);
        $result1->execute();
    }
    echo "Vous êtes déconnecté";
    (je suis conscient que ce code n'est pas optimisé, mais il fonctionne (j'espère)).

    Et sur la page principale, je teste cette information :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     $login=((isset($_COOKIE["login"]))?$_COOKIE["login"]:$_SESSION['login']);
     
     $sql="select connecte from `login` where login='".$login."'";
     
    if ($login=="") $count=0;
    else {
            $result = $id_conn->prepare($sql);
            $result->execute();
            $count = $result->rowCount();
    }
    $connecte=($count==0)? 0:1;
    echo "connecte=".$connecte." count=".$count." login=".$login."<br/>";

    et il se trouve que même après une déconnexion ("Vous êtes déconnecté" est bien affiché), dans la page principale, on est encore vu comme connecté ; comment débuguer cela ?

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Je ne comprends pas bien ta démarche : tu dis que tu ne veux pas utiliser de cookies et tu en mets un bien gros

    Regarde par ici pour gérer les sessions en bdd :
    http://a-pellegrini.developpez.com/t...hp/session-db/
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Petite précision : ça doit marcher, même si les cookies sont désactivés, mais si ce n'est pas le cas, rien ne m'empêche de les tester...Sinon, merci de m'avoir répondu et je regarde ton lien.

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Ensuite, il est plus que probable qu'après avoir mis ta base à jour, tu n'effaces pas les valeurs du cookie ou de la variable de session, ce qui signifie probablement qu'à la page suivante, la connexion est réinitialisée !
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Oui, mais non : j'efface bien la variable de session : $_SESSION['connecte']=0; et de toute façon, je ne la teste même pas ; par ailleurs, je viens de voir que je ne remets pas à 0 le cookie mais sur mon PC, ils sont désactivés (et je le teste pas), car tout ce que je teste, c'est le contenu de MySQL...Bon, je regarde le lien...

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ta requête ne tient pas compte de la colonne connecte ; il faut aussi revoir la préparation des requêtes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sql="select count(*) from `login` where login= :login";
    $sth = $id_conn->prepare($sql);
    $sth->execute(array(':login'=>$login);
    $row = $sth->fetch(PDO::FETCH_NUM);
    $connecte = $row[0];
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Merci de m'apporter une réponse car je ne pense pas être très loin de la solution et de plus, le lien que tu m'as passé est un peu compliqué pour moi.
    Par contre, ça me dit encore que je suis connecté même si je vois avec phpMAdmin que ce n'est plus le cas.

    Comme la connexion à MySQL spécifie le mode objet :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // le constructeur de MyPdo appelle le constructeur de PDO en lui passant ses paramètres	
    function __construct() {
    	$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    	$pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;//important sur les configs récentes
    	$pdo_options[PDO::ATTR_DEFAULT_FETCH_MODE] = PDO::FETCH_OBJ;//pour le mode objet
    	$pdo_options[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES utf8";//pour l'utf-8
    	parent::__construct('mysql:host=' . MyPdo::$HOST . ';dbname=' . MyPdo::$DB_NAME, MyPdo::$USER, MyPdo::$PASS,$pdo_options);
    }
    pour être sûr que ça ne perturbe pas ton code, j'ai voulu le passer en objet :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $sql="select count(*) from `login` where login= :login";
    $sth = $id_conn->prepare($sql);
    $sth->execute(array(':login'=>$login));
    $data = $sth->fetch(PDO::FETCH_OBJ);
    $connecte = $data->connecte;
    echo "connecte=".$connecte."  login=".$login."<br/>";
    mais ça dit quand même que je suis connecté alors que c'est faux...

Discussions similaires

  1. Pourquoi il n'est pas possible d'hériter un constructeur ?
    Par VonDriguen dans le forum Général Java
    Réponses: 7
    Dernier message: 23/09/2010, 20h12
  2. Réponses: 9
    Dernier message: 04/02/2010, 18h45
  3. Réponses: 11
    Dernier message: 08/04/2009, 13h29
  4. Document imprimé - plus général que cela c'est pas possible
    Par pjmorce dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 10/01/2009, 23h29
  5. Sélection de texte à l'intérieur d'une cellule. C'est [PAS] possible.
    Par Blackfox dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 20/08/2007, 14h01

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