2017-04-13 127 views
3

这里是我的示例代码:如何使用PHP将零值视为true?

$issue_id = $_POST['issue_id']; 
if(!empty($issue_id)){ 
    echo 'true'; 
} 
else{ 
    echo 'false'; 
} 

如果我通过提交表单则呼应假传0 to $_POST['issue_id']。我想要的是:如果满足以下条件,条件将成立: 1.当我通过任何具有0的值时为true。 2.当我没有通过任何值时为false。即:$_POST['issue_id']未定义。

我也试过这样:

if(!isset($issue_id)){ 
    echo 'true'; 
} 
else{ 
    echo 'false'; 
} 


if(!empty($issue_id) || $issue==0){ 
    echo 'true'; 
} 
else{ 
    echo 'false'; 
} 

最后一个是好的,如果我通过有ZERO那么它将呼应真正的任意值的意思。但如果我不通过任何价值,它也会回应真实。任何想法?

+1

小心'empty()'。尽管有这个名字,但它并没有检查变量是否实际上是_empty_ - 只是它是否是假的。例如,null,0,false和一个空数组在这个意义上都被认为是“空的”。 – Manngo

回答

2

最后是好的,如果我通过带有零则呼应真实的任何值的意思。但是,如果我没有通过任何价值,它也会回应。任何想法?

if (isset($_POST["issue_id"]) && $_POST["issue_id"] !== "") { 
} 

请注意我用!==!=。这是为什么:

0 == "" // true 
0 === "" // false 

多见于http://php.net/manual/en/language.operators.comparison.php


,如果你还期待号码,您可以使用

if (isset($_POST["issue_id"]) && is_numeric($_POST["issue_id"])) { 
} 

因为is_numeric("")返回false

http://php.net/manual/en/function.is-numeric.php


另外,如果你希望数很好的选择是filter_var

if (isset($_POST["issue_id"]) { 
    $issue_id = filter_var($_POST["issue_id"], FILTER_VALIDATE_INT); 
    if ($issue_id !== false) { 
    } 
} 

因为filter_var("", FILTER_VALIDATE_INT)将返回false和filter_var("0", FILTER_VALIDATE_INT)将返回(int) 0

http://php.net/manual/en/function.filter-var.php

-1

当你从表单数据,请记住:

  • 所有文本框,无论inputtextarea会为字符串。包括空文本框和包含数字的文本框。
  • 全部选定按钮将有一个值,但没有选中的按钮将不会出现。这包括单选按钮,复选框和实际按钮。

这意味着$_POST['issue_id']将字符串'0',这实际上是truthy。

如果你需要它是一个整数,使用类似于:$issue_id=intval($_POST['issue_id']);

+2

这是一个糟糕的建议,不要抑制错误 – Peter

+0

@Peter存在'@'运算符是有原因的。明智地使用它,当你能够在你的步伐中处理错误时使用它,并且缺乏价值的地方是无害的。在这种情况下,缺少POST值不应成为交易断路器。我同意使用它是危险的。 – Manngo

+1

PHP中存在很多东西,但使用它们是不好的做法。无论在哪里,无论错误的做法是什么都不要压制。在你的情况下,你基本上懒得使用'isset' – Peter

-1
if(isset($_POST['issue_id'])) { 
    if($_POST['issue_id'] == 0) { 
    echo "true"; 
    } 
    else { 
    echo "false"; 
    } 
} 
+0

它会回显真空字符串'“”' – Peter

+0

我真的可能不应该评论这个夜晚的时间。 LOL 但是,如果表单提交时为空,那么issue_id变量不会存在。除非代码中的其他内容在发布表单后设置$ _POST ['issue_id'],否则我的代码将按预期工作。 – Difster

+0

[你错了](https://codepen.io/anon/pen/rmNoaB) – Peter

-1

@Abdus萨塔尔Bhuiyan你也可以完全填充你的两个条件如下:

<?php 
$_POST["issue_id"] = "0"; 
$issue_id = isset($_POST['issue_id']) ? (!empty($_POST['issue_id']) || $_POST['issue_id'] === 0 || $_POST['issue_id'] === "0") ? true : false : false; 
if($issue_id){ 
    echo 'true'; 
} 
else{ 
    echo 'false'; 
} 
+0

它在'“”上返回true' – Peter

+0

@Peter检查更新的那个 –

+0

现在它在'“0”上返回false。请看看我的naster http://stackoverflow.com/a/43387287/994054 – Peter

相关问题