奇怪的 _POST 美元的 PHP 问题


Weird $_POST PHP issue

恭喜我。我已经正式从 asp.net 切换到PHP。

现在,我被困住了。

我有一些代码,

我在某些代码片段网站上找到,并对以下部分有疑问。

if (isset($_POST['doRegCheck']))
    : if (intval($_POST['doRegCheck']) == 0 || empty($_POST['doRegCheck']))
    : redirect_to("index.php?do=users");
 endif;
endif;

谁能告诉我这里到底发生了什么?此代码是否检查 doRegCheck POST 变量的值以确保它不为空?

提前谢谢。

首先,让我们正确地重新格式化它:

if (isset($_POST['doRegCheck'])) :
    if (intval($_POST['doRegCheck']) == 0 || empty($_POST['doRegCheck'])) :
        redirect_to("index.php?do=users");
    endif;
endif;

然后,让我们去掉冗余。 empty基本上包括检查issetempty也会"0"识别为"空"。 empty将任何值或不存在的值识别为"空"。此代码可能会尝试使用 intval 检查值是否为数字。所以总结一下,这应该更容易理解:

if (empty($_POST['doRegCheck']) || !is_numeric($_POST['doRegCheck'])) {
    redirect_to("index.php?do=users");
}

仅当 HTTP 标头包含名为 doRegCheck 的变量并且该变量设置为 0 ( ?doRegCheck=0 ) 或 null ( ?doRegCheck= 时,代码才会重定向。这对我来说似乎是倒退的。我认为如果变量存在并且它没有设置为像0,false,F这样的虚假值,您会重定向

该语法(冒号)通常用于模板(当您切换进入和退出 PHP 模式时),使其更难阅读。

是的,您的想法是正确的,如果设置了"doRegCheck",但等于"0"或没有值",那么它会将您重定向到"index.php?do=users"。 因此,据我所知,它基本上可以确保如果您在没有确认的情况下点击注册页面,它将无法完成注册过程。

当前的形式使可读性更难,因为它是,它应该是:

if (isset($_POST['doRegCheck'])):
     if (intval($_POST['doRegCheck']) == 0 || empty($_POST['doRegCheck'])):
     redirect_to("index.php?do=users");
     endif;
endif;

翻译过来就是:

if (isset($_POST['doRegCheck'])){
     if (intval($_POST['doRegCheck']) == 0 || empty($_POST['doRegCheck'])){
     redirect_to("index.php?do=users");
     }
}

意义:

//is $_POST['doRegCheck'] set
if (isset($_POST['doRegCheck'])){
     //intval will return (int)0 even if its abc,
     // perhaps it should be is_numeric() as it will
     // pass if the value is 0 or the value is abc or empty
     if (intval($_POST['doRegCheck']) == 0 || empty($_POST['doRegCheck'])){
     //some user function to redirect
     redirect_to("index.php?do=users");
     }
}