2012-04-28 109 views
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變量的值以確保它不是空的?

在此先感謝。

回答

1

只有當HTTP頭包含一個名爲doRegCheck的變量並且該變量設置爲0(?doRegCheck=0)或者什麼都不是(?doRegCheck=)時,代碼纔會重定向。這似乎對我來說倒退了。我認爲你會重定向,如果變量存在,它不會設置爲falsy值,如0,false,F

該語法(冒號)通常用於模板(當您切換進出PHP模式時),使其更難閱讀。

1

首先,讓我們正確格式化的:

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"); 
} 
0

是的,你有正確的想法,如果「doRegCheck」設置,但等於「0」或沒有價值「」那麼你會重定向到'的index.php?做=用戶'。因此,據我所知,基本上確保如果您在未經確認的情況下點擊註冊頁面,則無法完成註冊過程。

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"); 
    } 
}