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

PHP处理多单选问卷表单 批量插入多行数据至数据库

PHP性格测评表单提交入库实现方案

表单基础修正(可选但推荐)

你当前的表单存在同组单选按钮id重复的问题,不符合HTML规范,建议做简单调整,同时补充必填校验避免漏填,修正后表单示例:

<form method="post" action="">
  <div>
    <label for="name">姓名</label>
    <input name="name" id="name" placeholder="请输入姓名" required>
  </div>
  <div>
    <label for="surname">姓氏</label>
    <input name="surname" id="surname" placeholder="请输入姓氏" required>
  </div>
  <br>

  <!-- 第1题 -->
  <div>
    <label>问题1</label><br>
    <input type="radio" name="q1" value="S" required> 选项1 <br>
    <input type="radio" name="q1" value="D"> 选项2 <br>
    <input type="radio" name="q1" value="K"> 选项3 <br>
    <input type="radio" name="q1" value="I"> 选项4 <br>
  </div>
  <br>

  <!-- 剩下q2到q25题按相同格式编写即可,name属性依次为q2、q3...q25,每个题的第一个单选加required属性 -->

  <br><br>
  <button type="submit" name="submit">提交答案</button>
</form>

注:如果保留原表单结构不修改,也不会影响POST数据接收,只是不符合HTML编码规范。

PHP后端入库逻辑

核心逻辑:接收POST提交的姓名、姓氏参数,遍历1-25题的答案,使用PDO预处理语句循环插入数据库,全程做合法性校验避免无效数据入库,代码直接放到表单同页面顶部即可:

<?php
// 仅处理POST提交请求
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['submit'])) {
    // 1. 基础参数校验
    $name = trim($_POST['name'] ?? '');
    $surname = trim($_POST['surname'] ?? '');
    if ($name === '' || $surname === '') {
        exit("错误:姓名和姓氏不能为空");
    }

    // 2. 校验25道题全部作答
    $answers = [];
    for ($i = 1; $i <= 25; $i++) {
        $qKey = 'q' . $i;
        if (!isset($_POST[$qKey]) || !in_array($_POST[$qKey], ['S','D','K','I'])) {
            exit("错误:第{$i}题未作答或答案非法");
        }
        $answers[] = $_POST[$qKey];
    }

    // 3. 数据库连接(替换成你自己的数据库配置)
    $dbHost = 'localhost';
    $dbName = '你的数据库名';
    $dbUser = '你的数据库用户名';
    $dbPass = '你的数据库密码';
    try {
        $pdo = new PDO(
            "mysql:host={$dbHost};dbname={$dbName};charset=utf8mb4",
            $dbUser,
            $dbPass,
            [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
        );

        // 4. 预处理插入语句,防止SQL注入
        $stmt = $pdo->prepare("INSERT INTO users (name, surname, q) VALUES (:name, :surname, :q)");
        $stmt->bindParam(':name', $name);
        $stmt->bindParam(':surname', $surname);
        $stmt->bindParam(':q', $qVal);

        // 5. 循环插入25条记录
        $pdo->beginTransaction(); // 开启事务,保证所有数据要么全部插入成功要么全部失败
        foreach ($answers as $qVal) {
            $stmt->execute();
        }
        $pdo->commit();

        // 插入成功后提示
        exit("测评提交成功!");

    } catch (PDOException $e) {
        $pdo->rollBack(); // 插入出错回滚事务
        exit("数据库错误:" . $e->getMessage());
    }
}
?>

关键说明

  • 代码使用PHP官方推荐的PDO扩展操作数据库,预处理语句可以完全避免SQL注入风险,禁止直接拼接用户输入到SQL语句中
  • 事务处理保证25条记录的插入原子性,不会出现只插入部分题目的脏数据
  • 后端默认做了答案合法性校验,即便用户绕过前端校验提交非法值也会被拦截
  • 如果你后续需要区分每条记录对应第几道题,只需要给users表新增一个question_num的整数字段,插入时循环带上题号即可,当前代码完全适配你给出的三字段表结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 04:18:31