恭喜我。我已经正式从 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
基本上包括检查isset
。 empty
也会"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");
}
}