Простые условные выражения - не работают как задумано - работают с die () в конце? - PullRequest
2 голосов
/ 08 апреля 2011

Я не могу поверить, что я смотрел на следующий код, пока у меня есть:

public function send($boxMemUsed, $boxMemAllocate) {
    $this->timeSent = gmmktime();
    if ($boxMemUsed >= $boxMemAllocate)
        header("Location: ".HOME_PAGE.PM_PAGE."?view=inbox&status=Memory full - please delete old messages");
    $validation = $this->_validateMessage();
    if ($validation == 'Invalid User')
        header("Location: ".HOME_PAGE.PM_PAGE."?view=compose&status=Errors&error=".$validation);

---- >>> если я добавлю die () прямо здесь, он перенаправит навышеупомянутый заголовок, как будто оператор if работает правильно

    else
        $sender = $this->_database->sendPMessage(get_object_vars($this));
    if ($sender)
        header("Location: ".HOME_PAGE.PM_PAGE."?view=sentbox&status=Message Sent!");
    else
        header("Location: ".HOME_PAGE.PM_PAGE."?view=compose&status=Errors&error=Send Error");
    }

Если я добавлю здесь die, перед функцией end curly, она ловит условное условие if ($ sender).

Простая функцияв программе личных сообщений я пишу.Итак, я перехожу на страницу реального времени, без ошибок, я ввожу неверное имя пользователя, и оно должно быть перехвачено вызовом $ this -> _ validateMessage () - то есть, я var_dump непосредственно следую за результатом и умираю() 'd.Затем я проверил, правильно ли условное условие непосредственно после этого перехватывало его, - и это перенаправило меня ... ??Но затем я удаляю тестирование var_dumps и кристалл в конце if, и он не попадает под условное условие if (речь идет о if ($ validation == 'Invalid User')).) - вместо этого он попадает в условное выражение else ($ sender).Поэтому я решаю просто добавить обратно die () в конце условной проверки и вуаля, он перенаправляет на заголовок в строке if, как и должно (отображать список ошибок get, которые я перечисляю).Поэтому я пытаюсь добавить кубик в конец функции - нет, он не попадает в условие.Я полностью в тупике.Кто-нибудь видит что-то, чего у меня нет?Я даже впал в отчаяние и добавил фигурные скобки, хотя я знаю, что они не нужны для условных выражений в одной строке - все равно нет.Спасибо за любую помощь.

Ответы [ 2 ]

2 голосов
/ 08 апреля 2011

Когда вы звоните на header('Location: ...'), остальная часть кода на странице продолжает выполняться на сервере даже после того, как клиент выполнил перенаправление.Если это поведение нежелательно (и обычно это не так), звоните на exit; после каждого звонка на header('Location: ...').Я подозреваю, что из-за этого ваш скрипт будет работать так, как вы ожидаете.

0 голосов
/ 08 апреля 2011

Я всегда ставлю die(); после использования заголовка перенаправления или выхода; как рекомендовал Асаф, тоже подойдет. Также обязательно добавьте фигурные скобки и% 20 для любых пробелов или используйте urlencode ($ sting)

if ($boxMemUsed >= $boxMemAllocate) {
    header("Location: ".HOME_PAGE.PM_PAGE."?view=inbox&status=".urlencode("Memory full - please delete old messages"));
    die();
}

Одна из причин, по которой мне нравится использовать die, заключается в том, что я могу напечатать сообщение об ошибке для целей отладки:

die('There was an error on line number: '.__LINE__);
...