3 votes

Session PHP pour compter les visites et rediriger si (session['visits']=1)

J'essaie de créer une page sur laquelle, si l'utilisateur vient la première fois, elle redirige vers la page d'index mais si l'utilisateur vient la deuxième fois, la page ne redirige pas. J'utilise une simple session php pour compter les visites et une instruction if pour vérifier la condition :

<?php
session_start(); 
$_SESSION['views'] = $SESSION['views']+1;
if($SESSION['views'] = 1){
header("location:index.php");
}
?>

Le problème est d'initialiser le tableau avec zéro c'est-à-dire

<?php    
$_SESSION['views']=0;
?>

Ce n'est ni aussi simple qu'il y paraît ni aussi difficile.

9voto

johngirvin Points 611

Utilice isset() pour vérifier si la clé a été créée :

<?php
session_start();

if (!isset($_SESSION['views'])) { 
    $_SESSION['views'] = 0;
}

$_SESSION['views'] = $_SESSION['views']+1;

if ($_SESSION['views'] == 1) {
    header("location:index.php");
}
?>

Faites aussi attention : vous aviez if ($SESSION['views'] = 1) qui met la clé à 1 et non la compare, et le nom superglobal correct est $_SESSION pas $SESSION .

1voto

ryanc1256 Points 380

Tout d'abord (là où @nivrig et @Yan ne fixent pas)

if($_SESSION['views'] = 1){
header("location:index.php");
}

devrait être

if ($_SESSION['views'] == 1){ 
header("location:index.php");
}

et aller avec @nivrig son exemple est juste

0voto

Horen Points 3796

D'accord avec nivrig. Vérifiez si la session a été définie.

Vous avez cependant quelques erreurs de syntaxe dans votre code :

Assurez-vous d'écrire $_SESSION et non $SESSION et lorsque vous utilisez un if case, vous devez utiliser == pour comparer. Un simple = assignera une valeur à une variable.

0voto

RobB Points 5722

Puisque vous ne voulez pas vous soucier d'initialiser la variable en premier, utilisez isset() qui vérifiera si la variable est définie et n'est pas NULL :

<?php

session_start(); 

if(isset($_SESSION['views'])){
    $_SESSION['views']++;
}else{
    $_SESSION['views'] = 0;
    header("location: index.php");
    exit();
}
?>

Si vous ne vous souciez pas du nombre de fois que l'utilisateur a visité la page, vous pouvez simplement utiliser :

<?php

session_start(); 

if(!isset($_SESSION['views'])){
    $_SESSION['views'] = 0;
    header("location: index.php");
    exit();
}
?>

La deuxième solution ne se préoccupe pas d'augmenter le nombre de views et vérifie simplement si la valeur a déjà été définie ou non. Si ce n'est pas le cas, vous pouvez affirmer qu'il s'agit de la première visite de l'utilisateur sur la page et vous pouvez alors définir la variable et rediriger l'utilisateur. En définissant la variable, vous vous assurez que l'utilisateur n'entre pas dans une boucle alors qu'il a déjà consulté la page. Cette approche devrait mieux simplifier les choses comme demandé initialement.

Assurez-vous aussi que vous mettez exit() après avoir redirigé l'utilisateur. Cela permet de s'assurer que le code ci-dessous ne sera pas exécuté lors de la redirection de l'utilisateur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X