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

Langage PHP Discussion :

mon compteur de visites ne s'incrémente pas


Sujet :

Langage PHP

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut mon compteur de visites ne s'incrémente pas
    Bonsoir,

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php 
    session_start();
    include __DIR__.'/config/config.php';
    include_once("connect_mysql.php");
     
    $sid=session_id();
    if ($_SESSION['id']!=$sid) {
            $_SESSION['id']=$sid;
            $sql="UPDATE visites SET compteur = compteur +1;";  //afin de n'incrémenter le compteur qu'une seule fois par session
            $bdd->query($sql);
    }
     
    $sql = 'SELECT compteur FROM `visites`';
    $req=$bdd->query($sql);
    $cpt = $req->fetch();
     echo "<table bordercolor=red border=1><tr><td>visiteurs=".$cpt[0]."</td></tr></table><br>";
     ?>
     <a href="close_session.php">Fermer session</a>
    Ci-dessus mon code pour un compteur de visites. La lecture en bdd fonctionne bien par contre, la valeur n'est pas incrémentée ni en rafraichissant la page ni en remettant à NULL le tableau $_SESSION. Comment se fait-ce ?

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    J'ai réussi à faire marcher le compteur mais je ne comprends pas pourquoi ça marchait pas avant, donc je mets pas encore en

    Hier soir, j'avais pas montré le contenu de close_session.php. Je viens d'y mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    session_start();
    $_SESSION['id']=NULL;
    alors qu'avant c'était
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    session_start();
    $_SESSION=NULL;
    La session est bien annulée avec le 1er code (le compteur s'incrémente), mais pas avec le 2e. Pourquoi ?

  3. #3
    Membre éclairé
    Femme Profil pro
    Autre
    Inscrit en
    Janvier 2017
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2017
    Messages : 335
    Points : 715
    Points
    715
    Par défaut
    Bonsoir,
    C'est une constatation intéressante.
    J'ai testé un peu rapidement, mais il m'a semblé observer ceci :
    Plus généralement, si $_SESSION n'est pas un tableau au moment de l'écriture, php reste sur les données initiales de la session :
    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
    <?php
    session_start();
    var_dump($_SESSION); //première exécution : [], exécutions suivantes : ['a'=>0]
     
    if(empty($_SESSION)===true)
    	{
    	$_SESSION=['a'=>0];
    	}
    else if(isset($_SESSION['a'])===true)
    	{
    	var_dump('ici'); //'ici' affiché à partir de la deuxième exécution
    	$_SESSION['a']=1; //ne sera pas pris en compte
    	$_SESSION=123;
    //	$_SESSION=['a'=>2]; //sera pris en compte si on active cette ligne, on aura alors ['a'=>2] affiché à partir de la troisième exécution
    	}

    En revanche, si on fait unset($_SESSION);, les nouvelles données de session définies avant cette instruction seront bien conservées (les données définies après seront prises en compte si on travaille avec une référence sur la variable précédente) :
    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
    <?php
    session_start();
    var_dump($_SESSION); //première exécution : [], deuxième exécution : ['a'=>0], exécutions suivantes : ['a'=>1]
     
    if(empty($_SESSION)===true)
    	{
    	$_SESSION=['a'=>0];
    	}
    else if(isset($_SESSION['a'])===true)
    	{
    	var_dump('ici'); //'ici' affiché à partir de la deuxième exécution
    	$_SESSION['a']=1; //sera pris en compte
    //	$ref=&$_SESSION;
    	unset($_SESSION);
    	$_SESSION=['a'=>2]; //sera ignoré
    //	$ref['a']=3; //sera pris en compte si on active cette ligne et celle qui correspond plus haut
    	}
    Tout se passe comme si, lors de la phase d'écriture, php utilisait une autre référence vers la même variable de départ que $_SESSION (le unset impliquant la perte de référence pour $_SESSION uniquement, EDIT 8h46 : mal dit car en fait unset détruit carrément la variable, mais si on la redéclare ensuite, on ne se réfèrera plus au tableau de session que php utilisera à l'écriture).
    Si $_SESSION est mis à null (sans avoir fait de unset auparavant), on perd la référence au tableau mis à jour et, dans ce cas, php choisit de rester sur les valeurs initiales plutôt que de considérer qu'on souhaite effacer les données (EDIT 8h46 : de même si on met false, true ou une valeur qui n'est pas un tableau : comme null, ce sont des valeurs qui n'ont pas trop de sens).
    A bien re-tester pour confirmer.

    Sinon, pour réinitialiser le tableau, on peut faire $_SESSION=[];.

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

Discussions similaires

  1. Mon compteur n'incrémente pas
    Par louay02 dans le forum Débuter
    Réponses: 3
    Dernier message: 29/05/2011, 19h36
  2. [AC-2010] Mon compteur ne se rafraichis pas quand j'ajoute un enregistrment
    Par Martintin dans le forum VBA Access
    Réponses: 1
    Dernier message: 07/03/2011, 21h02
  3. Mon NumeroAuto ne s'incrémente pas
    Par omegabahamut dans le forum Access
    Réponses: 11
    Dernier message: 15/02/2008, 12h03
  4. Réponses: 12
    Dernier message: 29/06/2007, 11h08
  5. [MySQL] Erreur quelque part dans mon compteur de visites !
    Par MathMan dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/06/2007, 04h59

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