PHP 菜鳥教程

PHP 高級教程

PHP & MySQL

PHP 參考手冊

PHP 表單驗(yàn)證

在本教程中,您將學(xué)習(xí)如何使用PHP過濾器清理和驗(yàn)證表單數(shù)據(jù)。

清理和驗(yàn)證表單數(shù)據(jù)

如您在上一教程中所見,捕獲和顯示提交的表單數(shù)據(jù)的過程非常簡單。在本教程中,您將學(xué)習(xí)如何在您的網(wǎng)站上實(shí)現(xiàn)一個(gè)簡單的聯(lián)系表單,該表單允許用戶通過電子郵件發(fā)送評論和反饋。我們將使用相同的PHP mail()函數(shù)來發(fā)送電子郵件。

我們還將實(shí)現(xiàn)一些基本的安全功能,例如清理和驗(yàn)證用戶輸入的內(nèi)容,以使用戶不能插入危害網(wǎng)站安全或可能破壞應(yīng)用程序的潛在有害數(shù)據(jù)。

以下是我們的多合一PHP腳本,它執(zhí)行以下操作:

  • 它將要求用戶輸入他對該網(wǎng)站的評論。

  • 相同的腳本顯示聯(lián)系人表單并處理提交的表單數(shù)據(jù)。

  • 該腳本清理并驗(yàn)證用戶輸入。 如果缺少任何必填字段(標(biāo)有*),或者由于輸入不正確而導(dǎo)致驗(yàn)證失敗,腳本將重新顯示表單,并為相應(yīng)的表單域顯示一條錯誤消息。

  • 該腳本會記住用戶已經(jīng)填寫的字段,并在由于驗(yàn)證錯誤而重新顯示表單時(shí)預(yù)填充這些字段。

  • 如果用戶提交的數(shù)據(jù)可以接受并且一切順利,它將向網(wǎng)站管理員發(fā)送電子郵件,并向用戶顯示成功消息。

在“ contact.php”文件中鍵入以下代碼,并將其保存在項(xiàng)目的根目錄中:

<?php
//過濾用戶輸入的函數(shù)
function filterName($field){
    //清理用戶名
    $field = filter_var(trim($field), FILTER_SANITIZE_STRING);
    
    //驗(yàn)證用戶名
    if(filter_var($field, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z\s]+$/")))){
        return $field;
    } else{
        return FALSE;
    }
}    
function filterEmail($field){
    //清理電子郵件地址
    $field = filter_var(trim($field), FILTER_SANITIZE_EMAIL);
    
    // 驗(yàn)證電子郵件地址
    if(filter_var($field, FILTER_VALIDATE_EMAIL)){
        return $field;
    } else{
        return FALSE;
    }
}
function filterString($field){
    // 清理字符串
    $field = filter_var(trim($field), FILTER_SANITIZE_STRING);
    if(!empty($field)){
        return $field;
    } else{
        return FALSE;
    }
}
 
//定義變量并使用空值進(jìn)行初始化
$nameErr = $emailErr = $messageErr = "";
$name = $email = $subject = $message = "";
 
//提交表單時(shí)處理表單數(shù)據(jù)
if($_SERVER["REQUEST_METHOD"] == "POST"){
 
    // 驗(yàn)證用戶名
    if(empty($_POST["name"])){
        $nameErr = "Please enter your name.";
    } else{
        $name = filterName($_POST["name"]);
        if($name == FALSE){
            $nameErr = "請輸入有效的名字。";
        }
    }
    
    // 驗(yàn)證電子郵件地址
    if(empty($_POST["email"])){
        $emailErr = "請輸入您的電子郵件地址。";     
    } else{
        $email = filterEmail($_POST["email"]);
        if($email == FALSE){
            $emailErr = "Please enter a valid email address.";
        }
    }
    
    // Validate message subject
    if(empty($_POST["subject"])){
        $subject = "";
    } else{
        $subject = filterString($_POST["subject"]);
    }
    
    // 驗(yàn)證用戶評論
    if(empty($_POST["message"])){
        $messageErr = "Please enter your comment.";     
    } else{
        $message = filterString($_POST["message"]);
        if($message == FALSE){
            $messageErr = "請輸入有效的評論。";
        }
    }
    
    //發(fā)送電子郵件前檢查輸入錯誤
    if(empty($nameErr) && empty($emailErr) && empty($messageErr)){
        // Recipient email address
        $to = 'webmaster@example.com';
        
        // Create email headers
        $headers = 'From: '. $email . "\r\n" .
        'Reply-To: '. $email . "\r\n" .
        'X-Mailer: PHP/' . phpversion();
        
        // Sending email
        if(mail($to, $subject, $message, $headers)){
            echo '<p class="success">您的留言已成功發(fā)送!</p>';
        } else{
            echo '<p class="error">無法發(fā)送電子郵件。 請?jiān)僭囈淮?</p>';
        }
    }
}
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Contact Form</title>
    <style type="text/css">
        .error{ color: red; }
        .success{ color: green; }
    </style>
</head>

    <h2>聯(lián)系我們</h2>
    <p>請?zhí)詈眠@張表格并寄給我們</p>
    <form action="contact.php" method="post">
        <p>
            <label for="inputName">Name:<sup>*</sup></label>
            <input type="text" name="name" id="inputName" value="<?php echo $name; ?>">
            <span class="error"><?php echo $nameErr; ?></span>
        </p>
        <p>
            <label for="inputEmail">Email:<sup>*</sup></label>
            <input type="text" name="email" id="inputEmail" value="<?php echo $email; ?>">
            <span class="error"><?php echo $emailErr; ?></span>
        </p>
        <p>
            <label for="inputSubject">Subject:</label>
            <input type="text" name="subject" id="inputSubject" value="<?php echo $subject; ?>">
        </p>
        <p>
            <label for="inputComment">Message:<sup>*</sup></label>
            <textarea name="message" id="inputComment" rows="5" cols="30"><?php echo $message; ?></textarea>
            <span class="error"><?php echo $messageErr; ?></span>
        </p>
        <input type="submit" value="發(fā)送">
        <input type="reset" value="重置">
    </form>

</html>

代碼的用法

您可能會想到該代碼的全部含義。好吧,讓我們直接進(jìn)入。

  • filterName()函數(shù)驗(yàn)證輸入值是否為人名。 有效名稱只能包含字母字符(a-z、A-Z)。

  • filterEmail()函數(shù)將輸入值驗(yàn)證為電子郵件地址。

  • filterString()函數(shù)僅通過清理HTML標(biāo)記和特殊字符來清理輸入值。 它不會對任何輸入值進(jìn)行驗(yàn)證。

  • 標(biāo)記內(nèi)<form>的屬性action="contact.php"指定同一contact.php文件顯示表單并處理表單數(shù)據(jù)。

  • <input><textarea>的值屬性內(nèi)的PHP代碼,例如<?php echo $name; ?>當(dāng)形式時(shí)驗(yàn)證錯誤重新顯示顯示預(yù)先填充值。

  • .error類內(nèi)的PHP代碼,例如<span class="error"><?php echo $nameErr; ?></span>顯示相應(yīng)字段的錯誤。

 要了解有關(guān)清理和驗(yàn)證過濾器的更多信息,請查閱PHP過濾器參考。

注意:您需要在計(jì)算機(jī)上設(shè)置郵件服務(wù)器,PHP mail()函數(shù)才能正常工作。如果您只想執(zhí)行表單驗(yàn)證,則可以用自己的自定義代碼替換郵件部分。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清