未定义的变量和未定义的索引

时间:2013-01-04 13:04:59

标签: php

steps.php

<?php        
    function allowed_in($steps){        
    $steps = array('Text1.php', 'Text2.php', 'Text3.php');                
    $latestStep = $_SESSION['latestStep'];            
    }        
?>

Text1.php:

<?php
   if(allowed_in($steps)){      
      //all code in the create_session.php             
   }
?>

我正在尝试将一个php变量存储到一个可更改的会话并访问另一个页面中的一个函数但是我收到以下错误:

  

注意:未定义的变量:第28行的步骤....   注意:未定义的索引:第49行的......中的latestStep

我只需要问一下如何修复这些错误。 if(isset())变量需要$_SESSION吗?

更新

以下是完整代码:

    <?php

    function allowed_in($steps){

    $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 1;

    } else {

        return 0;

    }

    }

    ?>

    create_session.php:
    if(allowed_in($steps)){

    //all code in the create_session.php

    }else{
    ?>

    <div class="boxed">
      <a href="<?= $pages[$currentPages+1] ?>">Continue</a>
    <br/>
    <a href="create_session.php" id="createLink">Create New</a>
    </div>

    <?php   

    }

    ?>

我想要遵循的伪代码:

function allowed_in($pased_vars){

//your code

if($foo){
    return 1;
}else{
    return 0;
}

}

on included pages
<?php
//include file with code

if(allowed_in($vars)){
//allowed
}else{
//not
}

3 个答案:

答案 0 :(得分:2)

您有一个未定义的变量用作$steps,一个未定义的数组索引用作$_SESSION['latestStep']

还有:

function allowed_in($steps) {
    $steps = array('Text1.php', 'Text2.php', 'Text3.php');

没有任何意义。 您希望将变量$steps作为参数传递给函数,并立即在函数范围内替换它的值?为什么要这么做?只是不要指望该函数有任何参数,并在其中定义$steps

要修复索引问题,可以使用isset()并处理未设置会话变量的情况:

if (!isset($_SESSION['latestStep'])) { /* what if not set? */ }

并且在尝试访问session_start()变量之前,请务必使用$_SESSION

对于未定义的变量错误:

<?php
   if(allowed_in($steps)){      
      //all code in the create_session.php             
   }
?>

表示未定义$steps。在将$steps = ...作为参数传递给allowed_in函数之前,我没有看到您定义allowed_in的任何地方。这就是问题所在。

我建议您只需将function allowed_in()定义为if (allowed_in()) { ... } ,并将上述代码称为:

{{1}}

答案 1 :(得分:0)

你想做什么?检查这些: -

1)首先,你没有向页面返回任何内容。那你怎么检查是否有条件?

2)您是否已将该页面包含在另一页中?

3)检查你在哪里定义了会话变量$ _SESSION ['latestStep']

4)检查是否启动了会话session_start()。

5)你在steps.php中定义了$ steps数组。那么你从text1.php ..传递给函数allowed_in是什么。

答案 2 :(得分:0)

使用isset

你可以这样做:

if(isset($_SESSION['latestStep'])){
   $latestStep = $_SESSION['latestStep'];
}
else{
   $latestStep = "";
}

http://php.net/manual/en/function.isset.php