奇怪的$ _POST PHP问题

时间:2012-04-28 01:01:39

标签: php

恭喜我。我正式从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 个答案:

答案 0 :(得分:1)

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

这种语法(冒号)通常用在模板中(当你进入和退出PHP模式时),这使得它更难阅读。

答案 1 :(得分: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将任何 false 值或不存在的值识别为“空”。此代码可能尝试使用intval检查值是否为数字。总而言之,这应该更容易理解:

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

答案 2 :(得分:0)

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

答案 3 :(得分: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");
     }
}