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

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

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

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

Q&A

1回答

1432閲覧

PHPとMYSQLで作るドロップダウンリスト

gukkigundam

総合スコア8

PHP

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

0グッド

1クリップ

投稿2020/01/16 09:27

編集2020/01/16 10:20

前提・実現したいこと

現在XAMPPというローカルサーバーでPHPとMYSQLの勉強をしています。
(気づけばプロ並み PHP改訂版 という本で勉強を進めています。)

ホテルの予約管理のツールを作成したいです。

MYSQLからデータを拾って、ドロップダウンリストを表示し、<form method="post"・・・>
で次のページに選択されたデータを送りたいです。

もし可能なら、一つのドロップダウンリストから選んだ地域を、ページを移動せずにその指定されたホテルをドロップダウンリストで表示してほしいです。

例えば、HOKKAIDOをドロップダウンリストで表示されれば、横にあるドロップダウンリストにはHOKKAIDOのリストしか表示されない形で、ホテル名を選択したらそれを送信ボタンでデータを渡せる形が一番の希望です。
(すいません、重くなるとのご指摘があったので、前ページにてエリア情報を取得して、それをSELECTのWHEREでエリア条件を付けたいと思います。)

(さらに追加でいえば、取引先のドロップダウンも追加できたら助かります。)

area_list (前ページにします)
id area_name
1 HOKKAIDO
2 TOHOKU
3 KANTOU
4 HOKURIKU

hotel_list
id area_name hotel_name
1 HOKKAIDO HOTEL1
2 KANTOU HOTEL2
3 HOKKAIDO HOTEL3

company_list
id company_name
1 travela
2 travelb

発生している問題・エラーメッセージ

ドロップダウンリストが表示されない

該当のソースコード

<!DOCTYPE html> <html> <head> <meta charest="UTF-8"> <title>予約管理</title> <script> function confirm_test() { // 問い合わせるボタンをクリックした場合 document.getElementById('popup').style.display = 'block'; return false; } function okfunc() { // OKをクリックした場合 document.contactform.submit(); } function nofunc() { // キャンセルをクリックした場合 document.getElementById('popup').style.display = 'none'; } </script> </head> <body> <?php try { $dsn='mysql:dbname=travel;host=localhost;charest=utf8'; $user='root'; $password=''; $dbh=new PDO($dsn,$user,$password); $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $sql='SELECT hotel_name FROM hotel_list WHERE 1'; $stmt=$dbh->prepare($sql); $stmt->execute(); $dbh=null; ?} ホテル予約追加<br> <form method="post" name="contactform" action="yoyakulist_add_done.php" enctype="multipart/form-data"> ホテル名を追加してください  ここにホテル選択ドロップダウンリストを入れたいです。 予約日程を入力してください  <input type="text" name="bookingdays" style="width:200px"><br> 何連泊か入力してください <input type="text" name="stays" style="width:100px"><br> ツインルーム部屋数 <input type="text" name="twinrooms" style="width:100px">部屋<br> ツイン単価 <input type="text" name="twinsell" style="50px">円<br> 予約用紙を入力してください <input type="file" name="bookingpaper" style="width:400px"><br> 取引先を追加してください  ここに相手取引先選択ドロップダウンリストを入れたいです。 <input type="submit" value="登録する" name="contact"onclick="return confirm_test()"> </form> <div id="popup" style="width: 200px;display: none;padding: 30px 20px;border: 2px solid #000;margin: auto;"> 登録しますか?<br /> <button id="ok" onclick="okfunc()">OK</button> <button id="no" onclick="nofunc()">キャンセル</button> </div> </body> </html>

試したこと

色々調べてみましたが、難しかったです。

補足情報(FW/ツールのバージョンなど)

XAMPP V3.2.4
すいません、PHPはバージョン分からないです。

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

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

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

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

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

H40831

2020/01/16 09:41

JavaScriptでやることだと思います
m.ts10806

2020/01/16 09:50

コードはマークダウンのcode機能を利用してご提示ください。 またPHPのバージョンなど環境情報を「補足情報」のところに追記願います。 あと・・・・当該書籍は2017/2の書籍と思いますがPHP7対応なのでしょうか? おそらく今、PHP7対応していない書籍で学習してもあまり活きないと思います。
m.ts10806

2020/01/16 09:52

H40831さん データがDBである以上はJavaScript「だけ」では無理なので、誤解を与えないコメントにされたほうが良いかと思います。
gukkigundam

2020/01/16 10:11

H40831 様 ご回答ありがとうございます。javasuriptの勉強頑張ります。 m.ts10806様 すいません、恐縮ですが、PHPのバージョンが何なのかよくわかりません。 今まで本・ネット検索だけで勉強やを進めていましたが、手詰まりになったので初めてこのようなサイトで質問させていただきました。 エディタはterapadというツールでやっています。 ご指導をいただけましたら、助かります。
gukkigundam

2020/01/16 10:14

m6uさん ご回答ありがとうございます。 地域を指定してのドロップダウン表示分岐がもし重くなるならば、 もう1ページを挟みたいと思います (地域を選ぶページ)→(ホテルを選ぶページ)
m.ts10806

2020/01/16 10:22

<?php phpinfo(); ↑だけ書いたPHPファイルを実行して表示を確認してください。 (XAMPPのバージョンでも構いませんけどphpinfo()は覚えた方が良いです)
m.ts10806

2020/01/16 10:27

>本・ネット検索だけで それでもできないことはないと思いますが「ネット検索」に「PHPマニュアル」は加えてください。 機能の仕様を確認することができます。 例: https://www.php.net/manual/ja/function.phpinfo.php
gukkigundam

2020/01/16 10:28

m.ts10806様 PHP Version 7.3.12 との表示がありました
退会済みユーザー

退会済みユーザー

2020/01/16 12:26

もしかして、コピペで使えるコードしかいらない感じですか?
gukkigundam

2020/01/16 13:11

m6u様 今までwordpressでhtmlとcssしか使ってきませんでした。 最近になってsqlの存在を知り、勉強を始めたばっかりです。 phpとsqlは本やサイトなどのコードを打ち込んで勉強してますが、本には載っていない独自コードを書くのに四苦八苦しています。今回もいろんなサイトを見て書いてみましたが、上手くいかないので質問させていただきました。 もしご回答を頂けるなら、コードだけでも頂けたら助かりますが、 コード等と一緒に仕組みなども教えていただけたら幸いです。 もしくは、参考になるサイトや書籍を教えて頂けたら嬉しいです。
m.ts10806

2020/01/16 14:03

大事なことをスルーされた感があるので再掲しますね。 ----------- >本・ネット検索だけで それでもできないことはないと思いますが「ネット検索」に「PHPマニュアル」は加えてください。 機能の仕様を確認することができます。 例: https://www.php.net/manual/ja/function.phpinfo.php
gukkigundam

2020/01/16 14:15

m.ts10806 様 アドバイスありがとうございます。 「phpマニュアル」ですが、ブックマークしました。 おかげで、PHPのバージョンを調べることができました。 正直、このようなサイトはどう利用すればいいかわかりませんが、頑張ります。 https://www.php.net/manual/ja/ref.mysql.php のところから、ヒントを探せばいいのでしょうか?
gukkigundam

2020/01/16 14:24

m.ts10806 様 とりあえず「はじめに」から読んでみたいと思います
m.ts10806

2020/01/16 21:41

いえ、基本は辞書がわりに使ってください。 クラスやセッションあたりはしっかり読んだほうが良いとは思いますけど、機能の仕様とサンプルコードによる機能理解が主たる利用用途です。 学校の試験や受験のように覚える必要はなく、「ここを確認すれば標準機能の仕様がわかる」ということだけ認識しておけば良いです。PHPマニュアルを活用できるようになるだけでも成長度合いは全く違ってきます。 あとは、「エラーをきちんと読むこと」「デバッグすること」ですね。
gukkigundam

2020/01/17 00:23

m.ts10806 様 分かりました。 まずはクラスとセッションを読んでみます。 アドバイス、ありがとうございます。
m.ts10806

2020/01/17 01:00

えっと、あまり通じてないように思いますが、「クラスとセッションから読んでください」とは言ってません。 あくまで「読み物としてはクラスとセッションのようなものがあって、基本は辞書だ」ということが伝えたいのです。 >機能の仕様とサンプルコードによる機能理解 とりあえずネットで拾ってきたコードで動いたから良い、動かなかったから悪い、ではなく。 なぜ動くのか、なぜ動かないのかをきちんと機能を確認して、理解を深めることで身に付けられるということを伝えたいのです。 今の状態でクラスとセッションを読んでもおそらく用途は浮かばないので、まずは基本をおさえましょう。できれば書籍も最新のものを。 一年過ぎれば十分すぎるほど古いです。
guest

回答1

0

(1)
1つ目の地域を選んだタイミングで、jsで支援してフォーム送信して、
1つ目の地域に絞り込んだ2つ目の項目を出力し直すというやり方もあるし。
イメージ説明
この画面を出力する際に、1つ目の地域のパラメータを受信しているかどうかで処理分岐をかける。
出力するhtmlなどのデータ量が少ないし、
js依存度は少ないのでシンプルなのでデバッグしやすいだろうし、
この路線でまずやってみることをおすすめしたい。

(2)
1つ目の地域を絞り込んだタイミングで、
jsで支援して2つ目の項目用のデータを取得するajaxを駆使して、
応答で受け取るデータを元に2つ目の項目をレンダリングするというやり方もあるし。
イメージ説明
jsonやxmlなどで応答を返す、専用のphp処理を用意する手間が生じるので、
ajaxとかjsonとか勉強しながら取り組む必要があるかな。
ページの再読み込みが発生しない分、ちゃんと機能すれば
ユーザー体験的にはこれがおすすめ。
ajaxもjsonもまとめ記事とかに参考事例があるので、そんなに難しくないと思いたい。

(3)
あるいは、ページが重くなる可能性が高いけど、
すべての地域のデータをjs上に持っといて、
1つ目の地域を選択したら2つ目の地域の項目をjsで作っちゃうとか。
イメージ説明
全地域のデータを出力するためにサーバーの能力やデータベースの能力次第では
ページの表示が終わるのが遅いなんて結果になりやすい。

言いたいことがうまく伝わるか、自信ないし、サンプルコードも示せないので、
他の方の回答に期待します。

投稿2020/01/16 09:46

編集2020/01/16 10:07
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

m.ts10806

2020/01/16 10:06

この図示は素晴らしいと思いました。分かりやすい
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問