Html and PHP | python3Xのブログ

python3Xのブログ

ここでは40代、50代の方が日々の生活で役に立つ情報や私の趣味であるプログラム、Excelや科学に関する内容で投稿する予定です。

前回に画像をアップした「メルマガ登録フォーム」

その中で、実際に名前とメールアドレスを入力する「フォーム」

入力した内容を自身のメールで受け取るための「PHPプログラム」

 

それぞれの内容を下にアップします。

今回は、セキュリティーを強化しました。

 

URLはスマホの「Edge」か「Google Chrome」でないと上手く表示されません。

 

あなたが、他の項目も追加したい場合は、コピペして、

その項目を追加してやるだけで「自分の得たい見込み客からの情報」

メールで送られてきます。

 

mailForm.php

<?php
session_start();

//クリックジャッキング対策
header('X-FRAME-OPTIONS: SAMEORIGIN');

// トークン生成(CSRF対策)
if (!isset($_SESSION['token'])) {
    $_SESSION['token'] = sha1(random_bytes(30));
}

// HTML特殊文字をエスケープする関数
function escape($str) {
    return htmlspecialchars($str,ENT_QUOTES,'UTF-8');
}
?>
<html>
<title>メルマガ登録フォーム</title>
<head>
  <meta charset="utf-8"/>
<style>
body {
          background-image: url("img/roman-holiday.png");
          background-repeat:no-repeat;
          background-size:cover;          
}
input.example{ width: 200%; }
.txt1{font-size: 2.5rem;}
</style>
</head>
    <body>
    <center>
    <h1>メルマガ登録</h1>
        <div class="comment">
            <form action="mailConfirm2.php" method="POST">
                <div class="wrapper">
                    <div class="txt1">Name<span style="color:red">(必須)</span></div>
                    <div>
                        <input type="text" name="name" class="txt1" placeholder="全角20文字以内" required>
                    </div>
                </div>

                <div class="wrapper">
                    <div class="txt1">Contact<span class="txt1" style="color:red">(必須)</span></div>
                    <div>
                        <input id="contact_mail" name="adress_mail" type="text" class="txt1" placeholder="Mail(半角30文字以内)">
                    </div>
                </div>

                <div class="wrapper">
                    <div class="txt1">Comment<span class="txt1" style="color:red">(必須)</span></div>
                    <div class="insert">
                        <textarea name="comment" class="txt1" placeholder="全角200文字以内" required></textarea>
                    </div>
                </div>
                <input type="hidden" name="token" value="<?=$_SESSION['token']?>">
                <div class="submit">
                    <input class="txt1" type="submit" value="送信">
                </div>
            </form>
        </div>
       </center>
    </body>
</html>

 

mailConfirm.php

<?php
session_start();

//クリックジャッキング対策
header('X-FRAME-OPTIONS: SAMEORIGIN');

// HTML特殊文字をエスケープする関数
function escape($str) {
    return htmlspecialchars($str,ENT_QUOTES,'UTF-8');
}

//前後にある半角全角スペースを削除する関数
function spaceTrim ($str) {
    // 行頭
    $str = preg_replace('/^[  ]+/u', '', $str);
    // 末尾
    $str = preg_replace('/[  ]+$/u', '', $str);
    return $str;
}

//tokenを変数に入れる
$token = $_POST['token'];

// トークンを確認し、確認画面を表示
if(!(hash_equals($token, $_SESSION['token']) && !empty($token))) {
    echo "不正アクセスの可能性があります";
    exit();
}

//POSTされたデータを各変数に入れる
$name = isset($_POST['name']) ? $_POST['name'] : NULL;
$mail = isset($_POST['adress_mail']) ? $_POST['adress_mail'] : NULL;
$comment = isset($_POST['comment']) ? $_POST['comment'] : NULL;

//前後にある半角全角スペースを削除
$name = spaceTrim($name);
$mail = spaceTrim($mail);
$comment = spaceTrim($comment);

//名前入力判定
if ($name == ''){
    $errors['name'] = "名前が入力されていません。";
}

//メール入力判定
if ($mail == ''){
    $errors['mail'] = "メールが入力されていません。";
}

//コメント入力判定
if ($comment == ''){
    $errors['comment'] = "コメントが入力されていません。";
}

//エラーが無ければセッションに登録
if(count($errors) === 0){
    $_SESSION['name'] = $name;
    $_SESSION['mail'] = $mail;
    $_SESSION['comment'] = $comment;
}
?>

<html>
<head>
<title>確認ページ</title>
  <meta charset="utf-8"/>
<style>
body {
          background-image: url("img/roman-holiday.png");
          background-repeat:no-repeat;
          background-size:cover;          
}
input.example{ width: 200%; }
.txt1{font-size: 2.5rem;}
</style>
</head>
    <body>
     <center>
        <form method="post" action="mailSend.php">
            <table>
                <tr>
                    <th class="txt1">お名前</th>
                    <td  class="txt1"><?php echo escape($name); ?></td>
                </tr>
                <tr>
                    <th class="txt1">メールアドレス</th>
                    <td  class="txt1"><?php echo escape($mail); ?></td>
                </tr>
                <tr>
                    <th class="txt1">ご要望・その他</th>
                    <td  class="txt1"><?php echo nl2br(escape($comment)); ?></td>
                </tr>
            </table>
            <input class="txt1" type="button" value="戻る" onClick="history.back()">
            <input type="hidden" name="token" value= <?php echo escape($token); ?>>
            <button class="txt1">送信</button>
        </form>
       </center>
    </body>
</html>

 

mailSend.php

<?php
session_start();

//クリックジャッキング対策
header('X-FRAME-OPTIONS: SAMEORIGIN');

// HTML特殊文字をエスケープする関数
function escape($str) {
    return htmlspecialchars($str,ENT_QUOTES,'UTF-8');
}

//前後にある半角全角スペースを削除する関数
function spaceTrim ($str) {
    // 行頭
    $str = preg_replace('/^[  ]+/u', '', $str);
    // 末尾
    $str = preg_replace('/[  ]+$/u', '', $str);
    return $str;
}

//tokenを変数に入れる
$token = $_POST['token'];


?>

<html>
<head>
<title>送信ページ</title>
  <meta charset="utf-8"/>
<style>
body {
          background-image: url("img/roman-holiday.png");
          background-repeat:no-repeat;
          background-size:cover;          
}
input.example{ width: 200%; }
.txt1{font-size: 2.5rem;}
</style>
</head>
    <body>
     <center class="txt1">
        <?php
            $to = 'xxxxxxx@gmail.com';

            mb_language('japanese');
            mb_internal_encoding('UTF-8');

            $from = $_SESSION['mail'];
            $mail = $_SESSION['mail'];
            $name = $_SESSION['name'];
            $comment = $_SESSION['comment'];
            $headers = 'xxxxxx@e3.valueserver.jp'
            $subject = 'メルマガ登録';
            $body = $comment. "\n". $name. "\n". $mail;

            $success = mb_send_mail($to, $subject, $body, 'From: '.$from);
        ?>

        <div id="tyMessage">
        <?php if ($success) : ?>
        登録が完了しました!
        <?php else : ?>
        申し訳ありません。エラーのため登録出来ませんでした。<br>
        <?php endif; ?>
        <a href="registration.php">Homeに戻る</a><br>
        </div>
       </center>
    </body>
</html>