【问题标题】:php array filter data insertion to mysqlphp数组过滤数据插入到mysql
【发布时间】:2013-07-17 01:21:31
【问题描述】:

我准备了下面的表格,我需要通过这个表格向 mysql 插入数据,但问题是当我尝试插入 array_filter 时会出现问题。我只需要选择框值数据到 mysql。

示例:当用户选择选择框的第 1 行和第 5 行时,只有这两行应该插入到 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";
}
?>

【问题讨论】:

  • 我看不出该代码有什么问题。你能var_dump($_POST) 并显示输出吗?最好在过滤之前一次,然后再过滤一次。

标签: php mysql insert


【解决方案1】:

我认为你应该给每行元素的名称属性数字

<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>

等等。

这将解决您的问题。现在每个选项列表都有相同的名称,所以应该只返回一个。

【讨论】:

  • 不工作尝试,当我输入所有字段数据时它工作但当我只输入数据到第一行和最后一行时它不工作。
  • 那么在你的主循环中你应该检查所有值是否存在。如果缺少一个,请不要执行查询。
  • 插入数据时按顺序排列。怎么可能?
  • 代码错误。您应该解析整个数组并检查要添加到数据库中的条目的 first 值。
【解决方案2】:

虽然我看不出你的原始代码有什么问题,但试试这个:

$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";
        }
    }
}

【讨论】:

  • @BolemVeeru 它确实有效,我已经测试过了。它不起作用的唯一原因是您的 $_POST['first'] 数组不是空字符串。您需要var_dump($_POST['first']) 并显示输出。
【解决方案3】:

代码是正确的。唯一的问题是:

 $option = array_values(array_filter($_POST['first']));

在这里它会丢失关键索引并重新索引它。这是由于array_values

【讨论】:

  • 你能告诉我如何重新索引它
  • 你不应该在 $option = array_values(array_filter($_POST['first'])); 中使用 array_values;
猜你喜欢
  • 2014-03-27
  • 2014-06-16
  • 2019-06-17
  • 1970-01-01
  • 1970-01-01
  • 2015-10-11
  • 2016-05-26
  • 1970-01-01
  • 2014-12-02
相关资源
最近更新 更多