【发布时间】:2020-05-25 16:56:17
【问题描述】:
我正在尝试使用 HTML 表单创建一个网页,其中包括多个复选框及其各自的值。
我想创建一个布尔数组,它将数据发送到 SQL 服务器,换句话说,我想将复选框上的值分配给数据库中的几列。但是,即使我检查了复选框上的某些值,数据库中的值也始终为 0 或 false。
在调试时,我发现 $_POST["lang_list"] 有效,因此,我认为问题一定出在 foreach 循环中。
我是 PHP 和 SQL 的新手,所以我完全知道我的解决方案可能很糟糕。
HTML:
<div class="form-group>
<div class="custom-checkbox">
<input class="custom-control-input" name="lang_list[]" id="nj" type="checkbox" value="nj">
<label class="custom-control-label" for="nj">NJ</label>
</div>
<div class="custom-checkbox">
<input class="custom-control-input" name="lang_list[]" id="aj" type="checkbox" value="aj">
<label class="custom-control-label" for="aj">AJ</label>
</div>
<div class="custom-checkbox">
<input class="custom-control-input" name="lang_list[]" id="fj" type="checkbox" value="fj">
<label class="custom-control-label" for="fj">FJ</label>
</div>
</div>
PHP:
<?php
require_once("config.php");
if (!empty($_POST['lang_list']))
{
$checkboxes = $conn->real_escape_string($_POST['lang_list']);
$bool_arr = array();
$check_arr = array("aj","nj","fj");
foreach ($check as $check_arr)
{
array_push($bool_arr, in_array($check, $checkboxes) ? 1 : 0);
}
list ($aj, $nj, $fj) = $lang_bool;
$sql = "INSERT INTO signups (aj, nj, fj) VALUES ('".$nj."', '".$aj."', '".$fj."')";
if (!$result = $conn->query($sql))
{
die('There was an error running the query ['.$conn->error.']');
}
else
{
echo "Thank you! We will contact you soon";
}
}
else
{
echo "Please fill Name and Email";
}
?>
有人可以帮助我吗?谢谢
【问题讨论】:
-
foreach ($check as $check_arr)应该是foreach ($check_arr as $check) -
$_POST['lang_list']是一个数组,因此尝试在其上使用real_escape_string毫无意义。 -
警告:您的代码容易受到 SQL 注入攻击。您应该使用参数化查询和准备好的语句来帮助防止攻击者通过使用恶意输入值来破坏您的数据库。 bobby-tables.com 给出了风险解释,以及如何使用 PHP / mysqli 安全地编写查询的一些示例。 切勿将未经处理的数据直接插入您的 SQL。按照您现在编写代码的方式,有人可以轻松窃取、错误更改甚至删除您的数据。 (如前所述,您对 real_escape_string 的使用毫无意义)
-
$lang_bool来自哪里?
标签: php html sql database forms