如何修复这个未定义的变量

时间:2012-03-28 11:11:31

标签: php

在上一页上,用户在文本框中输入一个数字,当提交该表单时,该号码将作为$_SESSION['sessionNum']发布在此页面上。现在我想将这个数字存储在顶部,$sessionMinus显示相同的数字,不同之处在于每次将此表单提交给自己时,每次提交表单时数字都会减1。问题是它给了我一个未定义的变量$sessionMinus。如何解决这个问题?

  <?php
session_start();
//validate the post data if necessary
if (isset($_POST['sessionNum'])) {

$_SESSION['sessionNum'] = $_POST['sessionNum'];
}else{
        $_SESSION['sessionNum']--;
}

$sessionMinus = $_SESSION['sessionNum'];

?>


    <body>

    <?php echo $sessionMinus; ?>

      <form id="enter" 
                action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" 
                method="post" 
                onsubmit="return validateForm(this);" >
        <p>
            <input id="submitBtn" name="submitDetails" type="submit" value="Submit Details" />
        </p>
      </form> 

      <?php

      $outputDetails = "";
      $outputDetails .= "
      <table id='sessionDetails' border='1'>
      <tr>
      <th>Number of Sessions:</th> 
      <th>{$_SESSION['sessionNum']}</th>
      </tr>";
      $outputDetails .= "</table>";

      echo $outputDetails;

      ?> 

    </body>

2 个答案:

答案 0 :(得分:2)

您的$sessionMinus永远不会被初始化。

当你执行isset($sessionMinus)时,你正在检查变量是否已被声明,并且由于它没有被声明,它当然是未定义的。如果您希望在每个提交中携带变量,则必须将其存储在$_SESSION变量中,而不是本地变量中。

您可以了解variable scope heresession variables here


您正在使用$_POST

您使用的是$_POST,但是您没有在表单中发送名为sessionNum的变量。


保持清洁

您还应该尝试通过分离PHP处理和PHP输出来尽可能保持html“干净”。

这就是您的设置应该是这样的

<?php
    session_start();

    if(!isset($_SESSION['my_counter'])){
        if(isset($_POST['my_count'])){
            //Declare my counter for the first time
            $_SESSION['initial_count'] = $_POST['my_count'];
            $_SESSION['my_counter'] = $_POST['my_count'];
        }
    }else{
        //Decrement my counter
        $_SESSION['my_counter']--;
    }

    $actionurl = htmlentities($_SERVER['PHP_SELF']);

    if($_SESSION['my_counter'] <= 0)
        $number_of_sessions = "No sessions left!";
    else
        $number_of_sessions = $_SESSION['my_counter'];

    $started_with_sessions = $_SESSION['initial_count'];
?>

<!DOCTYPE html>
<body>
    <form id="enter" action="<?php echo $actionurl; ?>" method="post" onsubmit="return validateForm(this);" >
        <input type='hidden' name='my_count' value='5' />
        <input id="submitBtn" name="submitDetails" type="submit" value="Submit Details" />
    </form>

    <table id='sessionDetails' border='1'>
        <tr>
            <th>Number of sessions: </th>
            <th><?php echo $number_of_sessions; ?></th>
        </tr>
        <tr>
            <th>Started with: </th>
            <th><?php echo $started_with_sessions; ?> sessions</th>
        </tr>
    </table>
</body>
</html>

答案 1 :(得分:0)

如果未设置$ sessionMinus,则永远不会设置它。也许您应该在设置它之前检查它是否未设置?

if (!isset($sessionMinus)) {
  $sessionMinus = "";
  $sessionMinus .= $_POST['sessionNum']--;

}