English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

PHP 基礎チュートリアル

PHP 高級チュートリアル

PHP & MySQL

PHP リファレンスマニュアル

PHPのフォーム検証

このチュートリアルでは、PHPフィルタを使用してフォームデータをクリーンアップし、バリデーションする方法を学びます。

フォームデータのクリーンアップとバリデーション

前のチュートリアルで見たように、フォームデータのキャプチャと表示プロセスは非常にシンプルです。このチュートリアルでは、ユーザーがメールを通じてコメントやフィードバックを送信できる簡単な連絡フォームを実装する方法を学びます。同じPHP mail()関数メールを送信するために

また、ユーザーがウェブサイトのセキュリティに危害を加えたり、アプリケーションを破壊する可能性のある有害データを挿入できないようにするための基本的なセキュリティ機能を実装します。ユーザー入力のクリーンアップとバリデーションです。

以下は、以下の操作を実行する私たちのマルチインワンPHPスクリプトです:

  • ユーザーがこのサイトに対するコメントを入力するように求められます。

  • 同じスクリプトが連絡フォームを表示し、送信されたフォームデータを処理します。

  • このスクリプトは、必須フィールド(*),または入力が不正でバリデーションに失敗した場合、フォームが再表示され、対応するフォームフィールドにエラーメッセージが表示されます。

  • このスクリプトは、ユーザーが入力したフィールドを覚え、バリデーションエラーが発生してフォームが再表示された場合にこれらのフィールドを事前にフィルルタリングします。

  • ユーザーが送信したデータが受け入れ可能で、全てが順調に行われた場合、サイト管理者にメールを送信し、ユーザーに成功メッセージを表示します。

「contact.php」ファイルに以下のコードを入力し、プロジェクトのルートディレクトリに保存してください:

<?php
//ユーザー入力のフィルタリング関数
function filterName($field){
    //ユーザー名をクリーンアップする
    $field = filter_var(trim($field), FILTER_SANITIZE_STRING);
    
    //ユーザー名の確認
    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);
    
    // メールアドレスの確認
    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;
    }
}
 
//変数を定義し、空値で初期化する
$nameErr = $emailErr = $messageErr = "";
$name = $email = $subject = $message = "";
 
//フォームの提出時にフォームデータを処理する
if($_SERVER["REQUEST_METHOD"] == "POST"){
 
    // ユーザー名の確認
    if(empty($_POST["name"])){
        $nameErr = "Please enter your name.";
    } else{
        $name = filterName($_POST["name"]);
        if($name == FALSE){
            $nameErr = "有効な名前を入力してください。";
        }
    }
    
    // メールアドレスの確認
    if(empty($_POST["email"])){
        $emailErr = "あなたのメールアドレスを入力してください。";     
    } else{
        $email = filterEmail($_POST["email"]);
        if($email == FALSE){
            $emailErr = "Please enter a valid email address.";
        }
    }
    
    // メッセージおよび件名の確認
    if(empty($_POST["subject"])){
        $subject = "";
    } else{
        $subject = filterString($_POST["subject"]);
    }
    
    // ユーザーのコメントを確認する
    if(empty($_POST["message"])){
        $messageErr = "Please enter your comment.";     
    } else{
        $message = filterString($_POST["message"]);
        if($message == FALSE){
            $messageErr = "有効なコメントを入力してください。";
        }
    }
    
    //メールを送信する前に入力エラーを確認してください
    if(empty($nameErr) && empty($emailErr) && empty($messageErr)){
        // Recipient email address
        $to = '[email protected]';
        
        // 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">あなたのメッセージが成功で送信されました!</p>';
        } else{
            echo '<p class="error">メールを送信できませんでした。もう一度お試しください!</p>';
        }
    }
}
?>
!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8>
    <title>Contact Form</title>
    <style type="text/css">
        
        
    </style>
</head>
    <h2>お問い合わせ</h2>
    <p>お手続きいただいたフォームを送信してください</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">件名:</label>
            <input type="text" name="subject" id="inputSubject" value="<?php echo $subject; ?>">
        </p>
        <p>
            <label for="inputComment">メッセージ:<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="送信">
        <input type="reset" value="リセット">
    </form>
</html>

コードの使い方

このコード全体の意味が理解できるかもしれませんね。それでは、直接進みましょう。

  • filterName()関数は、入力値が人名として有効かどうかを確認します。有効な名前は、アルファベット文字(a-z、A-Z)。

  • filterEmail()関数は、入力値がメールアドレスとして有効かどうかを確認します。

  • filterString()関数は、HTMLタグと特殊文字をクリーンアップするだけで、入力値を確認しません。

  • タグ内<form>の属性action="contact.php"が同じcontact.phpファイルを指定して、フォームを表示し、フォームデータを処理します。

  • <input>および<textarea>のvalue属性内のPHPコード、例えば<?php echo $name; ?>フォームがバリデーションエラー時、事前に埋め込まれた値を再表示。

  • .errorクラス内のPHPコード、例えば<span class="error"><?php echo $nameErr; ?>/span>対応するフィールドのエラーメッセージを表示。

 フィルタのクリーンアップとバリデーションの詳細情報を知りたい場合は、以下を参照してください。PHPフィルタ参照。

注意:コンピュータ上でメールサーバーを設定する必要があります。PHP mail()関数が正常に動作するためです。フォームのバリデーションのみを実行したい場合は、メール部分をカスタムコードで置き換えることができます。