PHP如果测试逻辑

时间:2018-04-05 05:28:29

标签: php

我有一个简单的HTML表单,其中一个输入字段是' Date From'。在处理此表单提交的页面上,我想检查用户是否输入了Date From并且它不是空的。我目前正在测试这个:

if (!isset($_GET['dateFrom']) and $_GET['dateFrom'] !=='') { 
// No Date From
 $actionError = 'No Date From Entered - please go back and enter the Date From';
}

只是想确认这是检查用户是否提交了非空的表单字段输入的正确语法/逻辑?

4 个答案:

答案 0 :(得分:2)

首先,如果未设置$_GET["dateFrom"],则不应尝试读取$_GET["dateFrom"]的值,其次,最好使用&&代替{ {1}}因为and将检查第一个条件,并且在第一个评估为&&时不会尝试评估第二个条件。因为无论后来发生什么,块的条件都是false,而其中任何一个都是假的。

您可以使用:

false

或者,如果您只想要负面情景,那么逻辑就像这样:

if(isset($_GET["dateFrom"]) && trim($_GET["dateFrom"]) !== "")
{
    // do things related to $_GET["dateFrom"]
}else{
    $actionError = 'No Date From Entered - please go back and enter the Date From';
}

所以,

!(A & B) = !A || !B

if(!isset($_GET["dateFrom"]) || trim($_GET["dateFrom"]) == "") { $actionError = 'No Date From Entered - please go back and enter the Date From'; } 运算符将继续到第二个,如果第一个是||。如果第一个条件为真,则不检查后一个进入块。

答案 1 :(得分:1)

  

只是想确认这是检查用户是否提交了非空的表单字段输入的正确语法/逻辑?

正如评论!isset($_GET['dateFrom']) and $_GET['dateFrom'] !==''中指出的那样,开始时是错误的。

isset($_GET['dateFrom']) && $_GET['dateFrom'] !== ''是正确的。

然而......答案取决于你对“空”的定义:

如果您认为' '不为空,则为是。

如果您认为' '也是空的,那么您需要一些额外的输入修整(例如trim)。

答案 2 :(得分:0)

添加“Strip whitespace (or other characters) from the beginning and end of a string”修剪函数,以确保该字段不仅包含空格。

if (
    !isset($_GET['dateFrom'])
    || trim($_GET['dateFrom']) !== ''
) {
    $actionError = 'No Date From Entered - please go back and enter the Date From';
}

如果您$_GET['dataForm']直接没有isset,则会收到如下错误:

Notice: Undefined index: dateFrom in php shell code on line 1

但如果您愿意,可以将!isset($var) || $var == false语句替换为空($ var)。

  

如果变量不存在,则不会生成警告。这意味着empty()基本上是!isset($ var)||的简洁等价物$ var == false。

正确的语法逻辑是

if (empty($_GET['dateFrom'])) {
    $actionError = 'No Date ...';
}

答案 3 :(得分:0)

非常简单,您可以使用empty。 示例:

if(empty($_GET["dateFrom"]))
{    
    $actionError = 'No Date From Entered - please go back and enter the Date From';
}

以上解决方案也将提高执行性能和代码简单性。