2012-04-28 2 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=). Это кажется мне обратным. Я бы подумал, что вы переадресуете, если переменная присутствует, и она не установлена ​​в значения фальши, такие как 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 в основном включает чек на isset. empty также распознает "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"); 
    } 
}