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

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

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

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

Q&A

解決済

2回答

3045閲覧

お問い合わせフォームで入力内容に空白があった場合にエラーメッセージを出したい

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

0グッド

0クリップ

投稿2018/08/18 04:20

編集2018/08/18 04:42

お問い合わせフォームを作っていて、入力内容のいずれかに空白があった場合に送信ボタンクリック時にエラーメッセージを出すようにしたいと思っています。
各サイトを参考にしながら以下のようにコードを組んでみたのですが、エラーメッセージを出すための制御文が動作していないようで、空白があった場合でもそのまま確認画面へと進んでしまいます(index.php → confirm.php → sent.phpと移動するように作っており、以下のコードの1つ目がindex.php、2つ目がconfirm.phpになります)。
試しにif(isset($_POST['submit']) && $_POST['submit'] === '送信')の部分を消すと今度は「お名前を入力してください。」などのメッセージが最初から表示されるようになります。そのためこのif文がおかしいような気がするのですが修正方法がわかりません。
似たような質問をいくつか見つけたのですが、自分の力ではいずれの方法でも解決に至らなかったため質問させていただきました。ご回答よろしくお願いいたします。

PHP

1<?php 2 $name = ''; 3 if(isset($_POST['name'])){ 4 $name = $_POST['name']; 5 } 6 $mail = ''; 7 if(isset($_POST['mail'])){ 8 $mail = $_POST['mail']; 9 } 10 $inquiry = ''; 11 if(isset($_POST['inquiry'])){ 12 $inquiry = $_POST['inquiry']; 13 } 14 15 function h($s) { 16 return htmlspecialchars($s, ENT_QUOTES, "UTF-8"); 17 } 18 19 if(isset($_POST['submit']) && $_POST['submit'] === '送信'){ 20 if($name === ''){ 21 $error_message['name'] = 'お名前を入力してください。'; 22 } 23 if($mail === ''){ 24 $error_message['mail'] = 'メールアドレスを入力してください。'; 25 } 26 if($inquiry === ''){ 27 $error_message['inquiry'] = 'お問い合わせ内容を入力してください。'; 28 } 29 30 } 31?> 32 33<!DOCTYPE html> 34<html lang="ja"> 35 <head> 36 <meta charset="UTF-8"> 37 <title>お問い合わせフォーム</title> 38 <link rel="stylesheet" href="style.css"> 39 </head> 40 <body> 41 <div class="main"> 42 <div class="contact-form"> 43 <div class="form-title">お問い合わせ</div> 44 <form method="post" action="confirm.php"> 45 <div class="form-item">お名前</div> 46 <div class="error_message"><?php echo $error_message['name'] ?></div> 47 <input type="text" name="name"> 48 <div class="form-item">メールアドレス</div> 49 <div class="error_message"><?php echo $error_message['mail'] ?></div> 50 <input type="text" name="mail"> 51 <div class="form-item">お問い合わせ内容</div> 52 <div class="error_message"><?php echo $error_message['inquiry'] ?></div> 53 <textarea name="inquiry"></textarea><br> 54 <input type="submit" name="submit" value="送信"> 55 </form> 56 </div> 57 </div> 58 </body> 59</html>

PHP

1<?php 2 $name = ''; 3 if(isset($_POST['name'])){ 4 $name = $_POST['name']; 5 } 6 $mail = ''; 7 if(isset($_POST['mail'])){ 8 $mail = $_POST['mail']; 9 } 10 $inquiry = ''; 11 if(isset($_POST['inquiry'])){ 12 $inquiry = $_POST['inquiry']; 13 } 14 15 function h($s) { 16 return htmlspecialchars($s, ENT_QUOTES, "UTF-8"); 17 } 18?> 19 20<!DOCTYPE html> 21<html lang="ja"> 22 <head> 23 <meta charset="UTF-8"> 24 <title>お問い合わせフォーム</title> 25 <link rel="stylesheet" href="style.css"> 26 </head> 27 <body> 28 <div class="main"> 29 <div class="contact-form"> 30 <div class="thanks-message">以下の内容でよろしいですか?</div> 31 <form method="post" action="sent.php"> 32 <input type="hidden" name="name" value="<?php echo h($name) ?>"> 33 <input type="hidden" name="mail" value="<?php echo h($mail) ?>" > 34 <input type="hidden" name="inquiry" value="<?php echo h($inquiry) ?>"> 35 <div class="form-title">入力内容</div> 36 37 <div class="form-item">●お名前</div> 38 <?php echo h($name) ?> 39 40 <div class="form-item">●メールアドレス</div> 41 <?php echo h($mail) ?> 42 43 <div class="form-item">●お問い合わせ内容</div> 44 <?php echo h($inquiry) ?> 45 <br> 46 <input type="button" value="戻る" onclick="history.back()"> 47 <input type="submit" value="送信する"> 48 </form> 49 </div> 50 </div> 51 </body>

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

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

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

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

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

guest

回答2

0

ベストアンサー

条件分岐の処理はconfirm.phpで実施しています。
で、空の場合、confirm.phpindex.phpに POST し直しているのだと思いますが、肝心のコードの記載がないので、想像です。
POST['submit'] に'送信'を入れることで入れることで、戻した時の処理が開始されるかと思います。

余談
POST/GET は適切に行わないと、「まともに」動きません。
以下あたりで基本の受け取り方を覚えてください。
$_GET, $_POSTなどを受け取る際の処理

投稿2018/08/18 04:35

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2018/08/18 04:45 編集

ご回答有り難うございます。リンク先をよく読んでみようと思います。 >POST['submit'] に'送信'を入れることで if(isset($_POST['submit']) && $_POST['submit']の方に入れてみたのですが変化がありませんでした。confirm.phpの方も記載しますのでよろしければご確認いただけますでしょうか。
退会済みユーザー

退会済みユーザー

2018/08/18 04:49

confirm.php に必要な条件分岐が入っていません。 空検出の条件を判別し、index.php へ POST し直す処理を入れてください。
退会済みユーザー

退会済みユーザー

2018/08/18 04:56

すみません、大変申し訳無いのですが、どのようにすればいいかわからないのでもう少しヒントをいただけますでしょうか…。
退会済みユーザー

退会済みユーザー

2018/08/18 05:08

要件が「ボタンをクリックした時」なのであれば、そもそもクライアントサイドで処理すべき内容です。 サーバサイドでの処理とクライアントサイドでの処理を理解できていますか? 理解できた上での質問なのであれば、サーバサイドの処理としては ・空検出をした場合に、index.php へ cURL 等を使用して POST された内容をし直す ことで、「今提示されているコードを活かした」処理が可能です。 ただ、今のコードはあまり一般的な方法では無いです。 session を利用したり、confirm.php を index.php の内容と差し替えたりするのをよく見かけます。
退会済みユーザー

退会済みユーザー

2018/08/18 05:23

サーバーサイドとクライアントサイドの違いについてはっきり理解できておらず、今調べてぼんやりとわかったかなという程度です…。 一般的な方法でないのですね。cURLやsessionなども理解できていないため、現時点では手が付けられない範囲である気がしてきました。 こちらの知識不足できちんとお答えできずお手数をかけてしまい大変申し訳ありません。勉強してそのうちきちんと実装させたいと思います。ご回答ありがとうございました。
guest

0

PHP

1 session_start(); 2 3 if(isset($_POST['submit']) && $_POST['submit'] === '送信'){ 4 if($name === ''){ 5 $error_message['name'] = 'お名前を入力してください。'; 6 } 7 if($mail === ''){ 8 $error_message['mail'] = 'メールアドレスを入力してください。'; 9 } 10 if($inquiry === ''){ 11 $error_message['inquiry'] = 'お問い合わせ内容を入力してください。'; 12 } 13 if(empty($error_message)){ 14 $_SESSION['submit'] = $_POST; 15 header('Location: confirm.php'); 16 } 17 }

ツイッターでアドバイスをいただき、このように組んだらエラーメッセージが出るようになりました。しかし今度は各項目に入力をしても確認画面で入力内容が空白になってしまう問題が発生したので、もし解決できない場合はまたこちらで質問させていただくかもしれません。繰り返しになりますがご回答くださり大変ありがとうございました。

投稿2018/08/18 15:02

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2018/08/19 02:28

confirm.php で session_start() させ、$_SESSION['submit'] から POST 内容を引き出してあげればよいです。 一通り、スクリプトが動くようになったら、以下も参考に読んでみてください。 面白いです。 ・さいきょうの二重サブミット対策 https://qiita.com/syobochim/items/120109315f671918f28d ・確認画面からの遷移時に $_SESSION で値を渡すことの意味 https://teratail.com/questions/74746
退会済みユーザー

退会済みユーザー

2018/08/19 07:22 編集

返信遅れてすみません。確認画面で戻るを押すとERR_CACHE_MISSと出ていたのですが、confirm.phpでもsession_start()と入れたらこちらの問題が解決しました!上記の空白になる問題はまだ解決しておらず、仕組みについてもまだよくわかっていないのですが取り急ぎご報告させていただきました。教えていただいた記事もじっくり拝読したいと思います。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問