PHP实现将MySQL数据赋值到HTML表单隐藏输入框问题求助
问题分析与解决方案
你的核心问题集中在URL参数拼接错误和SQL查询的语法与安全问题上,导致无法正确传递并获取unique_id,进而无法给第二个表单的隐藏框赋值。下面一步步帮你修复:
1. 修复跳转URL的参数拼接错误
你当前的跳转代码用了两个问号连接参数:
header("location:../book_trip.php?msg=$m?ui=$unique_id");
这会让URL变成book_trip.php?msg=Booking placed?ui=abc123,此时ui并不是独立的GET参数,而是msg值的一部分,自然无法通过$_GET['ui']获取到。
正确写法应该用&连接多参数,同时用urlencode()处理消息字符串避免特殊字符破坏URL,还要在header后加exit()终止脚本执行:
header("location:../book_trip.php?msg=" . urlencode($m) . "&ui=$unique_id"); exit();
2. 修复SQL查询的语法与安全问题
你的查询语句中,ui是字符串类型(uniqid()生成的是字符串),但你没给$dbook_id加引号,会直接导致SQL语法错误;同时直接拼接变量的写法存在SQL注入风险,强烈改用预处理语句:
修改后的查询代码:
<?php require_once 'includes_2/dbh.inc_2.php'; $d_name = ""; if (isset($_GET['ui'])) { $dbook_id = $_GET['ui']; // 使用预处理语句防注入 $stmt = $conn->prepare("SELECT f_name FROM bookings WHERE ui = ?"); $stmt->bind_param("s", $dbook_id); // "s"表示参数为字符串类型 $stmt->execute(); $result = $stmt->get_result(); if ($row = $result->fetch_assoc()) { $d_name = $row["f_name"]; } $stmt->close(); } ?>
3. 确保隐藏输入框正确赋值
最后检查第二个表单的隐藏框是否正确输出$d_name,同时用htmlspecialchars()防止XSS攻击:
<input type="hidden" name="hidden_name" value="<?php echo htmlspecialchars($d_name); ?>">
额外小提醒
你的第一个表单处理代码中,PHPMailer的调用用了->(HTML实体),在PHP代码里应该直接写->,否则会导致邮件功能无法正常初始化。
内容的提问来源于stack exchange,提问作者Avatar
相关产品推荐
相关产品推荐

