我正在使用会话在PHP中创建多页表单.该$stage
变量跟踪用户填写表单的进度(UPDATE),通常在表单的每个阶段设置为$ _POST.
在第二页(第2阶段),表单的提交按钮获取其值如下:
echo ';
这工作正常 - $stage + 1
如果我在第2页,则评估为3.但由于我不止一次这样做,我决定将此代码拉出到我在代码顶部定义的函数中,之后$stage
提到.
在我以前使用上面代码的同一个地方,我调用了该函数.我已经验证函数的代码是相同的,但现在$stage + 1
评估为1.
PHP是在定义函数时评估我的变量,而不是在调用它时?如果是这样,我该如何防止这种情况?
为了测试这个理论,我$stage = 2
在定义我的函数之前设置,但是当我调用函数时它仍然计算为1.这是怎么回事?
感谢所有建议变量范围成为罪魁祸首的人 - 我现在打了我的额头.$stage
是一个全局变量,我没有$GLOBAL_stage
像我通常那样称它来防止这种问题.
我添加global $stage;
到函数定义,它工作正常.谢谢!
不,PHP会在调用函数时评估您的变量.但是你的函数有一个局部变量范围,即没有看到你的函数,我猜你是在运行一个局部变量.您可以将全局变量导入到您的函数中,但不建议这样做:
function myfunction() { global $stage; ... }
如果不知道你的代码,真的很难说,但我会继续猜测你正在使用'register globals'将表单参数注入全局PHP变量(在这种情况下为$ state).您可能需要考虑关闭register_globals
,因为它确实存在安全风险并使用所谓的超全局变量.
编辑
好的,所以你在$ _POST数组中看到了你的舞台.仍然疯狂地猜测你的功能,你可以尝试以下方法:
function my_insert_stage_param() { global $stage; echo ''; }
像$ _POST数组这样的Suberglobals不需要声明global
.