1

以下に、何が起こるべきかのシナリオがあります。

  • ユーザーは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;
}

?>
4

1 に答える 1

1

これ:

if ($currentIdx - $latestIdx > 1 ) {

   return 1;

} else {

    return 0;

}

私はこれであるべきだと思います:

if ($currentIdx - $latestIdx >= 1 )
 {
    return true;
 } 
return false;

これが次のものから来ているかどうかはわかりません:

$pages[$currentPages+1]

ステップ配列は、関数の外でも宣言する必要があります。URL で使用する予定がある場合は、$latestIdx を返す必要があります。前に戻ろうとしているのか、前に戻ろうとしているのかわかりません。

あなたが何を望んでいるかを正確に理解しているかどうかはまだわかりませんが、これは出発点になるはずです:

 $steps = array(1 =>'create_session.php',2 => 'QandATable.php',3 => 'individualmarks.php',4 => 'penalty.php',5 => 'penaltymarks',6 => 'complete.php');
function allowed_in($steps)
    {
        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;
}

とページ

    if (allowed_in()=== "Allowed")
    {
        //create_session.php code
    }
    else
        {
$page = allowed_in()+1;
?>

<div class="boxed">
<a href="<?php echo $steps[$page] ?>">Continue</a>
</div>

<?php   

}

?>
于 2013-01-05T03:29:56.220 に答える