Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.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
Javascript 在mysql数据库中插入下拉多个复选框_Javascript_Php - Fatal编程技术网

Javascript 在mysql数据库中插入下拉多个复选框

Javascript 在mysql数据库中插入下拉多个复选框,javascript,php,Javascript,Php,我有一个register.php,我正在尝试将数据插入到users表中。我的问题是“语言”字段-我创建了一个带有多个复选框的下拉列表。当然,我希望用户能够在他的个人资料中插入他所说的多种语言。以下是注册表格的一部分: <script type="text/javascript"> var expanded = false; function showCheckboxes() { var checkboxes = docume

我有一个register.php,我正在尝试将数据插入到users表中。我的问题是“语言”字段-我创建了一个带有多个复选框的下拉列表。当然,我希望用户能够在他的个人资料中插入他所说的多种语言。以下是注册表格的一部分:

 <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
      属性,删除此属性不会对代码产生任何影响

    • <不确定为什么使用代码< >代码> >代码> > P>,在你的方法中有两件事需要考虑:

    • 为了让PHP访问您的值,每个复选框都需要一个名称和一个值
    • 在PHP中从
      $\u POST
      读取值时,需要以某种方式解释数组
    • 第1部分:让PHP可以访问它们 要向服务器传达您希望复选框被解释为一系列选项的信息,标准是给它们一个名称,后跟方括号:
      []

      我所做的是将
      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中从
      $\u POST
      读取值时,需要以某种方式解释数组
    • 第1部分:让PHP可以访问它们 要向服务器传达您希望复选框被解释为一系列选项的信息,标准是给它们一个名称,后跟方括号:
      []

      我所做的是将
      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']
      组合成一个字符串,与您要查找的字符串非常相似,例如
      德语、英语、法语


      考虑添加一些逻辑来检查意外或无效的值,包括空数组。

      没有
      name=“”的输入字段
      属性不会被发送到PHP脚本!在
      标签
      字段中插入
      输入
      ?可能不是编写这段代码的最佳方式。我看不出有什么问题,如果将
      英语、德语等值插入数据库,您可以轻松地