если isset не возвращает false не завершает

У меня есть проверка isset в php, когда операторы if проверяют, не вернули ли различные функции false. Дело в том, что он не выходит после первого ложного возврата.

Я уверен, что мне не хватает чего-то базового в синтаксисе php.

<?php
$name =  $_POST['name'];
$email = $_POST['email'];
$email2 = $_POST['email2'];

function nameCheck($name)
{
    if (strlen($name)<1 || strlen($name)>40)
    {
        return false;
    }
    else
    {
        return true;
    }
}

function emailCheck($email)
{
    $regex = "/^[*\w]{1,25}+@[*\w]{1,20}+\.[*\w]{1,10}$/";
    if (preg_match($regex, $email))
    {
        return true;
    }
}

function emailMatch($email, $email2)
{
    if ($email === $email2)
    {
        return true;
    }
    else
    {
        return false;
    }
}

if (isset($_POST['submit']))
{
    if (!nameCheck($name))
    {
        echo '<script type="text/javascript"> alert("Fail name!")</script>';
        return false;
    }
    elseif (!emailCheck($email))
    {
        echo '<script type="text/javascript"> alert("Fail email check!")</script>';
        return false;
    }
    elseif (!emailMatch($email,$email2))
    {
        echo '<script type="text/javascript"> alert("Fail email match!")</script>';
        return false;
    }
    else
    {
    mail ("[email protected]", "this", "message");
    echo '<script type="text/javascript"> alert("Success!")</script>';
    }
}
?>

Я использую окна предупреждений для ввода кода. Появится не только каждое окно предупреждения, но даже окно успеха! Что я делаю не так? TX

Это всего лишь код, с которым я играю, чтобы подготовиться к экзамену. На самом деле мне не нужно использовать его на веб-сайте, так что это просто практика.


person Community    schedule 21.11.2013    source источник
comment
return truel; это опечатка?   -  person andrewsi    schedule 21.11.2013
comment
Кроме того, если в вашем основном коде есть return, что он должен делать? Нет функции вызова, к которой он мог бы вернуться.   -  person andrewsi    schedule 21.11.2013
comment
Вы просто хотите, чтобы код перестал выполняться, когда одна из ваших функций возвращает false? В этом случае вам нужно переключить эти вызовы return на die: это должен сделать if (! nameCheck) { die('<script...'); }.   -  person andrewsi    schedule 21.11.2013
comment
Я добавлю ответ - места больше :D   -  person andrewsi    schedule 21.11.2013


Ответы (1)


Ваш код на данный момент эффективно:

if (! check) {
    echo();
    return;
}

if (! check) {
    echo();
    return;
}

Но return вне функции ничего не сделает - PHP некуда вернуть управление куму.

Что вам нужно сделать, так это переключить эти проверки, чтобы они были отформатированы как:

if (isset($_POST['submit']))
{
    if (!nameCheck($name))
    {
        die('<script type="text/javascript"> alert("Fail name!")</script>');
    } 
    elseif
    ......
    } 
 else
    {
    mail ("[email protected]", "this", "message");
    echo '<script type="text/javascript"> alert("Success!")</script>';
    }

Использование die распечатает содержимое строки и сразу же остановит выполнение вашего кода.

По функциям....

если вы собираетесь использовать их возвращаемые значения, вам нужно убедиться, что они всегда что-то возвращают. На данный момент emailCheck это:

function emailCheck($email)
{
    $regex = "/^[*\w]{1,25}+@[*\w]{1,20}+\.[*\w]{1,10}$/";
    if (preg_match($regex, $email))
    {
        return true;
    }
}

Если совпадений нет, возвращается null; хотя, когда вы проверите это в своем заявлении if, это будет оцениваться как false, поэтому ваша проверка не заметит. Когда вы вызываете return, ваша функция немедленно останавливается, и управление переходит обратно к вызвавшему ее коду, поэтому вы можете написать свои проверочные функции следующим образом:

function myCheck($parameter) {
    if ($checkhere == 'something') {
        return true;     // returns true to the calling function
                         // stops running the code in this function
    } 
    // The only way this will be run is if the check has failed, so we 
    // don't need an else
    return false;
}

Это точно так же, как использование else, но немного меньше набора текста - это разница в стиле, который вы выберете.

person andrewsi    schedule 21.11.2013
comment
если я вас правильно понимаю, ваши функции в порядке - они проверяют параметры по критерию и возвращают true или false (кроме emailCheck - это ничего не значит, если проверка не удалась, просто верно, если она проходит, но я подозреваю это еще одна опечатка) - person andrewsi; 21.11.2013
comment
Я добавил пару заметок в вопрос - это поможет? - person andrewsi; 21.11.2013