[英]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.