Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.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 在数据库插入的POST数组中循环_Php_Mysql - Fatal编程技术网

Php 在数据库插入的POST数组中循环

Php 在数据库插入的POST数组中循环,php,mysql,Php,Mysql,我正在尝试创建一个具有多个复选框的表单,将每个复选框的值输入mySQL数据库上的saeparate行 这是我的HTML: <form action="testsent.php" method="post" novalidate> <div id="currentWork"> <label for="currentWork">Mark all that apply.</label><br> <input type="chec

我正在尝试创建一个具有多个复选框的表单,将每个复选框的值输入mySQL数据库上的saeparate行

这是我的HTML:

<form action="testsent.php" method="post" novalidate>
  <div id="currentWork">
<label for="currentWork">Mark all that apply.</label><br>
  <input type="checkbox" name="chk1[]" value="Bernards Township">Bernards Library<br>
  <input type="checkbox" name="chk1[]" value="Boonton Holmes">Boonton Library<br>
  <input type="checkbox" name="chk1[]" value="Butler">Butler Library<br>
  <input type="checkbox" name="chk1[]" value="Chatham">Chathams Library<br>
  <input type="checkbox" name="chk1[]" value="Chester">Chester Library<br>
  <input type="checkbox" name="chk1[]" value="Denville">Denville Library<br>
  <input type="checkbox" name="chk1[]" value="Dover">Dover Library<br>
  <input type="checkbox" name="chk1[]" value="East Hanover">East Hanover Library<br>
</div>
<input type="Submit" value="Submit" name="Submit"/>
</div>
</form>
这是有效的,除了它只输入最后检查的项目。如果选中Boonton以及Chester和Denville,则只会在表单中输入“Denville”

我认为使用foreach循环将遍历复选框,但我不确定哪里出错。我没有收到任何错误消息。我已经点击了在stackoverflow上搜索这个问题时出现的每个链接。问题是,似乎有很多不同的方法来实现这一点,而这些问题中的大多数都被标记为信息不足或过于笼统


如果有任何额外的信息,你需要,以帮助我解决这个问题,我将很高兴提供它!我没有隐瞒什么。谢谢

您正在循环外写入数据库。因此,唯一写入的值是经过循环的最后一个值。将插入移动到循环中

if(!empty($_POST['chk1'])) {
    foreach($_POST['chk1'] as $check) {
        //echo $check;
        $sql="INSERT INTO $usertable (library) VALUES ('.$check.')";
        mysqli_query($link, $sql);
    }
}
您需要做的是使用准备好的语句来清理用户数据。由于查询只发送到数据库一次,因此这也将更加高效:

if (!empty($_POST["chk1"])) {
    $stmt = $mysqli->prepare("INSERT INTO $usertable (library) VALUES ?");
    $stmt->bind_param("s", $check);
    foreach($_POST['chk1'] as $check) {
        $stmt->execute();
    }
    $stmt->close();
}

您正在循环外写入数据库。因此,唯一写入的值是经过循环的最后一个值。将插入移动到循环中

if(!empty($_POST['chk1'])) {
    foreach($_POST['chk1'] as $check) {
        //echo $check;
        $sql="INSERT INTO $usertable (library) VALUES ('.$check.')";
        mysqli_query($link, $sql);
    }
}
您需要做的是使用准备好的语句来清理用户数据。由于查询只发送到数据库一次,因此这也将更加高效:

if (!empty($_POST["chk1"])) {
    $stmt = $mysqli->prepare("INSERT INTO $usertable (library) VALUES ?");
    $stmt->bind_param("s", $check);
    foreach($_POST['chk1'] as $check) {
        $stmt->execute();
    }
    $stmt->close();
}


首先,您没有向数据库写入任何内容。其次,将用户提供的数据转储到SQL查询中。被黑客攻击的好方法!我没有看到
element@miken32但我必须写些什么,因为当我提交表单时,我的数据库中的“库”列下确实出现了一个值。@ryantxr是的,我省略了该部分,我现在可以将其添加到原始帖子中。您正在循环之外向数据库写入内容。因此,您只插入最后一个。在循环中移动
mysqli\u查询($link,$sql)
。其次,将用户提供的数据转储到SQL查询中。被黑客攻击的好方法!我没有看到
element@miken32但我必须写些什么,因为当我提交表单时,我的数据库中的“库”列下确实出现了一个值。@ryantxr是的,我省略了该部分,我现在可以将其添加到原始帖子中。您正在循环之外向数据库写入内容。因此,您只插入最后一个。在循环中移动
mysqli\u查询($link,$sql)
。这正是我想要的。感谢您提供有关清理用户数据的信息。输入像“.Denville.”一样,两边都有句点。我尝试了第二个代码,经过消毒的代码,我得到了一个错误:“在第29行的/home/mainlib/public_html/subs/testsent.php中调用null上的成员函数prepare(),当然你需要确保
$mysqli
是正确初始化的mysqli连接。哦,我明白了,换句话说,一切都应该匹配。这很有道理!非常感谢,我真的很感激。我在一家小企业工作,几乎没有培训员工的资源,我愿意学习收集和分析数据,这对我学习书籍/在线课程有很大帮助。问题似乎是这样的:“$stmt->bind_param”($s“,$check);”我已检查语句是否已初始化。还是个错误。但未经消毒的版本运行良好,没有任何更改,这怎么可能?抱歉再次评论-无法编辑我的原始版本。与“工作”代码和“净化”代码唯一不同的是,值为“?”,这是对foreach循环的调用,对吗?这可能与表单将未检查的复选框提交为false有关吗?即使我选中每个框,我也会得到相同的错误。这正是我要找的。感谢您提供有关清理用户数据的信息。输入像“.Denville.”一样,两边都有句点。我尝试了第二个代码,经过消毒的代码,我得到了一个错误:“在第29行的/home/mainlib/public_html/subs/testsent.php中调用null上的成员函数prepare(),当然你需要确保
$mysqli
是正确初始化的mysqli连接。哦,我明白了,换句话说,一切都应该匹配。这很有道理!非常感谢,我真的很感激。我在一家小企业工作,几乎没有培训员工的资源,我愿意学习收集和分析数据,这对我学习书籍/在线课程有很大帮助。问题似乎是这样的:“$stmt->bind_param”($s“,$check);”我已检查语句是否已初始化。还是个错误。但未经消毒的版本运行良好,没有任何更改,这怎么可能?抱歉再次评论-无法编辑我的原始版本。与“工作”代码和“净化”代码唯一不同的是,值为“?”,这是对foreach循环的调用,对吗?这可能与表单将未检查的复选框提交为false有关吗?即使我选中每个框,也会得到相同的错误。