【问题标题】:Multiple checkboxes to post in a database [closed]要在数据库中发布的多个复选框[关闭]
【发布时间】:2013-06-24 18:27:07
【问题描述】:

我创建了一个带有多个复选框的 html 页面。

<input type="checkbox" name="option_one" value="YES" class='checkbox_divs' >Option one<br>
<input type="checkbox" name="option_two" value="YES" class='checkbox_divs' >Option two<br>
<input type="checkbox" name="option_three" value="YES" class='checkbox_divs' >Option Three<br>

用户提交它,然后调用一个 php 页面以这种方式将其发送到 SQL 数据库:

$strSQL = "INSERT INTO CLDETAILS (option_one, option_two, option_three)
VALUES
('$_POST[option_one]','$_POST[option_two]','$_POST[option_three]')";   
if (sqlsrv_query($conn,$strSQL))
  {
    echo "Saved !";
  }
else  
{  
  echo "Error Save [".$strSQL."]";
  print_r( sqlsrv_errors());
}  
?>

一切正常,只是我想改进我的代码并避免出现“注意:未定义索引:...”之类的错误。 我知道我应该使用“isset”,但我从 PHP 开始,我真的不知道应该如何使用它。 感谢您的帮助。

【问题讨论】:

  • 我认为你的主要困难是你不确定how to prevent SQL injection in PHP?
  • 你应该提到你的主要观点。如果选中,您似乎想要添加所有选项,但是如果只选中一个,您想要添加什么?
  • 您不需要 isset(请参阅我的回答),但如果您真的想上网,您应该转义字符串以避免被黑客入侵。 php.net/manual/en/security.database.sql-injection.php
  • 你的答案包括 isset
  • 我的答案其实是两个答案。第一个版本使用 isset,第二个使用隐藏字段

标签: php sql checkbox


【解决方案1】:

我在这里改进了你的代码

$opt1 = (isset($_POST['option_one'])) ? 1 : 0;
$opt2 = (isset($_POST['option_two'])) ? 1 : 0;
$opt3 = (isset($_POST['option_three'])) ? 1 : 0;
$strSQL = "INSERT INTO CLDETAILS (option_one, option_two, option_three)
VALUES ('$opt1', '$opt2', '$opt3')";   
if (sqlsrv_query($conn,$strSQL)) echo "Saved !";
else  
{  
  echo "Error Save [".$strSQL."]";
  print_r( sqlsrv_errors());
}  
?>

【讨论】:

    【解决方案2】:

    你可以这样使用它

    if(!isset($_POST['option_one'])) 
        $_POST['option_one'] = 'NO';
    

    还要确保在将数据插入数据库之前解析数据以避免 sql 注入,我建议您使用 mysqli 或 pdo

    【讨论】:

      【解决方案3】:

      试试这个,

      $opt1 = isset($_POST[option_one]) ? $_POST[option_one] : 'NO';
      $opt2 = isset($_POST[option_two]) ? $_POST[option_two] : 'NO';
      $opt3 = isset($_POST[option_three]) ? $_POST[option_three] : 'NO';
      $strSQL = "INSERT INTO CLDETAILS (option_one, option_two, option_three)
      VALUES
      ('".$opt1."','".$opt2."','".$opt3."')";   
      if (sqlsrv_query($conn,$strSQL))
        {
          echo "Saved !";
        }
      else  
      {  
        echo "Error Save [".$strSQL."]";
        print_r( sqlsrv_errors());
      }
      

      【讨论】:

        【解决方案4】:
        $option = array();
        $option[0] = (isset($_POST[option_one])? $_POST[option_one] : NULL);
        $option[1] = (isset($_POST[option_two])? $_POST[option_two] : NULL);
        $option[2] = (isset($_POST[option_three])? $_POST[option_three] : NULL);
        
        $strSQL = "INSERT INTO CLDETAILS (option_one, option_two, option_three)
        VALUES
        ('$option[0], $option[1], $option[2]')";
        

        添加与复选框字段同名的隐藏字段,为未选中字段设置标准值

        <input type="hidden" name="option_one" value="NO" >
        <input type="checkbox" name="option_two" value="YES" class='checkbox_divs' >Option one<br>
        <input type="hidden" name="option_one" value="NO" >
        <input type="checkbox" name="option_two" value="YES" class='checkbox_divs' >Option two<br>
        <input type="hidden" name="option_three" value="NO" >
        <input type="checkbox" name="option_three" value="YES" class='checkbox_divs' >Option Three<br>
        

        【讨论】:

          猜你喜欢
          • 2018-11-26
          • 2019-08-13
          • 1970-01-01
          • 2013-08-09
          • 2020-11-09
          • 2010-12-06
          • 1970-01-01
          • 1970-01-01
          • 2014-03-10
          相关资源
          最近更新 更多