在上一页上,用户在文本框中输入一个数字,当提交该表单时,该号码将作为$_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>
答案 0 :(得分:2)
您的$sessionMinus
永远不会被初始化。
当你执行isset($sessionMinus)
时,你正在检查变量是否已被声明,并且由于它没有被声明,它当然是未定义的。如果您希望在每个提交中携带变量,则必须将其存储在$_SESSION
变量中,而不是本地变量中。
您可以了解variable scope here和session 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']--;
}