I';我遇到了在PHP中向函数返回错误值的问题


I'm having issues with returning false values to functions in PHP

这是验证请求提交表单数据的单个函数的示例。已设置变量true,每个函数检查验证要求,然后继续而不返回任何内容,或者返回false并更改$check值。底部的函数然后检查$check值是否已更改为false,以及是否已更改,SQL语句将不会运行。

$check = true;
function productNameValidation(){
    if(isset($_REQUEST['product_name']) && !empty($_REQUEST['product_name']) && preg_match("/^[A-Za-z0-9 :]*[A-Za-z0-9][A-Za-z0-9 :]{0,50}$/",($_REQUEST['product_name']))){
        //then $valid['ID'] = "string: " . $_REQUEST['ID']
        $valid['product_name'] = $_REQUEST['product_name'];
        $err['product_name'] = "No errors";
        //if not    
    } else {
        if(empty($_REQUEST['product_name'])){
            $valid['product_name'] = "No data entered!";
        } else {    
            $valid['product_name'] = $_REQUEST['product_name'];
        } //$err['ID'] = "error message"
        $err['product_name'] = "Product Name must only contain letters, numbers and ':'!";
        $check = false; 
    }
}
function checkProduct()
{
    productNameValidation();
    productGenreValidation();
    productPriceValidation();
    productEsrbValidation();
    productThumbnailValidation();
    releaseDateValidation();
    return $check;
}
if($check == true)
{
   //Insert into database
}

您需要做的是在不同的函数上添加不同的变量。如果您正在将此代码处理为以true开头并需要检查的方法,并且如果检查失败则变为false,请尝试此方法:

   // $check = true;
    function productNameValidation(){
        $nameValidation = TRUE;
        if(isset($_REQUEST['product_name']) && !empty($_REQUEST['product_name']) && preg_match("/^[A-Za-z0-9 :]*[A-Za-z0-9][A-Za-z0-9 :]{0,50}$/",($_REQUEST['product_name']))){
            //then $valid['ID'] = "string: " . $_REQUEST['ID']
            $valid['product_name'] = $_REQUEST['product_name'];
            $err['product_name'] = "No errors";
            //if not    
        } else {
            if(empty($_REQUEST['product_name'])){
                $valid['product_name'] = "No data entered!";
            } else {    
                $valid['product_name'] = $_REQUEST['product_name'];
            } //$err['ID'] = "error message"
            $err['product_name'] = "Product Name must only contain letters, numbers and ':'!";
            $nameValidation = false; 
        }
    return $nameValidation;
    }
    function checkProduct()
    {
    $checkProduct = true; ///true until proven false.
        $checkProduct = productNameValidation();
        //This code gives $checkProduct the boolean value returned 
    //from the function
       $checkProduct = productGenreValidation();
        $checkProduct = productPriceValidation();
        $checkProduct = productEsrbValidation();
        $checkProduct = productThumbnailValidation();
        $checkProduct = releaseDateValidation();
        return $checkProduct;
    }
    if($checkProduct  == true)
    {
       //Insert into database
    } 

我在这里所做的是,每个函数都返回一个TRue/False标志布尔变量,可以用if(){语句进行检查,您可以通过这种方式运行许多函数来检查您需要的每个方面。重要的一点是,您需要从每个函数返回一个值,您可以使用初始设置手动设置布尔值,然后根据条件进行更新,例如从任何子函数设置$checkProduct = TRUE,直到它为FALSE。

在这种情况下,全局变量确实不是一个好主意。

编辑:感谢@Edward对布尔返回代码的澄清。

您可以这样做:

function productNameValidation(){
    $check = true;
    if(isset($_REQUEST['product_name']) && !empty($_REQUEST['product_name']) && preg_match("/^[A-Za-z0-9 :]*[A-Za-z0-9][A-Za-z0-9 :]{0,50}$/",($_REQUEST['product_name']))){
        //then $valid['ID'] = "string: " . $_REQUEST['ID']
        $valid['product_name'] = $_REQUEST['product_name'];
        $err['product_name'] = "No errors";
        //if not    
    } else {
        if(empty($_REQUEST['product_name'])){
            $valid['product_name'] = "No data entered!";
        } else {    
            $valid['product_name'] = $_REQUEST['product_name'];
        } //$err['ID'] = "error message"
        $err['product_name'] = "Product Name must only contain letters, numbers and ':'!";
        $check = false; 
    }
    return $check;
}
if(productNameValidation()) {
....
}

您可以在验证函数中使用return $check,这将允许您在函数范围之外使用$check的值,如$check = productNameValidation()。我在上面看到的另一个重要注意事项是:你应该尽可能避免全球范围。

您可以像使用局部变量一样使用check,而不是全局变量,因此在函数中也是如此。相反,如果你想把它作为一个全局,在函数的开头,你必须指定你指的是

global $check;