Javascript 在mysql数据库中插入下拉多个复选框
我有一个register.php,我正在尝试将数据插入到users表中。我的问题是“语言”字段-我创建了一个带有多个复选框的下拉列表。当然,我希望用户能够在他的个人资料中插入他所说的多种语言。以下是注册表格的一部分:Javascript 在mysql数据库中插入下拉多个复选框,javascript,php,Javascript,Php,我有一个register.php,我正在尝试将数据插入到users表中。我的问题是“语言”字段-我创建了一个带有多个复选框的下拉列表。当然,我希望用户能够在他的个人资料中插入他所说的多种语言。以下是注册表格的一部分: <script type="text/javascript"> var expanded = false; function showCheckboxes() { var checkboxes = docume
<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>
插入数据的正确方法是什么?例如,如果用户将复选框标记为“英语”和“德语”,则数据库中的“语言”字段将如下所示:“德语,英语”?至少目前没有插入任何内容
更新:根据这里的答案,我写道:
<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>
但是当我勾选所有的复选框时,我得到了“on,on,on”或两个复选框,然后是“on,on”-这是什么意思?
回答:没关系。忘记输入值字段。两部分:
第1部分:更改HTML,使脚本接收$\u POST['languages']的数组
HTML应该如下所示:
<input type=checkbox name="languages[]" value="German">German
<input type=checkbox name="languages[]" value="french">french
<input type=checkbox name="languages[]" value="english">english
德语
法语
英语
第2部分:
我建议使用php函数serialize()将数组转换为字符串,而不是将逗号分隔的值存储在数据库中
例如:
$languages=序列化($_POST['languages'];
$sql=“插入用户(语言)值(“$languages”)”
另外:上述代码不安全。在存储到数据库中之前,您应该清理用户输入的内容。两部分:
$sql="INSERT INTO users(
....
languages,
)
VALUES(...
'{$selectedLanguages}',
)";
mysqli_query($db,$sql);
第1部分:更改HTML,使脚本接收$\u POST['languages']的数组
HTML应该如下所示:
<input type=checkbox name="languages[]" value="German">German
<input type=checkbox name="languages[]" value="french">french
<input type=checkbox name="languages[]" value="english">english
德语
法语
英语
第2部分:
我建议使用php函数serialize()将数组转换为字符串,而不是将逗号分隔的值存储在数据库中
例如:
$languages=序列化($_POST['languages'];
$sql=“插入用户(语言)值(“$languages”)”
另外:上面的代码不安全。在存储到数据库之前,您应该清理用户的输入。如下面的代码所示,首先将相同的'name'属性添加到所有复选框中。这样您就可以在PHP脚本中的数组中获取用户选择的所有选项
<input type="checkbox" id="one" name="language[]" />German</label>
<label for="two">
<input type="checkbox" id="two" name="language[]" />English</label>
<label for="three">
<input type="checkbox" id="three" name="language[]" />French</label>
$sql="INSERT INTO users(
....
languages,
)
VALUES(...
'{$selectedLanguages}',
)";
mysqli_query($db,$sql);
现在,要将所选语言添加到数据库中,您需要合成一个字符串,其中包含$languages数组中的所有值,因为您只有一列来存储数据库中的所有语言。您可以使用逗号作为分隔符,合成如下代码所示的字符串
$selectedLanguages = "";
foreach($languages as $value){
$selectedLanguages .= $value.',':
}
现在,您运行一个查询以在数据库中存储这些值
$sql="INSERT INTO users(
....
languages,
)
VALUES(...
'{$selectedLanguages}',
)";
mysqli_query($db,$sql);
如下面的代码所示,首先将相同的'name'属性添加到所有复选框中。这样,您就可以在PHP脚本的数组中获取用户选择的所有选项
<input type="checkbox" id="one" name="language[]" />German</label>
<label for="two">
<input type="checkbox" id="two" name="language[]" />English</label>
<label for="three">
<input type="checkbox" id="three" name="language[]" />French</label>
现在,要将所选语言添加到数据库中,您需要合成一个字符串,其中包含$languages数组中的所有值,因为您只有一列来存储数据库中的所有语言。您可以使用逗号作为分隔符,合成如下代码所示的字符串
$selectedLanguages = "";
foreach($languages as $value){
$selectedLanguages .= $value.',':
}
现在,您运行一个查询以在数据库中存储这些值
$sql="INSERT INTO users(
....
languages,
)
VALUES(...
'{$selectedLanguages}',
)";
mysqli_query($db,$sql);
您的代码几乎没有问题,例如:
- 在div元素中使用
没有任何意义。无论如何,您都没有使用此name=“languages”
属性,删除此属性不会对代码产生任何影响name
- 不确定为什么同时使用
和…
您的代码几乎没有问题,例如:
- 在div元素中使用
没有任何意义。无论如何,您都没有使用此name=“languages”
属性,删除此属性不会对代码产生任何影响name
- 为了让PHP访问您的值,每个复选框都需要一个名称和一个值
- 在PHP中从
读取值时,需要以某种方式解释数组$\u POST
第1部分:让PHP可以访问它们
要向服务器传达您希望复选框被解释为一系列选项的信息,标准是给它们一个名称,后跟方括号:
<不确定为什么使用代码< >代码> >代码> > P>,在你的方法中有两件事需要考虑:
我所做的是将[]
添加到您的输入中,将它们分组并称为语言,然后添加name=“languages[]”
为它们赋值value=“…”
此代码将把数组的所有元素<label for="one"> <input type="checkbox" id="one" name="languages[]" value="german" /> German </label> <label for="two"> <input type="checkbox" id="two" name="languages[]" value="english" /> English </label> <label for="three"> <input type="checkbox" id="three" name="languages[]" value="french" /> French </label>
组合成一个字符串,与您要查找的字符串非常相似,例如$\u POST['languages']
德语、英语、法语
考虑添加一些逻辑来检查意想不到的或无效的值,包括空数组。
< P>有两件事需要考虑:- 为了让PHP访问您的值,每个复选框都需要一个名称和一个值
- 在PHP中从
第1部分:让PHP可以访问它们 要向服务器传达您希望复选框被解释为一系列选项的信息,标准是给它们一个名称,后跟方括号:
读取值时,需要以某种方式解释数组$\u POST
我所做的是将[]
添加到您的输入中,将它们分组并称为语言,然后添加name=“languages[]”
为它们赋值value=“…”
此代码将把数组的所有元素<label for="one"> <input type="checkbox" id="one" name="languages[]" value="german" /> German </label> <label for="two"> <input type="checkbox" id="two" name="languages[]" value="english" /> English </label> <label for="three"> <input type="checkbox" id="three" name="languages[]" value="french" /> French </label>
组合成一个字符串,与您要查找的字符串非常相似,例如$\u POST['languages']
德语、英语、法语
考虑添加一些逻辑来检查意外或无效的值,包括空数组。没有
属性不会被发送到PHP脚本!在name=“”的输入字段
字段中插入标签
?可能不是编写这段代码的最佳方式。我看不出有什么问题,如果将输入
英语、德语等值插入数据库,您可以轻松地
- 在div元素中使用