【问题标题】:Trouble with checkbox, mysql, and php复选框、mysql 和 php 的问题
【发布时间】:2011-12-20 22:43:50
【问题描述】:

我正在尝试在表单上使用复选框,并希望在我的数据库中将值保存为 1 或 0。

在我的数据库中,我有一个名为“订阅”的字段,具有以下属性:

TINYING(4)
Not Null
Default value = '0'

在我的 html 表单中,我有以下内容:

<input type="checkbox" value="1" name="subscribe" checked>Subscribe to our newsletter<br />

如果表单在其默认选中状态下提交,则记录将很好地传递到数据库。

如果有人取消选中该复选框,则不会保存任何记录。

任何想法为什么会发生这种情况?需要看php帮忙吗?

谢谢你, 内森

【问题讨论】:

  • 错字? TINYING(4) 应该是:TINYINT(4)
  • 是的,这只是一个错字。对此感到抱歉。
  • 这是我正在使用的 php: $addfeedback = "INSERT INTO feedback (user, email, subscribe, cmets) VALUES('".$_POST['user']."',' ".$_POST['email']."','".$_POST['subscribe']."','".$_POST['cmets']."')"; $results = mysql_query($addfeedback);
  • 将表单数据直接传递到查询中非常糟糕。谷歌关于正确的转义和 SQL 注入。
  • 感谢血腥世界。很高兴知道这一点。我才刚刚开始,所以我想我会学习如何正确地做到这一点(更有用的是像你这样的有用技巧)——在这一点上,我仍然只是试图获得基本功能,并且很困惑为什么它不起作用。

标签: php mysql forms checkbox


【解决方案1】:

Web 浏览器不会为未选中的复选框发送键值对。 做一个print_r($_POST); 来观察这个

要么取消订阅所有已发布的订阅值,要么使用隐藏的输入字段来存储您在表单中输入的复选框值。

【讨论】:

    【解决方案2】:

    我认为您应该为此使用 BOOLEAN (TINYINT(1)) 类型,而不是 TINYINT(4)。并且不要将表单中的值直接传递到查询中。使用 if() 检查该值,并为每个自己的变量赋予查询的布尔值。像这样的:

    $subscribe = 0;
    
    if(isset($_POST['subscribe']) && $_POST['subscribe'] == "1")
      $subscribe = 1;
    
    mysql_query("... VALUES ('".$subscribed."' ...");
    

    对于有效的 XHTML,使用 checked="checked" 而不是 checked

    【讨论】:

    • 有趣。好的,这听起来是一个很好的解决方案。还要感谢有效的 XHTML 提示。但是你知道为什么记录当前没有被保存,因为我是这样做的吗?我虽然在数据库中有一个默认值 0 应该没问题。我很惊讶根本没有存储任何记录。
    • 只有在没有给出值时才使用默认值。但在您的查询中,它的值为“”,空字符串。
    • 那么未选中的是空字符串?但是为什么记录被数据库拒绝了,而不是用空字符串存储呢?
    • Afaik 是一个空字符串,而不是 TINYINT(1)。或者它可能是 NOT NULL。
    • 我删除了not null,仍然没有改变。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 2014-05-16
    • 2012-10-16
    • 2020-08-12
    相关资源
    最近更新 更多