如果没有返回false则没有完成

时间:2013-11-21 12:56:10

标签: php if-statement return isset

我在php中有一个isset检查,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@email.com", "this", "message");
    echo '<script type="text/javascript"> alert("Success!")</script>';
    }
}
?>

我正在使用警告框来发送代码文本。 每个警报框不仅会出现,甚至会成功! 我究竟做错了什么? TX

这只是我正在玩的代码来学习考试,我实际上并不需要在网站上使用它,所以这只是练习。

1 个答案:

答案 0 :(得分:2)

目前您的代码是有效的:

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@email.com", "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完全相同,但输入次数略少 - 它的风格与您选择的方式不同。