携带user_id参数访问表单时数据无法自动填充问题咨询
问题原因
你当前的表单填充逻辑仅绑定了输入框的onkeyup事件,只有用户手动在输入框敲击键盘输入内容时才会触发GetDetail拉取数据。你通过JS自动将URL参数中的user_id赋值到输入框的操作不会触发onkeyup事件,因此不会触发后续的字段填充逻辑。
解决方法
1. 补充页面加载时的自动触发逻辑
修改你的JavaScript代码,新增URL参数解析逻辑,页面加载完成后如果读取到URL中的user_id参数,自动赋值到输入框后主动调用GetDetail函数即可:
<script> // 原有GetDetail函数保持不变 function GetDetail(str) { if (str.length == 0) { document.getElementById("first_name").value = ""; document.getElementById("last_name").value = ""; document.getElementById("phone_number").value = ""; return; } var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function () { if (this.readyState == 4 && this.status == 200) { var myObj = JSON.parse(this.responseText); document.getElementById("first_name").value = myObj[0]; document.getElementById("last_name").value = myObj[1]; document.getElementById("phone_number").value = myObj[2]; } }; xmlhttp.open("GET", "/wp-includes/gfg.php?user_id=" + str, true); xmlhttp.send(); } // 新增:页面加载完成后自动读取URL参数触发填充 window.onload = function() { const urlParams = new URLSearchParams(window.location.search); const userIdFromUrl = urlParams.get('user_id'); if (userIdFromUrl) { // 赋值到用户ID输入框 document.getElementById('id').value = userIdFromUrl; // 主动调用数据拉取函数填充其他字段 GetDetail(userIdFromUrl); } } </script>
2. 可选优化:兼容更多触发场景
如果需要支持粘贴用户ID、输入框失焦时也自动触发填充,可以给HTML的user_id输入框补充更多事件绑定:
<input type='text' name="user_id" id='id' class='form-control' placeholder='Enter user id' onkeyup="GetDetail(this.value)" onblur="GetDetail(this.value)" onpaste="GetDetail(this.value)" value="">
安全优化建议
你当前的PHP代码直接将用户传入的user_id拼接进SQL语句,存在SQL注入风险,建议修改为预处理语句:
<?php // 读取user_id参数,不存在则默认为空 $user_id = $_REQUEST['user_id'] ?? ''; $con = mysqli_connect("localhost", "aaawacpa_gfg", "Ga011020019***", "aaawacpa_gfg"); // 初始化字段默认值 $first_name = $last_name = $phone_number = ''; if ($user_id !== "") { // 使用预处理语句避免SQL注入 $stmt = mysqli_prepare($con, "SELECT first_name, last_name, phone_number FROM userdata WHERE user_id = ?"); mysqli_stmt_bind_param($stmt, "s", $user_id); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); $row = mysqli_fetch_array($result); if ($row) { $first_name = $row["first_name"]; $last_name = $row["last_name"]; $phone_number = $row["phone_number"]; } mysqli_stmt_close($stmt); } $result = array($first_name, $last_name, $phone_number); echo json_encode($result); ?>
内容的提问来源于stack exchange,提问作者Wonder In Wonderland
相关产品推荐
相关产品推荐

