checkbox、mysql和php有问题

checkbox、mysql和php有问题,php,mysql,forms,checkbox,Php,Mysql,Forms,Checkbox,我试图在窗体上使用复选框,并希望在我的DB中将值保存为1或0 在我的数据库中,有一个名为“subscribe”的字段,具有以下属性: TINYING(4) Not Null Default value = '0' 在我的html表单中,我有以下内容: <input type="checkbox" value="1" name="subscribe" checked>Subscribe to our newsletter<br /> 订阅我们的时事通讯 如果表单是在默

我试图在窗体上使用复选框,并希望在我的DB中将值保存为1或0

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

TINYING(4)
Not Null
Default value = '0'
在我的html表单中,我有以下内容:

<input type="checkbox" value="1" name="subscribe" checked>Subscribe to our newsletter<br />
订阅我们的时事通讯
如果表单是在默认的选中状态下提交的,那么记录将很好地传递到数据库

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

知道为什么会这样吗?您需要看看php来帮助吗

谢谢,,
Nathan

web浏览器不会为未选中的复选框发送键值对。 做一个
print\r($\u POST)以观察此情况


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

我认为您应该使用布尔(TINYINT(1))类型,而不是TINYINT(4)。并且不要将表单中的值直接传递到查询中。使用if()检查该值,并为每个变量的查询指定一个布尔值。大概是这样的:

$subscribe = 0;

if(isset($_POST['subscribe']) && $_POST['subscribe'] == "1")
  $subscribe = 1;

mysql_query("... VALUES ('".$subscribed."' ...");

对于有效的XHTML,是否使用
checked=“checked”
而不是
checked

打字<代码>TINYING(4)
可能应该是:
TINYINT(4)
是的,这只是一个打字错误。很抱歉。这是我正在使用的php:$addfeedback=“插入到反馈(用户、电子邮件、订阅、评论)值(“$”POST['user']”、“$”POST['email']”、“$”POST['subscribe']”、“$”POST['comments']”、“)$结果=mysql\u查询($addfeedback);将表单数据直接传递到查询中非常糟糕。谷歌关于正确的转义和SQL注入。谢谢血腥世界。很高兴知道这一点。我才刚刚开始,所以我想我会学会如何正确地做这件事(更重要的是通过像你这样的有用提示)——在这一点上,我仍然只是尝试获得基本的功能,并且对它为什么不工作感到困惑。有趣。好的,这听起来是个好办法。还感谢您提供了有效的XHTML提示。但是你知道为什么我现在不保存记录吗?我认为在DB中有一个默认值0应该可以。我很惊讶根本没有存储任何记录。默认值仅在没有为此指定值时使用。但在您的查询中,它的值为“”,为空字符串。那么,未选中是否为空字符串?但是为什么数据库拒绝记录,而不是用空字符串存储?Afaik是一个空字符串,而不是TINYINT(1)。或者可能是非空。我删除了非空,仍然没有改变。