お問い合わせフォームのクロスサイトリクエストフォージェリ対策、トークンの発行で未定義の変数エラー
「PHP入門 確認画面付きのお問い合わせフォームをつくりながらPHPを学ぶ(第2版)」で学んでいる初学者です。
クロスサイトリクエストフォージェリ対策で、ワンタイムチケットの発行をする必要があるとのことで
お問い合わせ確認画面に下記コードを実装しました。
変数は$tokenで定義しているかと思うのですが、エラーの解消法がわからずつまってしまいました。
大変初歩的な問題ですが、ご教授くださいますと幸いです。
発生している問題・エラーメッセージ
お問い合わせフォームに入力、確認画面に進むと下記エラーメッセージが出ます。
Fatal error: Uncaught Error: Call to undefined function openssl_random_pseudo_bytes() ~
該当のソースコード
<?php session_start() ; if(isset($_SESSION['name'])) { $name = $_SESSION['name'] ; $email = $_SESSION['email'] ; $subject = $_SESSION['subject'] ; $body = $_SESSION['body'] ; } $_SESSION['token'] = base64_encode(openssl_random_pseudo_bytes(48)); $token = htmlspecialchars($_SESSION['token'], ENT_QUOTES); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>確認画面 | お問い合わせ</title> </head> <body> <form action ="thanks.php" method ="post"> <input type ="hidden" name ="token" value ="<?php echo $token ?>"> <table> <tr> <th>お名前</th> <td><?php echo $name; ?></td> </tr> <tr> <th>メールアドレス</th> <td><?php echo $email; ?></td> </tr> <tr> <th>お問い合わせの種類</th> <td><?php echo $subject; ?></td> </tr> <tr> <th>お問い合わせ内容</th> <td><?php echo nl2br($body) ; ?></td> </tr> <tr> <td colspan="2"> <input type="submit" name="submit" value="送信する"></td> </tr> </table> </form> <p><a href="form.php?action=edit">入力画面に戻る</a></p> </body> </html>
環境構築手順にミスが無いか確認しましょう。
書籍通りにやっていて動作しないのなら訂正があるかもしれないので出版元サイトの訂正情報でも確認してみましょう。