示例:当用户选择第一行和第五行的选择框时,只有这两行应该插入到mysql中,而不是这5行插入空值仍保留数据也插入。请帮忙
<form action="array-act.php" method="post">
<table width="500" border="0">
<tr>
<td><input name="name[]" value="One" type="text" /></td>
<td><input name="marks[]" type="text" /></td>
<td><input name="grade[]" type="text" /></td>
<td><select name="first[]"><option value="">Select</option><option value="SM">SM</option><option value="QB">QB</option></select></td>
</tr>
<tr>
<td><input name="name[]" value="Two" type="text" /></td>
<td><input name="marks[]" type="text" /></td>
<td><input name="grade[]" type="text" /></td>
<td><select name="first[]"><option value="">Select</option><option value="SM">SM</option><option value="QB">QB</option></select></td>
</tr>
<tr>
<td><input name="name[]" value="Three" type="text" /></td>
<td><input name="marks[]" type="text" /></td>
<td><input name="grade[]" type="text" /></td>
<td><select name="first[]"><option value="">Select</option><option value="SM">SM</option><option value="QB">QB</option></select></td>
</tr>
<tr>
<td><input name="name[]" value="Four" type="text" /></td>
<td><input name="marks[]" type="text" /></td>
<td><input name="grade[]" type="text" /></td>
<td><select name="first[]"><option value="">Select</option><option value="SM">SM</option><option value="QB">QB</option></select></td>
</tr>
<tr>
<td><input name="name[]" value="Five" type="text" /></td>
<td><input name="marks[]" type="text" /></td>
<td><input name="grade[]" type="text" /></td>
<td><select name="first[]"><option value="">Select</option><option value="SM">SM</option><option value="QB">QB</option></select></td>
</tr>
</table>
<input name="Go" type="submit" />
</form>
<?php
$name = $_POST['name'];
$marks = $_POST['marks'];
$grade = $_POST['grade'];
$option = array_values(array_filter($_POST['first']));
$n = count($option);
for ($i = 0; $i < $n; $i++)
{
$query = "INSERT INTO `table` (`name`, `marks`, `grade`, `option`)
VALUES ('$name[$i]', '$marks[$i]', '$grade[$i]', '$option[$i]')";
// Here you must execute your query
$result = mysql_query($query) or die('Failed to connect to server: ' . mysql_error());
}
if($result)
{
echo "Data Inserted";
}
else
{
echo "Data Not Inserted";
}
?>
答案 0 :(得分:0)
我认为你应该为每行元素的name属性赋予数字
<td><input name="name[1]" value="One" type="text" /></td>
<td><input name="marks[1]" type="text" /></td>
<td><input name="grade[1]" type="text" /></td>
<td><select name="first[1]"><option value="">Select</option><option value="SM">SM</option><option value="QB">QB</option></select></td>
等等。
这可以解决您的问题。现在每个选项列表都有相同的名称,因此只返回一个。
答案 1 :(得分:0)
虽然我看不出原始代码有什么问题,但请尝试以下方法:
$name = $_POST['name'];
$marks = $_POST['marks'];
$grade = $_POST['grade'];
$first = $_POST['first'];
array_walk($first, 'insert');
function insert($v, $i) {
if ($v !== "") {
$query = "INSERT INTO `table` (`name`, `marks`, `grade`, `option`) VALUES ('$name[$i]', '$marks[$i]', '$grade[$i]', '$option[$i]')";
$result = mysql_query($query) or die('Failed to connect to server: ' . mysql_error());
if($result) {
echo "Data Inserted";
} else {
echo "Data Not Inserted";
}
}
}
答案 2 :(得分:0)
代码是正确的。唯一的问题是:
$option = array_values(array_filter($_POST['first']));
这里它丢失了密钥索引并重新索引它。这是由于array_values
。