You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 15:36:03