Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php数组过滤器数据插入mysql_Php_Mysql_Insert - Fatal编程技术网

php数组过滤器数据插入mysql

php数组过滤器数据插入mysql,php,mysql,insert,Php,Mysql,Insert,我已经准备好了下面的表单,我需要通过这个表单将数据插入mysql,但问题是当我尝试插入数组时,过滤器给出了问题。我只需要选择框值数据到mysql 示例:当用户选择select box第1行和第5行时,只有这两行应该插入mysql,而不是这5行插入空值,保留数据也插入。请帮忙 <form action="array-act.php" method="post"> <table width="500" border="0"> <tr> <td><

我已经准备好了下面的表单,我需要通过这个表单将数据插入mysql,但问题是当我尝试插入数组时,过滤器给出了问题。我只需要选择框值数据到mysql

示例:当用户选择select box第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";
}
?>

选择SMQB
选择SMQB
选择SMQB
选择SMQB
选择SMQB

我认为您应该为每行元素的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>

选择SMQB
等等


那会解决你的问题。现在,每个选项列表都有相同的名称,因此只应返回一个。

虽然我看不出您的原始代码有任何错误,但请尝试以下操作:

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

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

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

在这里,它放松了关键索引并对其重新索引。这是由于
array\u值

我看不出该代码有任何错误。您能否
var\u dump($\u POST)
并显示输出?最好在过滤之前过滤一次,然后再过滤一次。尝试不工作时,当我输入所有字段数据时,它工作,但当我只输入第一行和最后一行数据时,它不工作。然后在主循环中,您应该检查所有值是否存在。如果缺少一个,请不要执行查询。插入数据时,它是按顺序进行的。怎么可能?代码错了。您应该解析整个数组,并检查要添加到数据库的条目的
first
值。您能告诉我如何重新索引它吗您不应该使用$option=array\u值中的array\u值(array\u filter($\u POST['first'])@BolemVeeru它确实有效,我已经测试过了。它不起作用的唯一原因是如果您的
$\u POST['first']
数组不是空字符串。您需要
var\u dump($\u POST['first'])
并显示输出。