PHP中不提交表单如何将隐藏域的值赋值给变量
你现有的代码无法实现效果,本质是PHP和HTML的运行时机差异导致的:
- PHP是服务端语言,会在页面发送到用户浏览器之前就在服务器上执行完毕
- 你写的hidden输入框属于浏览器端DOM元素,要等PHP执行完、页面传输到浏览器渲染之后才会存在
- 没有表单提交动作时,
$_GET/$_POST全局变量只能拿到URL携带的参数、或者提前存到Cookie/SESSION里的内容,根本读取不到浏览器端的DOM属性。你原代码里直接调用$_GET['myTest'],但URL里没有对应参数、也没有提交GET表单,所以这个键不存在,运行时会抛出未定义数组键的警告,自然拿不到值。
下面分两种常见场景给出解决方案:
场景1:hidden输入框的value是服务端生成的
直接在输出hidden之前就把值存到PHP变量里,同时给hidden赋值、给后续PHP逻辑使用即可,示例代码:
<?php // 服务端提前定义好hidden要用到的值 $testVal = 10; ?> <html> <head> <meta charset="utf-8"> <title>My site</title> </head> <body> <input type="hidden" name="myTest" value="<?php echo $testVal; ?>"> <?php // 直接用提前定义的变量即可 echo $testVal; ?> </body> </html>
场景2:hidden输入框的value是浏览器端动态修改的,需要传给PHP处理
这种情况必须通过AJAX异步请求实现,不需要用户手动提交表单,页面加载后自动把hidden的值传给PHP,拿到处理结果后再渲染到页面即可,原生JS实现示例:
<?php // 优先处理AJAX请求 if (isset($_POST['fetch_val']) && $_POST['fetch_val'] == 1) { $val = $_POST['myTest'] ?? ''; // 这里可以写你需要的PHP处理逻辑 echo "PHP拿到的hidden值是:".$val; exit; } ?> <html> <head> <meta charset="utf-8"> <title>My site</title> </head> <body> <input type="hidden" name="myTest" id="myTest" value="10"> <div id="phpResult"></div> <script> // 页面加载完成后自动发送请求 window.onload = function() { let hiddenVal = document.getElementById('myTest').value; // 发起AJAX请求 fetch(window.location.href, { method: 'POST', headers: {'Content-Type': 'application/x-www-form-urlencoded'}, body: 'fetch_val=1&myTest=' + encodeURIComponent(hiddenVal) }) .then(res => res.text()) .then(data => { // 将PHP返回的结果插入到页面 document.getElementById('phpResult').innerText = data; }) } </script> </body> </html>
内容的提问来源于stack exchange,提问作者Ubaidullah Hassan
相关产品推荐
相关产品推荐

