前提・実現したいこと
自作メールフォームからメールを送った場合に、
送信側、受信側に内容に漏れがなくメールが届く状態にしたい
発生している問題・エラーメッセージ
①確認画面への移行時に名前の入力部分が消える
②メールを送信するとメールは届くが、名前、email、内容が消えた状態でメールが届く
該当のソースコード
<?php session_start(); $mode = 'input'; $errmessage = array(); if( isset($_POST['back']) && $_POST['back'] ){ // 何もしない } else if( isset($_POST['confirm']) && $_POST['confirm'] ){ // 確認画面 if( !$_POST['fullname'] ) { $errmessage[] = "名前を入力してください"; } else if( mb_strlen($_POST['fullname']) > 100 ){ $errmessage[] = "名前は100文字以内にしてください"; } $_SESSION['fullname'] = htmlspecialchars($_POST['fullname'], ENT_QUOTES); if( !$_POST['email'] ) { $errmessage[] = "Eメールを入力してください"; } else if( mb_strlen($_POST['email']) > 200 ){ $errmessage[] = "Eメールは200文字以内にしてください"; } else if( !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) ){ $errmessage[] = "メールアドレスが不正です"; } $_SESSION['email'] = htmlspecialchars($_POST['email'], ENT_QUOTES); if( !$_POST['message'] ){ $errmessage[] = "お問い合わせ内容を入力してください"; } else if( mb_strlen($_POST['message']) > 500 ){ $errmessage[] = "お問い合わせ内容は500文字以内にしてください"; } $_SESSION['message'] = htmlspecialchars($_POST['message'], ENT_QUOTES); if( $errmessage ){ $mode = 'input'; } else { $mode = 'confirm'; } } else if( isset($_POST['send']) && $_POST['send'] ){ // 送信ボタンを押したとき $message = "お問い合わせを受け付けました \r\n" . "名前: " . $_SESSION['fullname'] . "\r\n" . "email: " . $_SESSION['email'] . "\r\n" . "お問い合わせ内容:\r\n" . preg_replace("/\r\n|\r|\n/", "\r\n", $_SESSION['message']); mail($_SESSION['email'],'お問い合わせありがとうございます',$message); mail('※個人情報のためメールアドレス省略','お問い合わせありがとうございます',$message); $_SESSION = array(); $mode = 'send'; } else { $_SESSION['fullname'] = ""; $_SESSION['email'] = ""; $_SESSION['message'] = ""; } ?> <head> <meta charset="utf-8"> <title>お問い合わせフォーム</title> </head> <body> <?php if( $mode == 'input' ){ ?> <!-- 入力画面 --> <?php if( $errmessage ){ echo '<div style="color:red;">'; echo implode('<br>', $errmessage ); echo '</div>'; } ?> <div id="contact-title"> <h1><p>Contact</p></h1> </div> <form action="" method="post" class="nyuryoku"> <h2> <p>名前</p> <input type="text" class="name" name="fullname" value="<?php echo $_SESSION['fullname'] ?>"> <p>Eメール</p> <input type="email" class="email" name="email" value="<?php echo $_SESSION['email'] ?>"> </h2> <h3>お問い合わせ内容</h3> <textarea cols="40" rows="8" name="message" style="border: solid 1px #ddd;"><?php echo $_SESSION['message'] ?></textarea><br> <input type="submit" name="confirm" value="確認" / style="border: solid 1px #ddd; width: 150px; margin-top: 30px;"> </form> <?php } else if( $mode == 'confirm' ){ ?> <!-- 確認画面 --> <form action="" class="confirm" method="post"> 名前: <?php echo $_SESSION['fullname'] ?><br> Eメール:<?php echo $_SESSION['email'] ?><br> お問い合わせ内容<br> <?php echo nl2br($_SESSION['message']) ?><br> <input type="submit" class="back" name="back" value="戻る" /> <input type="submit" class="send"name="send" value="送信" /> </form> <?php } else { ?> <!-- 完了画面 --> <h6>送信しました。 <br>お問い合わせありがとうございました。</h6> <a href="http://clover.gonna.jp/" class="btn04 home"><span>TOPへ</span></a> <?php } ?>試したこと
} else {
$_SESSION['fullname'] = "";
$_SESSION['email'] = "";
$_SESSION['message'] = "";
}
の部分で、送信前に実行されている可能性がある。
} else {
$_SESSION['fullname'] = "a";
$_SESSION['email'] = "b";
$_SESSION['message'] = "c";
}
上記のように記入し、変化がないか確認したところ、
入力画面に文字が入った状態になりました。
やはりお教え頂いた通り、どこかで $_SESSIONの部分が空になっているのでしょうか?
補足情報(FW/ツールのバージョンなど)
Wordpressをかませて問い合わせフォームを実装しています。
メールの送信自体は問題なくできているのですが、メールを送ると上記写真のように内容が消えております。
ほぼ初心者のため、どなたかお教え頂けますと幸いです。
回答2件
あなたの回答
tips
プレビュー