我正在尝试创建一个具有多个复选框的表单,将每个选中的复选框的值输入到mySQL数据库的单独行中。
这是我的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>
这是我的PHP:
if(!empty($_POST['chk1'])) {
foreach($_POST['chk1'] as $check) {
//echo $check;
$sql="INSERT INTO $usertable (library) VALUES ('.$check.')";
}
}
if(mysqli_query($link, $sql))
{
echo 'Thanks for submitting';
}
else {
echo 'ERROR: Could not execute $sql.' . mysqli_error($link);
}
这很工作,只是它仅输入检查的最终项目。如果同时选中了Boonton,Chester和Denville,则只会在表格中输入“ Denville”。
我认为有一个foreach循环会遍历复选框,但是我不确定我要去哪里。我没有收到任何错误消息。当我在stackoverflow上搜索此问题时,我单击了出现的每个链接。问题在于,完成这项工作的方式似乎太多了,而且这些问题中的大多数都被标记为信息不足或过于笼统。
如果您需要任何其他信息来帮助我解决此问题,我们将很乐意提供!我没有退缩。谢谢!
答案 0 :(得分:1)
您正在循环外写入数据库。因此,唯一写入的值是经过循环的最后一个值。将您的插入内容移入循环。
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 ?");
foreach($_POST['chk1'] as $check) {
$stmt->bind_param("s", $check);
$stmt->execute();
}
$stmt->close();
}