【发布时间】:2011-01-26 20:21:03
【问题描述】:
我有一张名为 fruits 的桌子:
id 水果 1 苹果 1 香蕉 2 苹果 2 苹果 2梨
我希望能够使用 PHP 一次添加多行。
我尝试有两组两个文本框(用于 id 和水果),但只插入 1 行,使用最后一组文本框。
编辑:
如果我有这样的表怎么办:
id 水果口味 1苹果好 1 香蕉 好的 2苹果好 2苹果坏 2梨好
【问题讨论】:
我有一张名为 fruits 的桌子:
id 水果 1 苹果 1 香蕉 2 苹果 2 苹果 2梨
我希望能够使用 PHP 一次添加多行。
我尝试有两组两个文本框(用于 id 和水果),但只插入 1 行,使用最后一组文本框。
编辑:
如果我有这样的表怎么办:
id 水果口味 1苹果好 1 香蕉 好的 2苹果好 2苹果坏 2梨好
【问题讨论】:
您需要使用方括号[] 正确命名您的文本框以形成一个数组,然后循环遍历您的 POST 数组以插入数据。在使用 mysql_real_escape_string 或准备好的查询运行查询之前,请确保您正在转义数据。
编辑:更新示例,因为 OP 将信息附加到问题中。
在您提供的扩展示例中,taste 似乎只有几个选择。在这种情况下,我会在文本框上使用 <select> 元素。查看我的示例,了解我个人将如何做到这一点。
表格
显着变化:使用 PHP 中的简单循环,您可以指定要显示的字段数,并轻松地将其他选项添加到口味选择框。我在[] 中放置了一个任意数字,以确保我们在处理表单时将水果与味道联系起来。
<?php
$n = 5; //Number of fields to show
$tastes = array('Great', 'Good', 'Okay', 'Bad', 'Horrible');
for($i=0;$i<$n;$i++) {
echo '<p>';
echo '<input type="text" name="fruit['.$i.']" /> ';
echo '<select name="taste['.$i.']">';
foreach($tastes as $t) {
echo '<option value="'.htmlentities($t).'">'.$t.'</option>';
}
echo '</select>';
echo '</p>';
}
echo '<input type="submit" name="submit" value="Submit" />';
?>
流程代码
显着变化:我正在检查以确保水果具有价值,否则它不会插入。我正在使用该任意值(即数组键$k)来选择与水果相匹配的味道。
<?php
if($_POST['submit']) {
foreach($_POST['fruit'] as $k => $v) {
if(!empty($v)) {
$query = "INSERT INTO fruits (fruit, taste) VALUE ('".mysql_real_escape_string($v)."', '".mysql_real_escape_string($_POST['taste'][$k])."')";
mysql_query($query);
}
}
}
?>
【讨论】:
使用 implode 函数进行单次插入。
你的 HTML
<input type="text" name="fruit[]" />
<input type="text" name="fruit[]" />
<input type="text" name="fruit[]" />
你的 PHP
foreach($_POST['fruit'] as $fruit) $values[] = "('".mysql_real_escape_string($fruit)."')";
if(count($values) > 0) mysql_query("INSERT INTO fruits (fruitName) VALUES " . implode(',', $values));
【讨论】:
MySQL 支持在单个查询中进行多次插入:
INSERT INTO table (field1, field2) VALUES (values1a, values2a), (values1b, values2b), etc...
【讨论】:
例如,您可以制作一个 html 元素数组
在html中
<form action='save.php' method='post'/>
<input name='fruits[]' value='' />
<input name='fruits[]' value='' />
<input name='fruits[]' value='' />
</form>
然后在save.php中
$fruits = '';
foreach($_POST['fruits'] as $fruit) {
$fruits .= "({$fruit}),"
}
$fruits = rtrim($fruits,',');
$sql = "INSERT INTO fruits(fruit) VALUES {$fruits}";
【讨论】:
在您的插入语句中添加值,如下所示:
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
你的例子,
INSERT INTO fruits (fruit) VALUES ('Orange'),('Lemon'),('Lime');
应该可以。
【讨论】: