PHP提交POST表单后如何获取URL中$_GET['area']变量(无需隐藏输入)
无需隐藏输入传递$_GET['area']参数的解决方案
问题根源
你提交表单时,action只指向当前PHP文件,没有带上area参数——页面加载时URL里的area是首次访问时的参数,但表单提交会发起新的POST请求,不带参数的话,新请求里的$_GET['area']就会丢失,导致无法传入$addDataToDB()。
方案1:用Session存储参数
在crearArt.php最顶部开启会话,首次加载时把area存入Session,提交时从Session取出:
<?php session_start(); // 必须放在所有输出之前,包括HTML、空格 // 首次访问页面时,保存area到Session if(isset($_GET['area']) && !isset($_POST['crearArticle'])){ $_SESSION['area'] = $_GET['area']; } $inputNames = []; $inputValues = []; if(isset($_POST['crearArticle'])){ foreach($_POST as $key => $value){ if($key !== 'crearArticle'){ array_push($inputNames, $key); array_push($inputValues, $value); } } // 从Session取area传入方法 $addDataToDB($inputNames, $inputValues, $_SESSION['area']); header('Location: index.php?area='.$_SESSION['area']); } ?>
注意:session_start()必须放在页面最开头,不能有任何输出(比如空格、HTML标签),否则会触发错误。
方案2:修改表单Action拼接参数
直接在表单的action属性里带上area参数,这样POST提交时会自动携带该GET参数:
修改crearArt.view.php的表单代码:
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']) . '?area=' . $_GET['area'] ?>" method="POST"> <!-- 若干输入框 --> <button type="submit" name="crearArticle">Create New Content</button> </form>
这样提交后,crearArt.php里的$_GET['area']就能正常读取,不需要修改原有的PHP处理逻辑,直接传入$addDataToDB()即可。
内容的提问来源于stack exchange,提问作者Fito
相关产品推荐
相关产品推荐

