簡體   English   中英

PHP中的多個if語句?

[英]Multiple if-statements in php?

我有幾個變量,在將它們寫入mysql數據庫之前,我想對其進行驗證。 基本上,我希望使用以下邏輯:如果用戶名正確,電子郵件正確,密碼正確,則將所有內容寫入db,否則為每個錯誤吐出錯誤。

我試圖提出以下邏輯,但是必須有一種更邏輯有效的方法來實現(抱歉,我知道這看起來很原始):

if ( preg_match("/^[A-Za-z0-9]+(?:[ _-][A-Za-z0-9]+)*$/", $username) ) {
    if ((preg_match("^([0-9a-zA-Z]+[-._+&])*[0-9a-zA-Z]+@([-0-9a-zA-Z]+[.])+[a-zA-Z]{2,6}$", $email)) {
        if (/*password is ok*/) {
            //create user entry in the db
            //and save success message in the session variable
        } else {
            //error message for password
        }
    } else {
        //error message for email
    }
} else {
    //error message for username
}

理想情況下,您希望能夠顯示多條錯誤消息,以防萬一有多處錯誤。 像這樣:

$errors = array();
if( !preg_match("/^[A-Za-z0-9]+(?:[ _-][A-Za-z0-9]+)*$/", $username) )
{
    $errors[] = 'Username was invalid';
}
if ((preg_match("^([0-9a-zA-Z]+[-._+&])*[0-9a-zA-Z]+@([-0-9a-zA-Z]+[.])+[a-zA-Z]{2,6}$", $email))
{
    $errors[] = 'Email was invalid';
}
if( /* Password is bad */ )
{
    $errors[] = 'Password is bad somehow';
}

if( sizeof($errors) == 0 )
{
    // write to db
}
else
{
    // Display all error messages
}

首先,有許多框架和驗證腳本可讓您執行此操作。 另一方面,最好自己動手做,這樣一來,您便知道實際發生了什么,如果您以后決定切換到框架。

您的代碼看起來不錯,但是從可用性的角度來看,它不如人們希望的那樣好。 如果我嘗試在您的系統中創建用戶,則可能必須填寫表格並按幾次提交,這可能會很煩人。 相反,一旦填寫了表格,就會顯示一個錯誤列表,而不是一次只顯示一個錯誤。 解決此問題的常用方法是創建錯誤消息數組。

一個實現可能看起來像這樣

$errors = array();

if (!preg_match("/^[A-Za-z0-9]+(?:[ _-][A-Za-z0-9]+)*$/", $username))
    array_push($errors, "Invalid username");

if (!preg_match("^([0-9a-zA-Z]+[-._+&])*[0-9a-zA-Z]+@([-0-9a-zA-Z]+[.])+[a-zA-Z]{2,6}$", $email))
    array_push($errors, "Invalid password");

if (otherValidationRule())
    array_push($errors, "Something else went wrong");

此后,您檢查是否發生任何錯誤,如果出現,請打印出來

if (sizeof($errors) > 0) {
    print("<ul>\n");
    foreach($errors as $error)
        printf("<li>%s</li>\n", $error);
    print("</ul>\n");
}
else {
    // Proceed with registration
}

我認為更簡短,更易讀的方式是:

if (!preg_match("/^[A-Za-z0-9]+(?:[ _-][A-Za-z0-9]+)*$/", $username))
    die("username error");

if (!preg_match("^([0-9a-zA-Z]+[-._+&])*[0-9a-zA-Z]+@([-0-9a-zA-Z]+[.])+[a-zA-Z]{2,6}$", $email))
    die("email error");

if (/*password is NOT ok*/)
    die("password error");

//create user entry in the db
//and save success message in the session variable

請注意,我已經否定了您的條件,以便if語句的內容僅在發生故障時才執行。

您可以使用die結束腳本

if (/*User name in NOT ok*/)
{
die("Bad username");
}

if(/*Password is not ok*/)
{
die("Bad Pass");
}

或使用變量

$usernameOk = false;
$passwordOk = false;

if(/*Username is ok*/)
{
$username = true;
}

if(/*Password is ok*/)
{
$passwordOk = true;
}

if(/*username true and password true*/)
{
//Execute statement
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM