【问题标题】:How do you store zero in MySQL你如何在 MySQL 中存储零
【发布时间】:2013-01-11 03:57:25
【问题描述】:

这似乎应该是一个简单的,但我已经搜索过,似乎无法弄清楚。我正在使用 PHP 更新 MySQL 数据库,该数据库将一些字段设置为布尔开关。网站上的触发器是一个复选框。当用户选中该框时,该值设置为 1,未选中时,该值为零。问题是,当我发送表单时,设置复选框时数据库更新正常,但是它不会将字段的值更新为零,它只是忽略它。我在未设置时回显了该值,以验证该变量是否确实设置为零。当我尝试清除文本框并且什么都不发送时,我发现了类似的问题。 MySQL 只是忽略它并且不会清除该字段。我错过了什么吗?

这是我正在使用的代码示例:

<?php
if ($_POST) {   
    if (isset($_POST['box1'])) {
        $box1 = $_POST['box1'];
    }
    else {
        $box1 = 0;
    }
    $query = "UPDATE table SET box1 = '{$box1}'";
    $result = mysqli_query($dbc, $query);
}
    ?>

<form method="post" action="">
    <input type="checkbox" name="box1"> Box 1
</form>

【问题讨论】:

  • echo $query; 的结果是什么?
  • 你确定你没有错过WHERE吗?
  • 复选框上的value 属性在哪里?
  • 不要在生产代码中使用这样的查询,它非常容易受到 SQL 注入攻击。攻击者可以将参数box1 设置为他们喜欢的任何值,然后将其放入查询中。
  • 另外,我认为这些值设置为on 和` `(空)

标签: php html mysql post checkbox


【解决方案1】:

&lt;input type="checkbox" name="box1"&gt;

应该是

&lt;input type="checkbox" name="box1" value="1"&gt;

您的数据库中box1 的数据类型应该是INT,所以即使它没有设置为0,它仍然会以0 保存,因为您根本无法在字段中存储任何内容INT 作为数据类型。

【讨论】:

  • 这没有回答问题。 OP 声明他的复选框的值为 1。他的逻辑声明 0 为一个空框。
  • 我提供了一个有效的答案。 OP说:当用户选中该框时,该值设置为1,当未选中时,该值为零
  • 您是否错过了上面 OP 的评论? sorry I forgot to include value="1" in the original checkbox code
  • 太好了。如果列是INT,则将值设置为空或空将默认为0。我要说的是,它不必设置为0.. 除非它不是INT。
  • 我有,我也通过将零设置为 2 并使用值 2 表示关闭状态来检查它,这很好,所以我回到认为它是 MYSQL 处理的方式零?
【解决方案2】:

目前,如果没有在数组中传递任何值,则不会发生任何操作。

考虑以下...

...
$box1=0;

if ($_POST) {
    if (isset($_POST['box1'])) {
        $box1 = $_POST['box1'];
    }
}
    $query = "UPDATE boxtest SET box1 = $box1";
    $result = mysqli_query($dbc,$query);
    ?>

<form method="post" action=""/>
    <input type="checkbox" name="box1" value="1"/> Box 1
    <input type="submit"/>
</form>

或者(根据我之前的评论)

<input type="hidden" name="box1" value="0" />
<input type="checkbox" name="box1" value="1"/>

【讨论】:

    猜你喜欢
    • 2022-11-26
    • 2014-03-29
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 2013-07-03
    相关资源
    最近更新 更多