当用户单击模式表中的记录时,我正在尝试设置PHP $ _SESSION变量。
通过对SQL Server表中的记录进行while循环来设置模式表。看起来如下:
Value | Link
---------------------------
0 | <a href= changeVar.php?ficheNum=0></a>
1 | <a href= changeVar?ficheNum=1></a>
2 | <a href= changeVar?ficheNum=2></a>
...
单击表中的链接之一时,它将运行以下代码:
<?php
$ficheNum=$_REQUEST['ficheNum'];
$_SESSION['ficheCount'] = $ficheNum;
header("Location: test.php");
?>
test.php页面只是一个输入页面,其中填充了数据库表中的值。它还具有上面显示的模式表。 test.php上的PHP如下。
$fiche_array = array();
$sel_query = "SELECT fiche
FROM test.dbo.[TLM.Fiche_Globale]
ORDER BY fiche ASC;";
$sel_result = sqlsrv_query($con, $sel_query) or die( print_r( sqlsrv_errors(), true));
while($sel_row = sqlsrv_fetch_array($sel_result)) {
array_push($fiche_array, $sel_row['fiche']);
}
if(isset($_POST['new']) && $_POST['new']==1)
{
$_SESSION['ficheCount'] ++;
}else if(isset($_POST['new2']) && $_POST['new2']==1)
{
$_SESSION['ficheCount'] = $_SESSION['ficheCount'] - 1;
}else if(isset($_SESSION['ficheCount']) && $_SESSION['ficheCount'] > 0)
{
$_SESSION['ficheCount'] = $_SESSION['ficheCount'];
}else{
session_start();
$_SESSION['ficheCount'] = 0;
}
if / else语句中的前两个语句用于操作下一个和上一个记录按钮。他们工作正常。最后的语句是如果没有触发语句1-3则运行的代码。 如果从changeVar.php页面将用户重定向回页面,则应该触发第三条语句。但是,这永远不会触发。或者,它触发并且不执行任何操作-我不确定。
我尝试手动测试changeVar页面:
<?php
$ficheNum=$_REQUEST['ficheNum'];
$_SESSION['ficheCount'] = $ficheNum;
echo $_SESSION['ficheCount'];
?>
它将变量设置为正确的数字,但是,当我返回到test.php页面时,它总是默认返回到之前设置的ficheCount,就好像我从未在changeVar.php页面中设置变量一样。
如果有人在这里看到我在做什么错,将不胜感激。
欢呼
答案 0 :(得分:3)
为了使用PHP会话,您始终需要在每个使用会话的PHP文件的开头运行命令session_start();
。 http://php.net/manual/en/function.session-start.php