
phpのメール問い合わせフォームでエラーが・・
phpでメール問い合わせフォームを作り、テストプレイしたのですが、
CSRFトークンが無効です
とエラー画面が出ます。。どう修正すればいいでしょうか、、
phpコードは下記です。
<?php
session_start();
session_regenerate_id(true); // セッションID再生成
$mode = 'input'; // 初期状態は入力画面
$errmessage = array();
// CSRFトークンの生成
if (empty($_SESSION['token'])) {
$_SESSION['token'] = bin2hex(random_bytes(32)); // セッションにトークンを格納
}
// 送信ボタンが押された場合
if (isset($_POST['send']) && $_POST['send']) {
// トークンの存在確認
if (empty($_POST['token']) || $_POST['token'] !== $_SESSION['token']) {
die('CSRFトークンが無効です');
}
// 入力チェック
if (empty($_POST['fullname'])) {
$errmessage[] = "名前を入力してください";
} else if (mb_strlen($_POST['fullname']) > 20) {
$errmessage[] = "名前は20文字以内にしてください";
}
$_SESSION['fullname'] = htmlspecialchars($_POST['fullname'], ENT_QUOTES);
if (empty($_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 (empty($_POST['message'])) {
$errmessage[] = "お問い合わせ内容を入力してください";
} else if (mb_strlen($_POST['message']) > 500) {
$errmessage[] = "お問い合わせ内容は500文字以内にしてください";
}
$_SESSION['message'] = htmlspecialchars($_POST['message'], ENT_QUOTES);
// エラーがなければ送信処理
if (empty($errmessage)) {
// メール送信処理
$message = "お問い合わせを受け付けました \r\n"
. "名前: " . htmlspecialchars($_SESSION['fullname'], ENT_QUOTES) . "\r\n"
. "Eメール: " . htmlspecialchars($_SESSION['email'], ENT_QUOTES) . "\r\n\n"
. "お問い合わせ内容:\r\n" . preg_replace("/\r\n|\r|\n/", "\r\n", htmlspecialchars($_SESSION['message'], ENT_QUOTES));
// ユーザーへの確認メール送信
mail($_SESSION['email'], 'お問い合わせありがとうございます', $message);
// 管理者への通知メール送信
mail('aaaaaa@gmail.com', 'お問い合わせがありました', $message);
// セッションをクリアして完了画面を表示
$_SESSION = array();
$mode = 'send';
}
} else {
// 入力画面
$mode = 'input';
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>お問い合わせフォーム</title>
</head>
<body>
<?php if ($mode == 'input') { ?>
<!-- 入力画面 -->
<?php
if ($errmessage) {
echo '<div style="color:red;">';
echo implode('<br>', array_map('htmlspecialchars', $errmessage));
echo '</div>';
}
?>
<form action="contactform.php" method="post">
名前<input type="text" name="fullname" value="<?php echo $_SESSION['fullname'] ?? ''; ?>"><br>
Eメール<input type="email" name="email" value="<?php echo $_SESSION['email'] ?? ''; ?>"><br>
お問い合わせ内容<br>
<textarea cols="40" rows="8" name="message"><?php echo $_SESSION['message'] ?? ''; ?></textarea><br>
<!-- トークンの送信 -->
<input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>">
<input type="submit" name="send" value="送信" />
</form>
<?php } else if ($mode == 'send') { ?>
<!-- 完了画面 -->
<p>送信しました。お問い合わせありがとうございました。</p>
<?php } ?>
</body>
</html>
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
session_regenerate_id(true) にて古いセッションを削除したので、
$_SESSION['token'] が削除され、
その後のトークン存在確認が失敗していると思われます。
セッションの削除は、必要なセッション読み取りを終えた後で行いましょう。
参考)
https://www.php.net/manual/ja/function.session-r …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
vscodeにのcssについて質問です。 introduction.cssに背景.pngに保存してあ
HTML・CSS
-
数学、プログラミング、物理、化学など理系の方に質問 プログラミング言語、数式、化学式などで会話をしよ
その他(プログラミング・Web制作)
-
C言語 関数、変数の宣言について
C言語・C++・C#
-
-
4
C言語について(初心者)
C言語・C++・C#
-
5
ワードプレスでのHP製作はなぜ多いでしょうか?どんなメリットあるのでしょうか?
SEO
-
6
CSVファイルの複数行削除
その他(プログラミング・Web制作)
-
7
パイソンのソースコードをChatGPTで書いてもらうのを独学でやろうと思うとどういう方法がオススメで
その他(プログラミング・Web制作)
-
8
vbsでのwebフォームへの入力制限?
Visual Basic(VBA)
-
9
レスポンシブで困っています・・
HTML・CSS
-
10
chatGPTみたいに画像生成出来るサイトを教えてください!無料で、!! cheatGPTのプライム
CGI
-
11
php でqiitaのサイトにあったファイルのダウンロード関数を使ってダウンロードしているのですが
PHP
-
12
あってる
C言語・C++・C#
-
13
以下のプログラムの実行結果はどうなると思いますか? その理由も教えてください。
Visual Basic(VBA)
-
14
VBAでFOR NEXT分を Application.OnTimeを使って
Visual Basic(VBA)
-
15
submitで思うようにページが遷移しない
PHP
-
16
jsで質問です。 formをsubmitしてサーバー側で処理が行われて処理が完了したら、フロント側で
JavaScript
-
17
プログラミングc++を全く分からない状態から習得するまでどれくらいかかりますか?なぜ難しいと言われて
C言語・C++・C#
-
18
Dreamweverは今も主流なんですか? 昔使われてたツールだって言う人もいたけど、殆どの会社はこ
HTML・CSS
-
19
改行文字「vbCrLf」とは
Visual Basic(VBA)
-
20
エクセルの改行について
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpのheader("Location:#pos")...
-
PHPのエラーの解消法について教...
-
セッション関数を使わずにファ...
-
PHP8でWarning:Undefined varia...
-
composerをインストールしたい...
-
フォームで戻った際に入力済み...
-
SplFileObject を利用したとき...
-
phpの問い合わせフォームを作っ...
-
marginの値でマイナス値を設定...
-
submitで思うようにページが遷...
-
HTML PHP ラジオボタンのイベント
-
php でqiitaのサイトにあったフ...
-
PHPの勉強してます。 配列のと...
-
BASIC認証のフォームをデザイン...
-
アップロードファイルを表示す...
-
複数のパソコンの中の1つのパソ...
-
返信機能のツリー構造の深さを...
-
PHPについて。
-
PHPからCSVをアップロード後、m...
-
[php初心者]サイトを見てデータ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
phpの問い合わせフォームを作っ...
-
入力窓にカーソルを合わせると...
-
ホームぺージ作成において・・・・
-
クリックすると文字が消えるHTML
-
Flash5で送信ボタンをつけたい...
-
ホームページビルダーでのメー...
-
メール送信フォームでの質問。
-
携帯HPのフォーム内容を受け...
-
ソースネクスト ホームページZE...
-
【HP作成】ロールオーバーイメ...
-
「戻る」を押しても戻らないweb...
-
通知文の文中に「以下に示すよ...
-
静止画画像をクリックすると音...
-
Webサイト内に埋め込んだmp4動...
-
被リンクを無料で増やすための...
-
「全面リニューアル」の意味
-
リロードした時にページの一番...
-
トップページの配下にあるペー...
-
Wordで文字を打ってEnterを押す...
-
ホームページにブログ更新情報...
おすすめ情報