3

ユーザーが最初にアクセスするとインデックスページにリダイレクトされるページを作成しようとしていますが、ユーザーが2回目にアクセスするとページはリダイレクトされません。訪問をカウントするための単純なphpセッションと、条件をチェックするためのifステートメントを使用しています。

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

問題は、配列をゼロで初期化することです。

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

それは見た目と同じくらい単純で、それほど難しいものでもありません。

4

4 に答える 4

9

isset()キーが作成されているかどうかを確認するために使用します。

<?php
session_start();

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

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

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

また、注意してください。if ($SESSION['views'] = 1)キーを1に設定して比較せず、正しいスーパーグローバル名はではあり$_SESSIONません$SESSION

于 2012-07-14T07:16:08.047 に答える
1

まず第一に(@nivrigと@Yanが修正しない場合)

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

する必要があります

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

@nivrigと一緒に行く彼の例は正しい

于 2012-07-14T07:20:23.680 に答える
0

nivrigに同意します。セッションが設定されているかどうかを確認します。

ただし、コードにいくつかの構文エラーがあります。

$SESSIONではなく$_SESSIONと記述していることを確認してください。また、ifケースを使用する場合は、==を使用して比較する必要があります。単一の=は、変数に値を割り当てます。

于 2012-07-14T07:19:26.343 に答える
0

最初に変数を初期化することを心配したくないので、変数が設定されていてNULLでないかどうかをチェックするisset()を利用します。

<?php

session_start(); 

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

ユーザーがページにアクセスした回数を気にしない場合は、次のように使用できます。

<?php

session_start(); 

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

2番目の解決策は、数を増やすことを気にせずviews、値がまだ設定されているかどうかをチェックするだけです。設定されていない場合は、ユーザーが初めてページにアクセスしたことを表明してから、変数を設定してユーザーをリダイレクトします。変数を設定することにより、ユーザーがすでにページを表示した後にループに入らないようにすることができます。このアプローチは、最初に要求されたように物事をより単純化するはずです。

exit()また、ユーザーをリダイレクトした後に必ず入れてください。これにより、ユーザーをリダイレクトするときに以下のコードが実行されないようになります。

于 2012-07-14T07:21:04.523 に答える