在PHP中,零被视为空

在PHP中,零被视为空,php,forms,input,is-empty,Php,Forms,Input,Is Empty,我的php表单中的输入字段有问题。它看起来像: <input type="number" name="tmax" max="99" min="-99" placeholder="Temperatura max."> 如果用户将输入字段留空,则该值将被视为“null”,这非常有效。但是如果用户写入0,这在表单中是可能的,它也被视为空 if (empty($_POST['tmax'])) { $tmax = null; }else { $tmax = $_POST['tmax

我的php表单中的输入字段有问题。它看起来像:

<input type="number" name="tmax" max="99" min="-99" placeholder="Temperatura max."> 
如果用户将输入字段留空,则该值将被视为“null”,这非常有效。但是如果用户写入
0
,这在表单中是可能的,它也被视为空

if (empty($_POST['tmax'])) {
  $tmax = null;
}else {
  $tmax = $_POST['tmax'];
}
我还在SQL中将默认值设置为null,但问题是,如果输入为空,程序会在表中插入
0

解决方案:

这个解决方案对我来说很好:

if ($_POST['tmax'] == "") {
  $tmax = null;
}else {
  $tmax = $_POST['tmax'];
}
还有
是\u numeric()


如您所述,0被视为空

您需要的函数是isset()


或者,删除not运算符并切换代码块。

您可以使用
!是数值()
而不是
空()


感谢这么重要的提示,Rafa检查条件是否为空,也不是零。零值为“空”,因此通过添加这两个检查,可以确保变量
$tmax
将设置为
null
,前提是输入为空且不是零

if (empty($_POST['tmax']) && $_POST['tmax'] != 0) {
    $tmax = null;
} else {
    $tmax = $_POST['tmax'];
}
这也将接受“foo”作为一个值,因此您应该检查或验证输入是否是一个有效的数字(也在您指定的范围内)。您还可以实现
is\u numeric($\u POST['tmax'])
,或者更好地使用
filter\u var($\u POST['tmax'],filter\u validate\u INT)
验证它,以确保输入的内容实际上是一个数字

您可以使用

if ($_POST['tmax'] == "") {
  $tmax = null;
}else {
  $tmax = $_POST['tmax'];
}

这段代码应该适用于你想要得到的东西

if (!isset($_POST['tmax']) || $_POST['tmax'] == '') {
    $tmax = null;
}else {
    $tmax = $_POST['tmax'];
}

如果您想要占位符-您可以使用以下代码:

<input type="number" name="tmax" max="99" min="-99" onclick="if (this.value == '') {this.value='0';} " placeholder="Temperatura max.">

尝试在度为0时创建自定义语句。这将引发通知。请参阅lucianov的更好答案,其中包括
!isset
以避免chris提到的php警告。或者下面的任何其他答案(除了Lesiuk的答案,这对于不同的情况很好,但不是这里要求的答案)。注意:要测试变量是数字还是数字字符串(例如表单输入,它始终是字符串),必须使用is_numeric()。但是非常感谢!这对我来说很有用。谢谢你的回复,但这个解决方案对我来说并不美观,因为信息显示在占位符上,用户可以使用“值”查看信息。好的,我现在更改答案-如果你想用默认值替换空字段,使用占位符这是一个很好的技术。[为了向未来的读者澄清:最初的问题需要相反的行为-如何区分空值(意思是“未设置”,在他的代码中是允许的)和零值。]设计——在我看来,如果
empty
不能满足需要,就不要使用它。我更喜欢从更基本的调用构建,这些调用具有更简单的语义。你提到的
是数字的
——这似乎是更好的起点。
if (!isset($_POST['tmax']) || $_POST['tmax'] == '') {
    $tmax = null;
}else {
    $tmax = $_POST['tmax'];
}
<input type="number" name="tmax" max="99" min="-99" onclick="if (this.value == '') {this.value='0';} " placeholder="Temperatura max.">
$tmax = 0;
if (isset($_POST['tmax'])) {
  $tmax = $_POST['tmax'];
}