0

恭喜我。我已经正式从 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 变量的值以确保它不为空?

提前致谢。

4

4 回答 4

1

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

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

于 2012-04-28T01:05:01.240 回答
1

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

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

然后,让我们去掉冗余。empty基本上包括检查isset. empty也将识别"0"为“空”。empty将任何错误值或不存在的值识别为“空”。此代码可能会尝试通过使用来检查该值是否为数字intval。总而言之,这应该更容易理解:

if (empty($_POST['doRegCheck']) || !is_numeric($_POST['doRegCheck'])) {
    redirect_to("index.php?do=users");
}
于 2012-04-28T01:07:10.437 回答
0

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

于 2012-04-28T01:08:31.617 回答
0

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

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");
     }
}
于 2012-04-28T01:13:16.980 回答