使用PHP+AJAX+HTML实现下拉选值后拉取SQL关联邮箱填充文本框求助
问题修复方案
现存问题
- AJAX代码语法不完整,缺少事件回调的闭合符号
- 后端
get_details.php混用已废弃的mysql_*系列函数,和前端页面使用的mysqli扩展不兼容,导致查询失败 - SQL查询语句中字符串类型的
company条件未加单引号包裹,语法错误直接导致查询失效 - 未做SQL注入防护,直接拼接用户传入参数存在严重安全风险
- (可选优化)下拉框option的值建议使用
clients表的主键ID而非公司名称,避免公司名存在特殊字符、重名时出现查询异常
修改后的代码
1. AJAX代码(补全语法)
$('#cat').change(function(){ var package = $(this).val(); $.ajax({ type:'POST', data:{package:package}, url:'get_details.php', success:function(data){ $('#mail').val(data); } }); });
2. get_details.php代码(修复兼容性+安全问题)
基础修复版本:
<?php include("server.php"); // 需确保server.php中使用mysqli创建数据库连接,连接变量名为$conn if (isset($_POST['package'])) { // 转义传入参数,防止SQL注入 $company = mysqli_real_escape_string($conn, $_POST['package']); $qry = "SELECT email FROM clients WHERE company = '{$company}' LIMIT 1"; $rec = mysqli_query($conn, $qry); if (mysqli_num_rows($rec) > 0) { $res = mysqli_fetch_array($rec); echo $res['email']; } else { // 无匹配数据时返回空值 echo ''; } die(); } ?>
更高安全性的预处理语句版本(推荐):
<?php include("server.php"); if (isset($_POST['package'])) { $company = $_POST['package']; // 预处理查询,完全规避SQL注入风险 $stmt = mysqli_prepare($conn, "SELECT email FROM clients WHERE company = ? LIMIT 1"); mysqli_stmt_bind_param($stmt, "s", $company); mysqli_stmt_execute($stmt); mysqli_stmt_bind_result($stmt, $email); if(mysqli_stmt_fetch($stmt)){ echo $email; }else{ echo ''; } mysqli_stmt_close($stmt); die(); } ?>
修改完成后即可实现选中公司自动填充对应邮箱的效果。
内容的提问来源于stack exchange,提问作者MyNameJeff
相关产品推荐
相关产品推荐

