我在php页面中使用了一个会话变量。根据我的信息,它可以在整个程序中访问它,但问题是它在php页面的不同位置显示相同变量的不同值?
代码如下
<html><body>
<?php session_start();
if(!isset($_SESSION['x']))
$_SESSION['x']=1;
echo "X=". $_SESSION['x'];
?>
<form>
<input type="submit" name="save" value="save" />
</form>
<?php
if (isset($_GET['save']))
{
if(isset($_SESSION['x']))
$_SESSION['x'] = $_SESSION['x']+1;
echo $_SESSION['x']."<br>";
}
else
echo "no submit";
?>
</body></html>
提交按钮点击前后的值会有所不同吗?请告诉我为什么会这样? 谢谢你的推荐。
答案 0 :(得分:0)
这是由于代码本身
if(isset($_SESSION['x'])) //It is set
$_SESSION['x'] = $_SESSION['x']+1; //Add 1 to the value
echo $_SESSION['x']."<br>"; return value with +1
<强>解决方案强>
输出不同的原因是您回显和更新的顺序
//Echo
//Update Value
//Echo again
简单的解决方案就是移动这个
if (isset($_GET['save']))
{
if(isset($_SESSION['x']))
$_SESSION['x'] = $_SESSION['x']+1;
echo $_SESSION['x']."<br>";
}
else
echo "no submit";
高于此
if(!isset($_SESSION['x']))
$_SESSION['x']=1;
echo "X=". $_SESSION['x'];
另请注意在表单中设置方法和操作以确保它自己调用
<form method="GET" action="[url to itself]">
<input type="submit" name="save" value="save" />
</form>
答案 1 :(得分:0)
这样做:
<html><body>
<?php session_start();
if(!isset($_SESSION['x']))
$_SESSION['x']=1;
echo "X=". $_SESSION['x'];
?>
<form method="GET" action="">
<input type="submit" name="save" value="save" />
</form>
<?php
if (isset($_GET['save']))
{
if(isset($_SESSION['x']))
echo $_SESSION['x']."<br>";
}
else
echo "no submit";
?>
</body></html>
这样,代码在提交之后打印出与之前相同的值。 无论哪种方式,您尝试打印值并更改后或更改值并打印后,页面重新加载时将更改值。你可以添加另一个名为increment的按钮,并在php中添加以下代码:
if (isset($_GET['inc']))
{
if(isset($_SESSION['x']))
$_SESSION['x'] = $_SESSION['x']+1;
}
以及表格内的这个:
<input type="submit" name="inc" value="inc" />
这样,当你按下inc按钮
时,你的变量就会增加答案 2 :(得分:0)
您正在重新声明会话变量'x'的值
$_SESSION['x'] = $_SESSION['x']+1;
这就是它出现1大于其初始值的原因。