My Web道

WEB制作科 受講記録 …とその後も続くWEB制作に関する活動・学習記録です。

6/4 [PHP] メールフォーム(エラーチェック機能の追加)

本日の学習課題
  • [PHP] メールフォーム(エラーチェック機能の追加)
    1. 文字数チェック
    2. 全角半角チェック
    3. メールアドレスチェック

    本日の進行

    init.phpの書き換え

    以下書き換え

    [変更前]

    require_once 'init.php';

    [変更後]

    require_once(dirname(__FILE__)).'/init.php';

    ↑ 親パスを取得している。
    dirname()内File前後のアンダースコアは、2×2 (計4)
    'init.php'の前のスラッシュは必須(無いとエラーになる)

    check.phpの修正

    エラーチェック機能を強化する


    1. 文字数チェック

    名前が30文字以内であるかをチェック
    《check.php

    if( mb_strlen($name) > 30 ) {
      $name_error = 'お名前の入力文字数が多すぎます。';
      $error = false;
    }
    


    2. 全角半角チェック

    email、電話番号が半角入力されているかをチェック

    if(strlen($tel) !==mb_strlen($tel, "UTF-8")){
    $tel_error = 'すべて半角数字で入力してください。';
    $error = false;
    } else {
    if( strlen($tel) > 13 ) {
      $tel_error = '電話番号の入力文字数が多すぎます。';
      $error = false;
    } 
    }
    


    3. メールアドレスチェック

    メールアドレス 入直値の正当性チェック

    if( strlen($email) > 50 ) {
      $email_error = 'メールアドレスの入力文字数が多すぎます。';
      $error = false;
    }
    if(strpos($email,'@')===false) {
      $email_error = '不正なメールアドレスです。';
      $error = false;
    }
    

    [ソースコード]
    《check.php

    <?php 
    require_once(dirname(__FILE__)).'/init.php';
    //require_once 'init.php';
    
    //空データチェック
    //データがなければ先頭(入力)ページに戻す
    if(empty($_POST)) {
      header('Location:index.php');
      exit;     
    }
    
    //var_dump($_POST);
    //print_r($_POST);
    $name = $_POST['name'];
    $email = $_POST['email'];
    $tel = $_POST['tel'];
    $message = $_POST['message'];
    $error = true;
    //echo '('.$name.')';
    $name_error = '';
    $email_error = '';
    $tel_error = '';
    $message_error = '';
    
    
    if( mb_strlen($name) > 30 ) {
      $name_error = 'お名前の入力文字数が多すぎます。';
      $error = false;     
    }
    //受け取れるメールアドレスの限界値は320
    //ローカルパート(@の前は64文字)
    if( mb_strlen($email) > 50 ) {
      $email_error = 'メールアドレスの入力文字数が多すぎます。';
      $error = false;     
    }
    
    //
    
    if( mb_strlen($tel) > 13 ) {
      $tel_error = '電話番号の入力文字数が多すぎます。';
      $error = false;     
    } 
    
    if( mb_strlen($message) > 128 ) {
      $message_error = 'お問い合わせ内容の入力文字数が多すぎます。';
      $error = false;     
    }
    
    //メールアドレス@チェック
    if(strpos($email,'@')===false) {
      $email_error = '不正なメールアドレスです。';
      $error = false;     
    }
    
    //半角入力チェック(email)
    if(strlen($email) !==mb_strlen($email, "UTF-8")){
         $email_error = 'すべて半角数字で入力してください。';
         $error = false;
    } 
    
    //半角入力チェック(電話番号)
    if(strlen($tel) !==mb_strlen($tel, "UTF-8")){
         $tel_error = 'すべて半角数字で入力してください。';
         $error = false;
    } 
    
    //空文字チェック
    if($name =='') {
      $name_error = 'お名前が、入力されていません。';
      $error = false;     
    }
    if($email =='') {
      $email_error = 'メールアドレスが、入力されていません。';
      $error = false;     
    }
    if($tel =='') {
      $tel_error = 'お電話番号が、入力されていません。';
      $error = false;     
    }
    if($message =='') {
      $message_error = 'メッセージが、入力されていません。';
      $error = false;     
    }
    
    //エラーチェックをこの直前に挿入(6/5)
    $_SESSION['mail_data']['name'] = $name;
    //var_dump($_SESSION['mail_data']['name']);
    $_SESSION['mail_data']['email'] = $email;
    //var_dump($_SESSION['mail_data']['email']);
    $_SESSION['mail_data']['tel'] = $tel;
    //var_dump($_SESSION['mail_data']['tel']);
    $_SESSION['mail_data']['message'] = $message;
    //var_dump($_SESSION['mail_data']['message']);
    $_SESSION['mail_data']['error'] = $error;
    ?>
    
    <!DOCTYPE html>
    <html lang="ja">
    <head>
    <meta charset="UTF-8">
    <title>お問い合わせ確認画面</title>
    <link rel="stylesheet" href="css/style1.css">
    </head>
    <body>
    <div id="container">
    <h1>お問い合わせ確認</h1>
    <table>
    <tr>
    <th>お名前:</th><td><?php echo h($name).h($name_error); ?></td>
    </tr>
    <tr>
    <th>email:</th><td><?php echo h($email).h($email_error); ?></td>
    </tr>
    <tr>
    <th>お電話番号:</th><td><?php echo h($tel).h($tel_error); ?></td>
    </tr>
    <tr>
    <th>お問い合わせ内容:</th><td><?php echo nl2br(h($message).h($message_error)); ?></td>
    </tr>
    </table>
    <p><a href="index.php">戻る</a>
    <?php 
    if($error) {
    echo '<a href="thanks.php">送信</a>';
    }
    ?>
    </p>
    </div>
    </body>
    </html>
    <?php ob_end_flush(); 
    
    入力チェックについて

    参考サイト:

    入力チェック(正規表現含む)|formオブジェクト|JavaScript/DOM|PHP & JavaScript Room:
    http://phpjavascriptroom.com/?t=js&p=formcheck

    全角入力のみかチェック | しんちゃんのPHP入門道場:
    http://www.n-shinchan.com/?pi=4&ci=70