簡體   English   中英

PHP表單驗證錯誤

[英]PHP Form Validation Error

我之前從StackOverflow獲得了很大的幫助,但是我還有另一個問題。

這是什么總是會給出我沒有完成所有字段的錯誤。

這是我的表單函數:

// Function with HTML to display form
function FormDisplay () {
    echo '<form action="MyRegister.php" method="post">';
    echo 'Username:';
    echo '<input type="text" name="username" maxlength="60"><br />';
    echo 'Password:';
    echo '<input type="password" name="password" maxlength="60"><br />';
    echo 'Confirm Password:';
    echo '<input type="password" name="password_confirm" maxlength="60"><br />';
    echo '<input type="submit" name="submit" value="Register"><br />';
    echo '</form>';
}

需要注冊表格時將調用此函數

這是驗證用戶輸入的代碼:

// Checks for field completion
function FieldComplete($user, $password, $password_confirm) {
    if (!isset($user, $password, $password_confirm) &&
        $user && $password && $password_confirm != "" || " ") {
        return false;
    } else {
        return true;
    }
}

// Validate fields using isset and FieldComplete (see above)
if(isset($_POST['submit'])){
    $username_original = $_POST["username"];
    $password_original = $_POST["password"];
    $password_confirm_original = $_POST["password_confirm"];

    $IsComplete = FieldComplete($username_original, $password_original, $password_confirm_original);
if(!$isComplete){
   FormDisplay();
   echo "* You did not complete all the required fields." . "<br />";
}
}else{
//display the form
    FormDisplay();
}

因此,這將正確顯示表單,並且我的所有其他驗證均正常運行(此處未顯示)。

我不確定發生了什么問題,自從我上次訪問這里以來(大約3-4小時前),我已經仔細檢查了語法和所有內容

贊賞反饋。

-ethan17458

如評論中所述,您的條件不正確。 更改為以下內容:

if(!isset($user,$password,$password_confirm) || trim($user)=='' || trim($password)=='' || trim($password_confirm)==''){

您還具有$IsComplete$isComplete 這些與區分大小寫的PHP不同。

簡化它並擺脫“ isComplete”:

if(FieldComplete($username_original,$password_original,$password_confirm_original)){
FormDisplay();
//...

您過於復雜的驗證...

對於簡單的“是否已實例化我的變量”檢查, isset()很棒。但是它將給出空值和0值的誤報。

下面的示例使用空白和修剪。 修剪將刪除字符串末尾的所有空格,而空白將檢查其是否為“”,null,0等。

希望能幫助到你。

// Checks for field completion
function FieldComplete($user, $password, $password_confirm)
{
    if (empty(trim($user)) || empty(trim($password)) || empty(trim($password_confirm)))
    {
        return false;
    }
    else
    {
        return true;
    }
}

FieldComplete()將始終返回false,因為:

 if (!isset($user, $password, $password_confirm) &&
        $user && $password && $password_confirm != "" || " ")

由於最后一個邏輯“或”,將始終為true:

|| " "

如果要驗證$ user,$ password和$ password_confirm是否都已設置,非空白且不是單個空格,則需要:

if (!isset($user, $password, $password_confirm) || $user == '' 
     || $user == ' ' || $password == '' || $password == ' ' 
     || $password_confirm == '' || $password_confirm == ' ')

盡管您可能追求的是:

 if (!isset($user, $password, $password_confirm) ||
        trim($user) == '' || trim($password) == '' || trim($password_confirm) == '')

這將確保所有三個都被填充,而不僅僅是空白。

暫無
暫無

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

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