質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

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

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

Q&A

解決済

1回答

1112閲覧

セッションがない場合、フォームにエラーが表示される

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

0グッド

0クリップ

投稿2021/03/01 10:23

##解決したいこと
PHPでお問い合わせフォームを作成しているのですが、以下の画像のように初期状態(セッションがない状態)だとフォームにエラーが表示されてしまいます。これを解消したいです。

お問い合わせフォーム(contact.php)
イメージ説明

<br /><b>Notice</b>: Undefined index: name in <b>/Applications/MAMP/htdocs/DB基礎1.cafe/form/contact.php</b> on line <b>50</b><br />
<br /><b>Notice</b>: Undefined index: kana in <b>/Applications/MAMP/htdocs/DB基礎1.cafe/form/contact.php</b> on line <b>57</b><br />

以下略

contact.php(フォーム入力)

<?php ini_set('display_errors', "On"); session_start(); require '../common/header.php'; require_once('../common/validation.php'); require_once('../common/database.php'); require_once('../common/function.php'); $contactData = getDatabaseSelect(); ?> <!DOCTYPE html> <html lang="en"> <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"> <link rel="stylesheet" href="../style/contact.css"> <link rel="stylesheet" href="../style/header.css"> <link rel="stylesheet" href="../style/footer.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <script src="../public/js/header.js"></script> <script src="../public/js/header2.js"></script> <!-- <script src="../public/js/val.js"></script> --> <title>CAFE</title> </head> <body> <div class="contact-wrapper"> <div class="container"> <div class="top-title"> <h2>お問い合わせ</h2> </div> <div class="form-contents"> <div class="f-title"> <h3>下記の項目をご記入の上送信ボタンを押してください</h3> </div> <p class="text"> 送信頂いた件につきましては、当社より折り返しご連絡差し上げます。<br> なお、ご連絡までに、お時間頂く場合もございますので予めご了承ください。<br> <label class="kome">*</label>は必須項目になります。 </p> <form action="" method="POST"> <div class="mb-3"> <label>氏名</label><label class="kome">*</label><br> <?php if(isset($errors['name'])): ?> <div class="vali"><?php echo $errors['name']; ?></div> <?php endif; ?> <input type="text" id="f-name" name="name" value="<?php echo h($_SESSION['name']) ?>" placeholder="山田太郎"> </div> <div class="mb-3"> <label>フリガナ</label><label class="kome">*</label><br> <?php if(isset($errors['kana'])): ?> <div class="vali"><?php echo $errors['kana']; ?></div> <?php endif; ?> <input type="text" id="f-kana" name="kana" value="<?php echo h($_SESSION['kana']) ?>" placeholder="ヤマダタロウ"> </div> <div class="mb-3"> <label>電話番号</label><label class="kome">*</label><br> <?php if(isset($errors['tel'])): ?> <div class="vali"><?php echo $errors['tel']; ?></div> <?php endif; ?> <input type="text" id="f-tel" name="tel" value="<?php echo h($_SESSION['tel']) ?>" placeholder="09012345678"> </div> <div class="mb-3"> <label>メールアドレス</label><label class="kome">*</label><br> <?php if(isset($errors['email'])): ?> <div class="vali"><?php echo $errors['email']; ?></div> <?php endif; ?> <input type="text" id="f-email" name="email" value="<?php echo h($_SESSION['email']) ?>" placeholder="test@test.co.jp"> </div> <div class="f-title f-bottom"> <h3>お問い合わせ内容をご記入ください<label class="kome">*</label></h3> </div> <?php if(isset($errors['contact'])): ?> <div class="vali"><?php echo $errors['contact']; ?></div> <?php endif; ?> <div class="mb-3"> <textarea id="contact" name="contact" rows="7"><?php echo h($_SESSION['contact']) ?></textarea> </div> <input type="hidden" name="csrf_token" value="<?php echo setToken(); ?>"> <button type="submit" class="btn" name="btn_confirm">送信</button> </form> </div> </div> </div> <table> <tr> <th>氏名</th> <th>フリガナ</th> <th>電話番号</th> <th>メールアドレス</th> <th>お問い合わせ内容</th> </tr> <?php foreach($contactData as $col): ?> <tr> <td><?php echo h($col['name']) ?></td> <td><?php echo h($col['kana']) ?></td> <td><?php echo h($col['tel']) ?></td> <td><?php echo h($col['email']) ?></td> <td><?php echo nl2br(h($col['body'])) ?></td> <td><a href="edit.php?id=<?php echo h($col['id']); ?>">編集</a></td> <td><a class="delete-btn" href="delete.php?id=<?php echo h($col['id']); ?>">削除</a></td> </tr> <?php endforeach; ?> </table> <?php include("../common/footer.php"); ?> </body> </html>

validation.php バリデーション

<?php $errors = []; $id = ""; $name = ""; $kana = ""; $tel = ""; $email = ""; $contact = ""; if($_SERVER['REQUEST_METHOD'] === 'POST'){ //以下バリデーション $id = filter_input(INPUT_POST,'id'); $name = filter_input(INPUT_POST,'name'); $kana = filter_input(INPUT_POST,'kana'); $tel = filter_input(INPUT_POST,'tel'); $email = filter_input(INPUT_POST,'email'); $contact = filter_input(INPUT_POST,'contact'); // 名前の空欄チェック if(empty($name) || mb_strlen($name) > 10) { $errors['name'] = "名前は必須です。10文字以内で入力してください。"; } // フリガナの空欄チェック if(empty($kana) || mb_strlen($kana) > 10) { $errors['kana'] = "フリガナは必須です。フリガナは10文字以内で入力してください"; } // 電話番号のチェック if(!isset($tel) || !preg_match("/^[0-9]+$/", $tel)) { $errors['tel'] = "電話番号は0-9までの数字を入力してください"; } // 正しいEmailの形式化どうか if(!isset($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)) { $errors['email'] = "正しいメールアドレスを指定してください"; } // お問い合わせ内容の空欄チェック if(empty($contact)) { $errors['contact'] = "お問い合わせ内容は必須です"; } if(empty($errors)) { $_SESSION['name'] = $name; $_SESSION['kana'] = $kana; $_SESSION['tel'] = $tel; $_SESSION['email'] = $email; $_SESSION['contact'] = $contact; header('Location: ./confirm.php'); } if($_GET['id']) { if(empty($errors)) { $_SESSION['id'] = $id; $_SESSION['name'] = $name; $_SESSION['kana'] = $kana; $_SESSION['tel'] = $tel; $_SESSION['email'] = $email; $_SESSION['contact'] = $contact; header('Location: ./update.php'); } } } ?>

※_SESSIONに変数が格納していれば、上記のようなエラーもなくデータの登録や編集・削除などもできます。

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

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

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

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

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

m.ts10806

2021/03/01 10:36

バリデーションで何を学んだのでしょう。 なぜ初期値空に入れたのでしょう。 アドバイスがあまり活きてないように思います。
m.ts10806

2021/03/01 10:46

あと、このロジックではupdate.phpに永遠に到達できません。
hentaiman

2021/03/01 11:16

undefinedに対してissetが必要という事が分かっていて一度は解決したのに何故またundefinedで引っかかるのか分からないんですが、undefinedのNoticeが出る理由は分かっているんですよね?だからissetに至ったんですよね? となると追えてないのは自身で書いた処理の流れですか?
退会済みユーザー

退会済みユーザー

2021/03/01 12:52

>>m.ts10806 edit.phpからupdate.phpに遷移して更新できるのでご心配なく。 >>hentaiman session_destroyして破棄した結果、このような結果になりました。issetをcontact.phpのフォーム欄に追記してみようと思います。
m.ts10806

2021/03/01 14:47

>edit.phpからupdate.phpに遷移して confirm.phpの存在価値?
hentaiman

2021/03/02 02:03

まずはsession使わないで実装してみたら? コメントに書いてあるedit.phpが何なのか分からないけどcontact.phpの事ですか? 今あるのはconcatc.php(edit.php?)と、validation.php(confirm.phpとupdate.phpにリダイレクトするだけ)と、update.php? validation.phpの処理をconfirmとupdateの上の方に直接書いてvalidation.phpを削除してしまえば? ファイルの役割がまとまって無い事が混乱する原因だと思いますよ それと扱う項目を一旦nameひとつにして作って各処理もnameひとつだけに絞ってそれ以外は除去して正常動作するものを作って、それから他の項目を足してはどうでしょうか?
guest

回答1

0

ベストアンサー

回答 SESSIONに初期値を入れてしまうか、SESSIONに中身がある場合は表示してと書けばいい。

<?php echo h($_SESSION['name']) ?>
SESSIONのnameをechoしてねと書いてあるけど、中身が無いからエラーを吐く。
であるならエラー回避の初期値を代入してしまうか、
もしくはif文でSESSIONの中身がある場合表示してと書けばいい。

placeholderが設定してあるので、if文の方が良いかと。

投稿2021/03/02 12:55

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問