如何通过CodeIgniter Rest API向MySQL插入多行动态表单数据
嘿,我来帮你搞定这个批量插入的问题!你现在能处理单条记录插入,那批量其实就是把前端动态生成的所有输入行数据打包传给后端,然后后端一次性执行批量插入操作就行,分前端和后端两部分来实现:
前端部分:确保动态生成的输入框能被批量识别
首先,你需要把所有输入框的name属性设置成数组格式,这样提交时浏览器会自动把同name的所有值打包成数组传给后端。比如:
<!-- 表单容器 --> <form class="form-container" method="POST" action="your-backend-script.php"> <!-- 初始表单行 --> <div class="form-row"> <input type="text" name="product_name[]" placeholder="产品名称" required> <input type="number" name="product_price[]" placeholder="产品价格" required> </div> <button type="button" id="add-row">添加新行</button> <button type="submit">提交所有数据</button> </form>
然后写JS逻辑,点击添加按钮时追加的新行,输入框的name也要保持数组格式:
document.getElementById('add-row').addEventListener('click', function() { const formContainer = document.querySelector('.form-container'); const newRow = document.createElement('div'); newRow.className = 'form-row'; newRow.innerHTML = ` <input type="text" name="product_name[]" placeholder="产品名称" required> <input type="number" name="product_price[]" placeholder="产品价格" required> `; formContainer.insertBefore(newRow, document.querySelector('button[type="submit"]')); });
这样不管你加多少行,提交时product_name[]和product_price[]都会是包含所有输入值的数组。
后端部分:接收数组并批量插入MySQL
这里以PHP为例(用其他语言思路完全一致),核心是用MySQL的批量插入语法,同时用预处理语句防止SQL注入:
// 连接数据库(推荐用PDO,更安全灵活) try { $pdo = new PDO('mysql:host=localhost;dbname=your_database_name', 'your_username', 'your_password'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e) { die("数据库连接失败: " . $e->getMessage()); } // 接收前端传来的数组 $productNames = $_POST['product_name'] ?? []; $productPrices = $_POST['product_price'] ?? []; // 准备批量插入的SQL模板和参数 $sqlTemplate = "INSERT INTO products (name, price) VALUES "; $placeholders = []; $params = []; // 遍历所有行,生成占位符和对应参数 foreach ($productNames as $index => $name) { $price = $productPrices[$index] ?? ''; // 跳过空行(可选,根据你的业务需求调整) if (empty(trim($name)) || empty(trim($price))) continue; $placeholders[] = "(?, ?)"; $params[] = trim($name); $params[] = floatval($price); } // 有数据才执行插入 if (!empty($placeholders)) { $sql = $sqlTemplate . implode(', ', $placeholders); $stmt = $pdo->prepare($sql); $stmt->execute($params); echo "成功插入 " . $stmt->rowCount() . " 条记录"; } else { echo "没有可插入的有效数据"; }
几个关键提醒:
- 必须用预处理语句(上面的PDO写法),绝对不能直接把用户输入拼到SQL里,防止SQL注入攻击。
- 可以在前端加提交前验证,比如检查每一行的必填项是否填写完整,避免无效提交。
- 如果想用AJAX异步提交,逻辑和表单提交一致,用
FormData对象打包数据即可:document.querySelector('form').addEventListener('submit', function(e) { e.preventDefault(); const formData = new FormData(this); fetch('your-backend-script.php', { method: 'POST', body: formData }).then(res => res.text()).then(msg => { alert(msg); // 提交成功后可以重置表单或移除已提交的行 }); });
这样就能完美处理动态添加的多行数据批量插入啦!
内容的提问来源于stack exchange,提问作者B. Jayshri
相关产品推荐
相关产品推荐

