-1

我有以下代码来验证表单数据。我创建了函数来验证各种组,然后有一个 if isset 语句来检查这些函数是否返回 true。我已经尝试了许多不同的方法来让它发挥作用。

我遇到的问题是这个。如果返回 FALSE,我希望 if isset 结束;但它没有,它继续运行并弹出下一个警报(在我的代码中我有很多功能)。第一次返回 FALSE 后如何让它退出?我需要将 isset 变成一个函数吗?所以它可以在返回 FALSE 时退出。谢谢

我在编写函数来调用 php 中的函数时遇到问题。

function namecheck ($fname, $lname) 
{
    $regexp ="/^[A-Za-z]+$/";
    //filter through names 
    if (preg_match($regexp,$fname,$lname)) 
    {
        return TRUE; 
    }
    else 
    {
        echo'<script type="text/javascript">alert("Enter your names.")</script>';
        return FALSE; 
    }
}

function emailcheck ($email1, $email2) 
{
    $regexp="/^[a-zA-A-Z0-9_.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9.-]+$/";
    //validate email address    
    if (preg_match($regexp,$email1,$email2)) 
    {
        return TRUE; 
    }
    else 
    {
        echo '<script type="text/javascript">alert ("Enter a valid email address.")</script>';
        return FALSE; 
    }
}

$fname=$_POST['fname'];
$lname=$_POST['lname'];
$namecheck=namecheck($fname,$lname);
$email1=$_POST['email1'];
$email2=$_POST['email2'];
$emailcheck=emailcheck($email1,$email2);

if (isset($_POST['submit'])) 
{
    if ($namecheck !==TRUE)
    {
        return FALSE;
    }
    elseif ($emailcheck!==TRUE)
    {
        return FALSE;
    } //and so on..
    else
    {
        return TRUE;
    }
}
4

3 回答 3

2

如果您希望脚本像您所说的那样“退出”,那么您需要使用 exit(); 通常这很糟糕,因为脚本将完全停止执行。也许你可以考虑使用“break;” 让您脱离循环并停止在该循环中执行函数。另一个问题是您在函数中回显 HTML 代码,该代码在分配时执行,因此当它评估为 FALSE 时,您总是会收到生成的警报。

编辑:在你的 if(isset()) 块中。在这里你可以做{}while(false); 这是一个循环,可以让您随时跳出它并防止在该循环中进一步执行代码。

于 2013-08-02T17:22:44.723 回答
2

如果一个函数没有返回false,那么它永远不会到达一个return FALSE;语句。就这么简单。那么让我们检查一下相关代码:

if (isset($_POST['submit'])) 
{
    if ($namecheck !==TRUE)
    {
        return FALSE;
    }
    elseif ($emailcheck !== TRUE)
    {
        return FALSE;
    } //and so on..
    else
    {
        return TRUE;
    }
}

因此,如果$_POST['submit']已设置且不为空,if则将到达该块。然后,如果$namecheckis not true OR $emailcheck不为真,该函数将返回FALSE。您可以将上面的代码简化为:

if (isset($_POST['submit'])) 
{
    return !(!$namecheck || !$emailcheck);
}

但是,这段代码看起来并不在函数内部,因此该return语句不会执行任何操作。如果你想让它像一个函数一样工作,你必须把它放在一个函数中。

除此之外,我帮不了你。我不知道你想用这段代码做什么。您似乎知道如何使用和调用函数,所以我不确定问题是什么。如果return要从函数中获取,请将代码放入函数中并调用return. 现在你的代码不在函数中,所以return不会做任何事情。

于 2013-08-02T17:23:38.730 回答
2

您可以遵循的函数的一般结构如下所示:

function validateName($name) {
   // Do Validation. Return true or false.
}

function validateEmail($email) {
   // Do Validation. Return true or false.
}

function isFormValid() 
{
   // Name Validation
   if( ! validateName( $_POST['name'] ) )
      return false;

   // Email Validation
   if( ! validateEmail( $_POST['email'] ) )
      return false;

   // Form is valid if it reached this far.
   return true;
}

// In your regular code on Form Submit
if( isset($_POST['submit']) )
{
   if( isFormValid() ) {
      // Save Form Data to DB
   } else {
      // Show Some Errors
   } 

}

该一般结构应该适合您。它可以做得更好,但为了学习,这就足够了。

于 2013-08-02T17:47:36.660 回答