会话变量不起作用

时间:2013-12-09 10:36:28

标签: php forms session

我在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>
提交按钮点击前后的

值会有所不同吗?请告诉我为什么会这样? 谢谢你的推荐。

3 个答案:

答案 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大于其初始值的原因。