【发布时间】:2017-04-25 16:31:42
【问题描述】:
我有一个 register.php,我正在尝试将数据插入用户表中。我遇到的问题是“语言”字段 - 我创建了一个带有多个复选框的下拉列表。我当然希望用户能够在他的个人资料中插入他说的一种以上的语言。这是注册表的一部分:
<script type="text/javascript">
var expanded = false;
function showCheckboxes() {
var checkboxes = document.getElementById("checkboxes");
if (!expanded) {
checkboxes.style.display = "block";
expanded = true;
} else {
checkboxes.style.display = "none";
expanded = false;
}
}
</script>
<tr>
<td>Languages</td>
<td dir="rtl">
<div class="multiselect" dir="rtl">
<div class="selectBox" onclick="showCheckboxes()" dir="rtl">
<select>
<option>Select an language</option>
</select>
<div class="overSelect" dir="rtl"></div>
</div>
<div id="checkboxes" name="languages">
<label for="one">
<input type="checkbox" id="one" />German</label>
<label for="two">
<input type="checkbox" id="two" />English</label>
<label for="three">
<input type="checkbox" id="three" />French</label>
</div>
</div>
</td>
</tr>
现在 - 这是我将注册表单插入数据库中的用户表的查询[代码的相关部分,其他部分工作正常]:
$languages= mysqli_real_escape_string($db, $_POST['languages']);
$sql="INSERT INTO users(
....
languages,
)
VALUES(...
'$languages',
)";
mysqli_query($db,$sql);
如果例如用户将复选框标记为“english”和“german”,那么插入数据的正确方法是什么,那么数据库中的语言字段将是这样的:“german,english”?至少目前没有插入任何内容。
更新:根据这里的答案,我写了这个:
<td>Languages</td>
<td dir="rtl">
<div class="multiselect" dir="rtl">
<div class="selectBox" onclick="showCheckboxes()" dir="rtl">
<select>
<option>Select an option</option>
</select>
<div class="overSelect" dir="rtl"></div>
</div>
<div id="checkboxes">
<label for="one">
<input type="checkbox" id="one" name="languages[]">German</label>
<label for="two">
<input type="checkbox" id="two" name="languages[]" >English</label>
<label for="three">
<input type="checkbox" id="three" name="languages[]">French</label>
</div>
</div>
</td>
还有:
$sql="INSERT INTO users(
...
languages,
...
)
VALUES(
...,
'" . implode(",", $_POST['languages']) . "',
)";
但是当我选中所有复选框时,我得到“开,开,开”或两个复选框,然后是“开,开” - 这是什么意思? 答:没关系。忘记放值字段了。
【问题讨论】:
-
没有
name=""属性的输入字段将不会被发送到 PHP 脚本! -
input在label字段中?可能不是编写那段代码的最佳方式。 -
我看不出有什么问题,如果像
english,german这样的值被插入到数据库中,您可以轻松地将其转换为数组,无论是使用 PHP -explode- 还是 JS -.split(). -
您的代码可能容易受到SQL injection attacks 的攻击。您应该使用mysqli 或PDO 准备好的语句和this post 中所述的绑定参数。
标签: javascript php