teratail header banner
teratail header banner
質問するログイン新規登録
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

2004閲覧

PHPのバリデーションメッセージが表示されない

masaa0802

総合スコア28

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2022/03/14 01:13

0

0

実現したいこと

イメージ説明
上記のバリデーションエラーを実行するとなぜかお問い合わせ内容のエラーメッセージのみでません。エラーの該当箇所がphpコードなので、他の箇所も調べましたが、原因がわからない状態です。実現したいことはお問い合わせ内容のエラーメッセージを表示させたいです。ご教授をお願い致します。

エラー内容

Notice: Undefined index: body in C:\xampp\xampp\htdocs\geekation_php_advanced-main-PHP-\PHP応用_演習\Views\contact.php on line 143

該当ソースコード

php

1<?php if (!empty($errors)) $errors['body'] ?>

ソースコード

php

1<?php 2// 使用する変数を初期化 3$name = ''; 4$kana = ''; 5$tel= ''; 6$email = ''; 7$body = ''; 8$page_flag = 0; 9 10if(!empty($_POST['btn_confirm']) ) { 11$errors = validation(); 12 if(empty($errors) ) { 13 $page_flag = 1; 14 } 15} elseif (!empty($_POST['btn_submit'])) { 16 $page_flag = 2; 17} 18 19function validation(){ 20 // エラー内容 21 $errors = []; 22 // 送信データをチェック 23 if (isset($_POST)) { 24 // 氏名 25 if (empty($_POST['name'])) { 26 $errors['name'] = '氏名は必須項目です。'; 27 } 28 // フリガナ 29 if (empty($_POST['kana'])) { 30 $errors['kana'] = 'フリガナは必須項目です。'; 31 } 32 // 電話番号 33 if (preg_match('/^[0-9]+$/', $_POST['tel']) === 0) { 34 $errors['tel'] = '正しい電話番号を入力してください。'; 35 } 36 // メールアドレス 37 if (empty($_POST['email'])) { 38 $errors['email'] = 'メールアドレスは必須項目です。'; 39 } elseif (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { 40 $errors['email'] = '正しいEメールアドレスを指定してください。'; 41 } 42 // お問い合わせ内容 43 if (empty($_POST['body'])) { 44 $errors['body'] = 'お問い合わせ内容は必須項目です。'; 45 } 46 } 47 return $errors; 48} 49?> 50 51<!DOCTYPE html> 52<html lang="ja"> 53 <head> 54 <title>お問い合わせフォーム</title> 55 <link rel="stylesheet" href="css/style.css"> 56 </head> 57<body> 58<?php if( $page_flag === 1 ): ?> 59 <h1> 確認画面</h1> 60 <form action= "" method="post"> 61 <!-- 氏名 --> 62 <div class="element_wrap_p"> 63 <label for="name">氏名</label> 64 <p><?php echo $_POST['name']; ?></p> 65 </div> 66 <!-- フリガナ --> 67 <div class="element_wrap_p"> 68 <label for="kana">フリガナ</label> 69 <p><?php echo $_POST['kana']; ?></p> 70 </div> 71 <!-- 電話番号 --> 72 <div class="element_wrap_p"> 73 <label for="tel">電話番号</label> 74 <p><?php echo $_POST['tel']; ?></p> 75 </div> 76 <!-- メールアドレス --> 77 <div class="element_wrap_p"> 78 <label for="email">メールアドレス</label> 79 <p><?php echo $_POST['email']; ?></p> 80 </div> 81 <!-- お問い合わせ内容 --> 82 <div class="element_wrap_p"> 83 <label for="body">*お問い合わせ内容</label><br> 84 <p><?php echo $_POST['body']; ?></p> 85 </div> 86 <input type="submit" name="btn_back" value="キャンセル"> 87 <input type="submit" name="btn_submit" value="送信"> 88 <input type="hidden" name="name" value="<?php echo $_POST['name']; ?>"> 89 <input type="hidden" name="kana" value="<?php echo $_POST['kana']; ?>"> 90 <input type="hidden" name="tel" value="<?php echo $_POST['tel']; ?>"> 91 <input type="hidden" name="email" value="<?php echo $_POST['email']; ?>"> 92 <input type="hidden" name="body" value="<?php echo $_POST['body']; ?>"> 93 </form> 94 95<?php elseif( $page_flag === 2 ): ?> 96<h1>完了画面</h1> 97<p>お問い合わせ内容を送信しました。<br> 98ありがとうございました。</p> 99 100<?php else: ?> 101<h1> 入力画面</h1> 102 <p>* は必須項目です</p> 103 <?php if(!empty($errors) ): ?> 104 <ul class="error_list"> 105 <?php foreach( $errors as $value ): ?> 106 <li><?php echo $value; ?></li> 107 <?php endforeach; ?> 108 </ul> 109 <?php endif; ?> 110 <form action= "" method="post"> 111 <div class="row"> 112 <!-- 氏名 --> 113 <div class="element_wrap"> 114 <label for="name">*氏名</label> 115 <?php if (!empty($errors)) $errors['name'] ?> 116 <input type="varchar" name="name" id="name" placeholder="例)入力太郎" 117 value="<?php if( !empty($_POST['name']) ){ echo $_POST['name']; } ?>"><br> 118 </div> 119 <!-- フリガナ --> 120 <div class="element_wrap"> 121 <label for="kana">*フリガナ</label> 122 <?php if (!empty($errors)) $errors['kana'] ?> 123 <input type="varchar" name="kana" id="kana" placeholder="例)ニュウリョクタロウ" 124 value="<?php if( !empty($_POST['kana']) ){ echo $_POST['kana']; } ?>"><br> 125 </div> 126 <!-- 電話番号 --> 127 <div class="element_wrap"> 128 <label for="tel">電話番号</label> 129 <?php if (!empty($errors)) $errors['tel'] ?> 130 <input type="varchar" name="tel" id="tel" placeholder="例)08011112222" 131 value="<?php if( !empty($_POST['tel']) ){ echo $_POST['tel']; } ?>"><br> 132 </div> 133 <!-- メールアドレス --> 134 <div class="element_wrap"> 135 <label for="email">*メールアドレス</label> 136 <?php if (!empty($errors)) $errors['email'] ?> 137 <input type="varchar" name="email" id="email" placeholder="例)nyuuryoku11@mail.com" 138 value="<?php if( !empty($_POST['email']) ){ echo $_POST['email']; } ?>"><br> 139 </div> 140 <!-- お問い合わせ内容 --> 141 <div class="element_wrap"> 142 <label for="body">*お問い合わせ内容</label><br> 143 <?php if (!empty($errors)) $errors['body'] ?> 144 <textarea rows="10" name="body" id="body" > 145 <?php if (!empty($_POST['body'])){ echo nl2br($_POST['body']); } ?> 146 </textarea><br> 147 148 </div> 149 <input name = "btn_confirm" type="submit" value="入力内容を確認する"> 150 </div> 151 </form> 152 <?php endif; ?> 153 </body> 154</html>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

空になってないと思います。
PHPの出力部分除くと、

html

1 <textarea rows="10" name="body" id="body" > 2 3 </textarea><br>

となっており

text

1<textarea rows="10" name="body" id="body" ><-改行 2 <-スペース 3 <-スペース</textarea><br>

上記のように値が入っています。
textareaの場合は</textarea>までの間の入っているものすべてがvalue値なので、
改行すら入れてはいけません。

あと、$errorsが空ではないことだけをチェックしても$errors['body']が空ではないことまでは成り立ちません。
他のところも同じですが、「$errorsが空ではない、且つ、$errors[キー]が定義されている」と確実に参照したいキーの存在チェックをしてください。

現状だと他の個所でも入力内容の組み合わせによっては同じ配列のキー参照のNoticeが起きます。

投稿2022/03/14 01:22

編集2022/03/14 01:28
m.ts10806

総合スコア80888

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問