如何在PHP的if语句外部修改变量?按钮更新失效求助
问题分析与解决方案
嘿,作为刚接触PHP的学生,遇到这个问题太正常啦~核心原因是PHP是无状态的服务器端脚本——用户每次点击按钮发起的HTTP请求,都是服务器重新运行一遍你的PHP代码,之前请求里修改的变量不会被保留到下一次请求中。
你现在的代码里,第一次点击emp_sig按钮时,虽然修改了$GLOBALS['f1'],但这个修改只在那次请求的进程里有效。当你点击submit按钮发起新请求时,脚本重新执行,$f1又被初始化为s,所以输出的还是初始值。
解决方法:使用Session保存状态
Session是PHP用来在多个请求之间保存用户数据的机制,刚好能解决你的问题。修改后的代码如下:
<?php // 必须在输出任何内容之前启动Session session_start(); // 初始化Session变量(如果还没设置的话) if (!isset($_SESSION['f1'])) { $_SESSION['f1'] = "s"; } // 用户点击第一个按钮更新变量 if(isset($_POST['emp_sig']) && !empty($_POST['emp_sig'])){ $upload_dir1 = "signatures/EmployeeSignatures/"; $file1= $upload_dir1 . mktime() . ".png"; // 把值存在Session里 $_SESSION['f1'] = $file1; $success = file_put_contents($file1, $data1); print $success ? $file1 : 'Unable to save the file.'; } // 用户点击第二个按钮输出更新后的变量 if(isset($_POST['submit'])){ echo $_SESSION['f1']; } ?>
为什么这样可行?
session_start()会启动或恢复当前用户的Session,服务器通过Cookie识别用户,确保每个用户的Session数据独立。- 把
$f1的值存在$_SESSION数组里,这个数据会被服务器保存下来,直到Session过期或者被销毁,所以下一次请求时还能读取到更新后的值。
补充说明
如果你不想用Session,也可以在第一次提交后,把$file1的值放在一个隐藏表单域里,第二次提交表单时一起传递,但Session更适合这种需要跨请求持久化数据的场景,尤其是当数据不需要展示给用户的时候。
内容的提问来源于stack exchange,提问作者GenesisTepait
相关产品推荐
相关产品推荐

