【问题标题】:Inserting checkbox entries into database将复选框条目插入数据库
【发布时间】:2013-03-25 15:39:33
【问题描述】:

我有带有名称状态的复选框。我就是这样做的:

   $_SESSION['statuses'] = mysql_real_escape_string($_POST['statuses']);

当我插入它时,我就是这样做的:

   $insert = "INSERT INTO submitted (statuses) 
   VALUES ('".$_SESSION['statuses']."')";

   $query = mysql_query($insert) or die ("Error: ".mysql_error());

问题是没有被检查的东西被插入到数据库中,那么我如何插入被检查的条目呢?

新/更新:

这是复选框表单的样子:

                    <input type="checkbox" name="statuses" value="something">
        <input type="checkbox" name="statuses" value="something">
        <input type="checkbox" name="statuses" value="something">
        <input type="checkbox" name="statuses" value="something">
        <input type="checkbox" name="statuses" value="something">
        <input type="checkbox" name="statuses" value="something">

【问题讨论】:

  • 为什么要使用SESSION 变量来执行此操作? $_POST['statuses'] 是什么?是一对一的值吗?
  • 这是一个 5 页的表单,所以我正在使用会话。 $_POST['状态'];用于复选框。
  • 所以它是向导的一部分。 name="statuses[]" 您尝试插入的值实际上是字符串还是其他类型的值(数组等)?
  • 你的标记是什么样的?

标签: php session checkbox


【解决方案1】:

也许问题可能在于您为表单编写的标记。这是和示例:

<form action="checkbox-form.php" method="post">
Select your options<br />
<input type="checkbox" name="options[]" value="A" />A<br />
<input type="checkbox" name="options[]" value="B" />B<br />
<input type="checkbox" name="options[]" value="C" />C<br />
<input type="submit" name="formSubmit" value="Submit" />
</form>

注意options 设置为options[]。这允许所有选中选项的数组出现在您的 POST 超级变量中。

如果你这样做:

var_dump($_POST['options']);

然后你应该得到一个包含所有检查值的数组。

然后你可以这样做:

foreach($_POST['options'] as &$option){
   mysql_real_escape_string($option);
}

然后插入数据库:

   $insert = "INSERT INTO submitted (statuses)       
   VALUES ('". implode(",", $_POST['options']) ."')";      

   $query = mysql_query($insert) or die ("Error: ".mysql_error());

更新: 在表单的每一页上,您应该有类似转义值并将其保存到会话中的内容。然后将每个页面的值保存到用户的会话中:

//Page 1
foreach($_POST['options'] as $option){
     $_SESSION['options'][] = mysql_real_escape_string($option);
}

//page 2
$_SESSION['SOME_OTHER_VALUE_FROM_TEXT_BOX'] = mysql_real_escape_string($_POST['SOME_OTHER_VALUE_FROM_TEXT_BOX');

//Final page:
//Everything is now stored in SESSION, so you can use them there:
//For example, display the value of options:
var_dump($_SESSION['options']); //etc

//So here, you would just run your sql queries to insert the appropriate data into your databse.

【讨论】:

  • 好吧,当我使用 var_dump 时,值会显示在下一页上。任何阻止帽子向用户展示的方法。
  • 'var_dump` 打印出值供您查看。这用于调试目的。只需删除 var_dump 行就可以了。
  • 好的一个问题,如果我选择所有选项大约有 20 个,那么它会给我一个语法检查错误,但我找不到任何错误..
  • 错误应该告诉你是哪一行导致了问题。你能发布导致错误的代码行吗?
  • @Humphrey:我建议在 PDO 中使用参数化查询,而不是转义。 :)
【解决方案2】:

这是我在插入数据库时​​用于复选框的内容。

function validateCheckBox($name) {
    if (isset($_POST[$name]) && !empty($_POST[$name]) && $_POST[$name] === 'on') {
        return 1;
    }else{
        return 0;
    }
}

【讨论】:

    【解决方案3】:

    不知道是你刚刚输入了这个,还是你不知道它在那里

    $_SESSION['SOME_OTHER_VALUE_FROM_TEXT_BOX'] = mysql_real_escape_string($_PSOT['SOME_OTHER_VALUE_FROM_TEXT_BOX');
    

    应该是

    $_SESSION['SOME_OTHER_VALUE_FROM_TEXT_BOX'] = mysql_real_escape_string($_POST['SOME_OTHER_VALUE_FROM_TEXT_BOX');
    

    【讨论】:

    • 它在问题中是正确的,在 F21 的答案中它是不正确的。评论该答案而不是发布新答案将是正确的方法。
    猜你喜欢
    • 2016-02-05
    • 1970-01-01
    • 2010-09-19
    • 2017-06-23
    相关资源
    最近更新 更多