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

PHP表单入库正常 动态下拉框无法获取角色选项值问题排查

动态下拉框无法拉取选项的修复方案

现有代码的错误点

  • 查表逻辑错误:角色选项存储在user_role表,原代码错误查询了user_info用户表,自然拿不到role_name字段
  • 变量未定义:原代码写了无效的冗余查询语句,实际执行查询调用的$sql变量从未被赋值,数据库查询根本没有正常执行;且冗余的mysqli_query("SELECT * FROM user_info")没有传入数据库连接参数,本身就会触发参数错误
  • 表单元素缺失属性:<select>标签没有设置name="role_id"属性,就算选项渲染正常,表单提交时后端也拿不到选中的角色ID
  • PHP语法错误:$row = mysqli_fetch_array($user_roles)行尾缺少分号,会直接触发PHP解析错误,代码无法运行
  • 重复引入连接文件:顶部已经引入过db_conn.php,下拉框部分重复引入可能引发连接重复定义的报错

修复后可直接运行的代码

表单处理部分(原入库逻辑保留,补充稳定性优化)

<?php
include('db_conn.php');
if(isset($_POST["submitform"])){

  $name = mysqli_real_escape_string($con, $_POST['name']);
  $userid = mysqli_real_escape_string($con, $_POST['userid']);
  $email = mysqli_real_escape_string($con, $_POST['email']);
  $phone = mysqli_real_escape_string($con, $_POST['phone']);

  // 注意:md5哈希强度极低,生产环境请替换为password_hash()函数存储密码
  $pass = md5($_POST['pass']);
  $cpass = md5($_POST['cpass']);
  $role_id = intval($_POST['role_id']); // 转整数避免SQL注入风险

  $select = "SELECT * FROM user_info WHERE email = '$email' && pass = '$pass' ";
  $result = mysqli_query($con, $select);

  if(mysqli_num_rows($result) > 0){
    $error[] = 'user already exists';
  }else{
    if($pass != $cpass){
      $error[]= 'password does not match';
    }else{
      $insert = "INSERT INTO user_info (name, userid, email, phone, pass, role_id)
      VALUES ('$name', '$userid', '$email', '$phone', '$pass', '$role_id')";
      mysqli_query($con, $insert);
      header('location: login.php');
      exit; // 跳转后终止后续代码执行,避免逻辑异常
    }
  }
};
?>

下拉选择框部分

<!-- 补充name属性,否则表单提交无法传值 -->
<select name="role_id" style="padding:5px; width:200px; border-radius:20px;">
  <option value="">select role</option>
  <?php
  // 移除重复的db_conn引入,直接查询角色表指定字段,避免拉取无用数据
  $sql = "SELECT role_id, role_name FROM user_role";
  $user_roles = mysqli_query($con, $sql);
  // 用while循环逐行读取结果,比固定计数的for循环更稳妥,不会出现结果集指针偏移问题
  while($row = mysqli_fetch_assoc($user_roles)){
  ?>
  <option value="<?php echo $row["role_id"]; ?>">
    <?php echo $row["role_name"]; ?>
  </option>
  <?php
  }
  ?>
</select>

验证要点

  • 确认db_conn.php里的数据库连接$con创建正常,连接账号有user_role表的读权限
  • 页面渲染后右键查看源码,确认option标签内已经正常输出Owner、Customer两个选项
  • 提交表单时可以通过浏览器开发者工具的网络面板查看请求参数,确认role_id值正常传递

内容的提问来源于stack exchange,提问作者Bluesy Ace

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:03:15