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

Laravel中如何关联插入复选框与对应输入字段的数据?

实现复选框与对应输入字段的关联提交及数据库插入

一、前端调整:关联字段命名+显示隐藏逻辑

当前表单的输入字段命名(txt_win[]、txt_loss[])会导致提交后无法直接对应到具体的格斗风格,需要调整命名规则,让每个格斗风格的三个输入框与复选框值绑定,同时完善显示隐藏的交互逻辑。

修改后的HTML示例(含多个格斗风格)

<div class="form-check">
  <input class="form-check-input fighting_style" name="selected_styles[]" type="checkbox" value="MMA" id="MMA">
  <label class="form-check-label" for="MMA">MMA</label>

  <section class="fighiting_value" id="MMA_input" style="display: none;">
    <div class="row">
      <div class="col-3">
        <div class="mb-3">
          <label class="form-label text-dark">WIN</label>
          <input type="text" class="form-control fights txt_win" name="fights[MMA][win]" onblur="totalFights()" placeholder="">
        </div>
      </div>
      <div class="col-3">
        <div class="mb-3">
          <label class="form-label text-dark">LOSS</label>
          <input type="text" class="form-control fights txt_loss" data-points="75" name="fights[MMA][loss]" onblur="totalFights()" placeholder="">
        </div>
      </div>
      <div class="col-3">
        <div class="mb-3">
          <label class="form-label text-dark">DRAW</label>
          <input type="text" class="form-control fights txt_draw" data-points="150" name="fights[MMA][draw]" onblur="totalFights()" placeholder="">
        </div>
      </div>
    </div>
  </section>
</div>

<!-- 新增格斗风格示例,方便扩展 -->
<div class="form-check">
  <input class="form-check-input fighting_style" name="selected_styles[]" type="checkbox" value="Boxing" id="Boxing">
  <label class="form-check-label" for="Boxing">Boxing</label>

  <section class="fighiting_value" id="Boxing_input" style="display: none;">
    <div class="row">
      <div class="col-3">
        <div class="mb-3">
          <label class="form-label text-dark">WIN</label>
          <input type="text" class="form-control fights txt_win" name="fights[Boxing][win]" onblur="totalFights()" placeholder="">
        </div>
      </div>
      <div class="col-3">
        <div class="mb-3">
          <label class="form-label text-dark">LOSS</label>
          <input type="text" class="form-control fights txt_loss" data-points="75" name="fights[Boxing][loss]" onblur="totalFights()" placeholder="">
        </div>
      </div>
      <div class="col-3">
        <div class="mb-3">
          <label class="form-label text-dark">DRAW</label>
          <input type="text" class="form-control fights txt_draw" data-points="150" name="fights[Boxing][draw]" onblur="totalFights()" placeholder="">
        </div>
      </div>
    </div>
  </section>
</div>

显示隐藏的JavaScript逻辑

// 监听所有格斗风格复选框的切换事件
document.querySelectorAll('.fighting_style').forEach(checkbox => {
  checkbox.addEventListener('change', function() {
    // 根据复选框value匹配对应输入区域
    const inputSection = document.getElementById(`${this.value}_input`);
    if (this.checked) {
      inputSection.style.display = 'block';
    } else {
      inputSection.style.display = 'none';
      // 可选:取消勾选时清空输入框
      inputSection.querySelectorAll('input').forEach(input => input.value = '');
    }
  });
});

二、后端处理:接收关联数据并插入数据库

以PHP为例,接收表单提交的selected_styles(勾选的格斗风格)和fights(对应胜负平数据),遍历数据插入数据库,必须使用预处理语句防止SQL注入。

PHP代码示例

<?php
// 数据库连接信息
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_dbname";

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
  die("连接失败: " . $conn->connect_error);
}

// 处理表单提交
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  $selectedStyles = $_POST['selected_styles'] ?? [];
  $fightsData = $_POST['fights'] ?? [];

  // 预处理插入语句
  $stmt = $conn->prepare("INSERT INTO fighting_records (style, win, loss, draw) VALUES (?, ?, ?, ?)");
  $stmt->bind_param("siii", $style, $win, $loss, $draw);

  // 遍历勾选的格斗风格,插入对应数据
  foreach ($selectedStyles as $style) {
    $win = isset($fightsData[$style]['win']) ? intval($fightsData[$style]['win']) : 0;
    $loss = isset($fightsData[$style]['loss']) ? intval($fightsData[$style]['loss']) : 0;
    $draw = isset($fightsData[$style]['draw']) ? intval($fightsData[$style]['draw']) : 0;

    $stmt->execute();
  }

  $stmt->close();
  $conn->close();
  echo "数据插入成功";
}
?>

数据库表结构参考

建议创建如下存储表:

CREATE TABLE fighting_records (
  id INT AUTO_INCREMENT PRIMARY KEY,
  style VARCHAR(50) NOT NULL,
  win INT DEFAULT 0,
  loss INT DEFAULT 0,
  draw INT DEFAULT 0,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 14:45:25