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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

Q&A

解決済

2回答

4465閲覧

formでpostされた値の判別の仕方

beginner_39

総合スコア77

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

0グッド

1クリップ

投稿2017/10/17 07:45

下記コードを作成。aaa.phpに記述↓

<form method="post" action="bbb.php"> <p>名前<br><input type="text" size="10" name="name"></p> <p>カタカナ<br><input type="text" size="10" name="kana"></p> <p>備考<br><textarea name="text" rows="2" cols="20"></textarea></p> <p><input type="submit" value="送信"></p> </form>

送信ボタンを押した先のbbb.php↓

<?php if(!isset($_POST['name']) || $_POST['name'] === ""){ echo '<p>名前が入力されていません。</p>'; }elseif(!isset($_POST['kana']) || $_POST['kana'] === ""){ echo '<p>カナが入力されていません。</p>'; }elseif(!isset($_POST['text']) || $_POST['text'] === ""){ echo '<p>備考が入力されていません。</p>'; }else{ $name = $_POST['name']; $kana = $_POST['kana']; $text = $_POST['text']; print '<form method="post" action="ccc_thanks.php">'; print '<input type="hidden" name="name" value="'.$name.'">'; print '<input type="hidden" name="kana" value="'.$kana.'">'; print '<input type="hidden" name="text" value="'.$text.'">'; print '<p>'.$name.'</p>'; print '<p>'.$kana.'</p>'; print '<p>'.$text.'</p>'; print '<input type="submit" value="内容を送信する">'; print '<a href="cars.php">修正する</a>'; print '</form>'; } ?>

bbb.phpで入力が無い値に対してエラーメッセージを出す、ということをしたいのですが、
上記分岐ではできませんでした。
※なぜ上記分岐ができなかった理由として個人的な考えは、ひとつひとつの分岐だからだと考えております。(結果上記のコードだと全部入力しなかった時でも、「名前が入力されていません」だけが表示されます)

やりたいことは頭でわかっているのですが、どうしても式を作り出すことができません。

アドバイスをお願いいたします。

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

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

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

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

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

guest

回答2

0

ユーザーから受け取ったデータをhiddenで受け渡しをするのはセキュリティ的には
あまり意味が無いのでロジックは考え直したほうがよいでしょう。
とくにtextareaで受けたデータをinputに渡すのはNGです。

確認画面が必要ないなら、データの整合性に問題がなければセッションに突っ込んで
登録ページに飛ぶのが妥当です。登録ページはpostを見ずにセッションをみてください

またユーザーから受け取ったデータは常に汚染されていますので、
htmlspecialcharsなど適当なエスケープ処理をかけてから表示するようにしてください

PHP

1<?PHP 2session_start(); 3$err=["name"=>"","kana"=>"","text"=>""]; 4$name=filter_input(INPUT_POST,"name"); 5if($name===""){ 6 $err["name"]='(名前が入力されていません。)'; 7} 8$kana=filter_input(INPUT_POST,"kana"); 9if($kana===""){ 10 $err["kana"]='(カナが入力されていません。)'; 11} 12$text=filter_input(INPUT_POST,"text"); 13if($text===""){ 14 $err["text"]='(備考が入力されていません。)'; 15} 16if(!in_array("",[$name,$kana,$text])){ 17 $_SESSION["name"]=$name; 18 $_SESSION["kana"]=$kana; 19 $_SESSION["text"]=$text; 20 header("Location:touroku.php"); 21} 22 23$name=htmlspecialchars($name); 24$kana=htmlspecialchars($kana); 25$text=htmlspecialchars($text); 26print <<<eof 27<form method="post"> 28<p>名前<br><input type="text" size="10" name="name" value="{$name}">{$err["name"]}</p> 29<p>カタカナ<br><input type="text" size="10" name="kana" value="{$kana}">{$err["kana"]}</p> 30<p>備考<br><textarea name="text" rows="2" cols="20">{$text}</textarea>{$err["text"]}</p> 31<p><input type="submit" value="送信"></p> 32</form> 33 34eof; 35?>

投稿2017/10/17 08:11

yambejp

総合スコア114572

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

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

beginner_39

2017/10/19 07:05

ご返信が遅くなりました。 ご指摘・アドバイス、ありがとうございます。 コード記載も大変勉強になります。 1点確認させてください。 >>セッションに突っ込んで… →どのような意味でしょうか?
guest

0

ベストアンサー

if-elseif文は使わずに普通にif文を並べれば良いのでは?
全ての条件を満たす場合に処理(確認画面を表示)したいのならフラグで管理すると手っ取り早いと思いますよ。

PHP

1<?php 2$check = true; 3if(!isset($_POST['name']) || $_POST['name'] === ""){ 4 echo '<p>名前が入力されていません。</p>'; 5 $check = false; 6} 7if(!isset($_POST['kana']) || $_POST['kana'] === ""){ 8 echo '<p>カナが入力されていません。</p>'; 9 $check = false; 10} 11if(!isset($_POST['text']) || $_POST['text'] === ""){ 12 echo '<p>備考が入力されていません。</p>'; 13 $check = false; 14} 15if($check){ 16 $name = $_POST['name']; 17 $kana = $_POST['kana']; 18 $text = $_POST['text']; 19 print '<form method="post" action="ccc_thanks.php">'; 20 print '<input type="hidden" name="name" value="'.$name.'">'; 21 print '<input type="hidden" name="kana" value="'.$kana.'">'; 22 print '<input type="hidden" name="text" value="'.$text.'">'; 23 print '<p>'.$name.'</p>'; 24 print '<p>'.$kana.'</p>'; 25 print '<p>'.$text.'</p>'; 26 print '<input type="submit" value="内容を送信する">'; 27 print '<a href="cars.php">修正する</a>'; 28 print '</form>'; 29} 30?>

また、postで受け取った値をそのままHTMLに表示するのはクロスサイトスクリプティングの危険性がありますのでhtmlspecialchars()でエスケープしてから表示するようにしましょう。

投稿2017/10/17 08:04

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

beginner_39

2017/10/19 07:07

ご返信が遅くなりました。 アドバイス・ご指摘ありがとうございます。 勉強させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問