PHP使用header()跳转时URL中lidnummer参数传值错误问题咨询
问题1解决方法
你当前跳转URL异常的核心原因是header函数内的字符串拼接语法错误:你用双引号包裹跳转地址时,错误把单引号、拼接符.直接写在了字符串内部,导致这些符号被当作普通参数值编码输出,才会出现%27(单引号URL编码)、%2E(点号URL编码)这类异常字符。
修复按以下两步操作:
- 先在
create.php中正确接收表单传递的lidnummer参数,跳转前要确保你已经拿到了正确的ID值:
<?php // 处理添加电话号码的请求 if (isset($_POST['add_telnr'])) { // 接收POST传递的lidnummer,转整数过滤更安全 $lidnummer = intval($_POST['lidnummer']); // ===== 这里写你保存电话号码到数据库的业务逻辑 ===== // 正确的跳转写法,二选一即可 // 写法1:双引号支持直接解析变量,不用额外拼接 header("Location: ../lid.php?lidnummer=$lidnummer"); // 写法2:用单引号加拼接符的正确写法 // header('Location: ../lid.php?lidnummer=' . $lidnummer); exit(); // 跳转后必须加exit终止后续代码执行 } ?>
- 补充:你当前添加邮箱的表单没有加
lidnummer隐藏字段,后续提交加邮箱请求也会出现同样问题,给这个表单也补上隐藏字段即可:
<form action="includes/create.php" method="POST"> <label for="email"> Email: <input type="text" name="email"> </label> <!-- 补上隐藏字段 --> <input type='hidden' name='lidnummer' value='<?php echo $lidnummer ?>'> <button type="submit" name='add_email'>Voeg email toe</button> </form>
问题2排查方案
如果修复跳转后仍然异常,按以下顺序排查即可:
- 先校验传值是否正常:在
create.php接收参数后临时加一行var_dump($lidnummer);exit;,提交表单后看输出的ID值是否正确,排除表单传值失败的问题。 - 检查跳转路径是否正确:如果相对路径混乱,可以改成站点绝对路径,比如你的
lid.php在站点根目录就写成header("Location: /lid.php?lidnummer=$lidnummer");,避免相对路径层级错误。 - 检查
header函数前是否有输出:header执行前不能有任何输出(包括空格、HTML标签、echo打印内容、PHP报错信息),如果有前置输出会导致跳转失效,可以在header前加一行ob_clean();清空缓冲区兜底。 - 兜底传参方案:如果GET传参确实不稳定,可以用SESSION暂存参数:提交表单后把
lidnummer存入$_SESSION['lidnummer'],跳转到lid.php后优先取GET参数,取不到再读SESSION里的值,读取后可以清空SESSION里的临时参数。
内容的提问来源于stack exchange,提问作者Xavvey
相关产品推荐
相关产品推荐

