以下に、何が起こるべきかのシナリオがあります。
- ユーザーは
create_session.php
ページにいるため、配列内の他のページはロックアウトされています - ユーザーが別のページにアクセスしようとすると、上記の div ボックスが表示されます。
- ユーザーが [続行] リンクを選択した場合、ユーザーは本来あるべきページに移動する必要があり
create.php
ます。
問題は、ユーザーが別のページにアクセスして div ボックスが表示された場合、ユーザーがリンクをクリックしても、そのページ、つまりユーザーが最後にいたページにContinue
戻らないことです。create_session.php
Continue
リンクをクリックしても URL が変わらないようです
をクリックした後、ユーザーが表示されるはずのページに移動しないのはなぜContinue
ですか?
steps.php
どのページがロックアウトされているかを制御し、ユーザーがロックされていないページを維持しようとするスクリプトは、以下に示すこのスクリプトにあります。
<?php
function allowed_in(){
$steps = array('create_session.php', 'QandATable.php', 'individualmarks.php', 'penalty.php', 'penaltymarks', 'complete.php');
// Track $latestStep in either a session variable
// $currentStep will be dependent upon the page you're on
if(isset($_SESSION['latestStep'])){
$latestStep = $_SESSION['latestStep'];
}
else{
$latestStep = "";
}
$currentStep = basename(__FILE__);
$currentIdx = array_search($currentStep, $steps);
$latestIdx = array_search($latestStep, $steps);
if ($currentIdx - $latestIdx > 1 ) {
return true;
} else {
return false;
}
}
?>
これで、配列に格納された各スクリプトにはコードinclude('steps.php')
が含まれ、以下のコードが含まれます。
<?php
if (allowed_in()){
//create_session.php code
}else{
?>
<div class="boxed">
<a href="<?php echo $steps[$latestIdx + 1] ?>">Continue</a>
</div>
<?php
}
?>
アップデート:
リンクをクリックするContinue
と、url に以下の 2 つのエラーが表示されました。
注意: 未定義の変数: latestIdx in ... 1636 行目
Notice: 未定義の変数: 1636 行目の ... にステップ インします
この行の通知は以下に表示されます。
<a href="<?php echo $steps[$latestIdx + 1] ?>">Continue</a>
更新 2:
ロックされているページに移動すると (つまり、必要があることを示すボックスがContinue
表示されると、未定義の$_SESSION
変数が表示され、次のエラーも表示されます:Undefined variable: steps in steps.php on line 57
未定義のエラーについては$_SESSION
、$_SESSION 変数を間違った場所に配置しているためですか? また、steps.php でステップの未定義変数を停止するにはどうすればよいですか?
以下は、QandATable.php
コードの順序の例です。
<?php
ini_set('session.gc_maxlifetime',12*60*60);
ini_set('session.gc_divisor', '1');
ini_set('session.gc_probability', '1');
ini_set('session.cookie_lifetime', '0');
require_once 'init.php';
//12 hours sessions
session_start();
include('steps.php'); //exteranlised steps.php
<head>
if (isset($_POST['id'])) {
$_SESSION['id'] = $_POST['id'];
}
if(isset($_POST['sessionNum'])){
//Declare my counter for the first time
$_SESSION['initial_count'] = $_POST['sessionNum'];
$_SESSION['sessionNum'] = intval($_POST['sessionNum']);
$_SESSION['sessionCount'] = 1;
}
elseif (isset($_POST['submitDetails']) && $_SESSION['sessionCount'] < $_SESSION['sessionNum']) {
$_SESSION['sessionCount']++;
}
</head>
<body>
<?php
//once session is expired, it should log the user out, but at mo this isn't happening
if ((isset($username)) && (isset($userid))){ //checks if user is logged in
if (allowed_in()=== "Allowed"){
//QandATable.php code:
}else{
$page = allowed_in()+1;
?>
<div class="boxed">
<a href="<?php echo $steps[$page] ?>">Continue with Current Assessment</a>
<?php
}
}else{
echo "Please Login to Access this Page | <a href='./teacherlogin.php'>Login</a>";
//show above echo if user is not logged in
}
?>
以下は完全な steps.php です。
<?php
$steps = array(1 =>'create_session.php',2 => 'QandATable.php',3 => 'individualmarks.php',4 => 'penalty.php',5 => 'penaltymarks',6 => 'complete.php');
function allowed_in($steps){
// Track $latestStep in either a session variable
// $currentStep will be dependent upon the page you're on
if(isset($_SESSION['latestStep'])){
$latestStep = $_SESSION['latestStep'];
}
else{
$latestStep = 0;
}
$currentStep = basename(__FILE__);
$currentIdx = array_search($currentStep, $steps);
$latestIdx = array_search($latestStep, $steps);
if ($currentIdx - $latestIdx == 1 )
{
$currentIdx = $_SESSION['latestStep'];
return 'Allowed';
}
return $latestIdx;
}
?>