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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

4回答

2826閲覧

検索フォームでわからないこと

uverworld101nm

総合スコア172

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2016/08/30 08:46

以下のパラメータをもとに、

PHP

1if (isset($_GET['credit_card']) || isset($_GET['budget'] || isset($_GET['food'] )) { 2$key='私のkey'; 3$count='50'; 4$large_area='◯◯'; 5$start =1+($page-1)*$count; 6$credit_card=$_GET ["credit_card"]; 7$budget=$_GET ["budget"]; 8$food_category=$_GET["food_category"]; 9$format='xml'; 10$url='http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key='.$key.'&count='.$count.'&large_area='.$large_area.'&start='.$start.'&credit_card='.$credit_card.'&budget='.$budget. '&food_category='.$food_category.'&format='.$format; 11$xml=simplexml_load_file($url); 12・・・ 13・・・ 14・・・

したのhtmlを使って検索フォームを作成したのですが、budgetは値を渡せますが、credit_cardとfood_categoryの値渡し(一括送信、credit_cardとfood_categoryの同時に送信)ができず、検索結果が別のものを表示します。ステーキを指定しても和食の検索結果が表示されます。
credit_cardとfood_categoryのパラメータを調べましたが、そもそもfood_categoryだけの検索フォームでもカレーのセレクトボックスを指定してもカレーの検索結果が表示されません。
ですが、budgetが使えて、credit_cardとfood_categoryが使えないなんておかしいです。

僕の質問は、credit_cardとfood_categoryを一括にした検索フォームは作ることは可能ですか?
また、budgetが使えて、credit_cardとfood_categoryが使えないことは、複数のフォームを設置することができないことですか?
以下の二つが僕の質問です。

html

1<html> 2<head> 3<title>API_SAMPLE</title> 4</head> 5<body> 6 <form method="GET"> 7 <select name="budget"> 8 <option value="B001">〜2000円</option> 9 <option value="B002">2001円〜3000円</option> 10 <option value="B003">3001円〜4000円</option> 11 </select> <input type="submit" name="search" value="検索" onFocus="this.select()"> 12 </form> 13</body> 14</html> 15<html> 16<body> 17 <form method="GET"> 18 <select name="food"> 19 <option value="R031">ステーキ</option> 20 <option value="R032">カレー・ハヤシライス</option> 21 </select> <input type="submit" name="search" value="検索"> 22 23 </form> 24 <form method="GET"> 25 <select name="credit_card"> 26 <option value="c01">VISA</option> 27 <option value="c02">マスター</option> 28 </select> <input type="submit" name="search" value="検索"> 29 30 </form> 31</body> 32</html>

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

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

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

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

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

guest

回答4

0

いい加減にしろよ。丸投げ質問ばかりで学習する気がないなら質問するなよ。ちょっとは自分で調べろよ。その上でわからなかったらここで聞け。言われたことも修正せずに学びもせずにやってほしいだけだろ。少なくとも解答してくれた人にお礼は言え。

投稿2016/08/30 09:21

toutou

総合スコア2050

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

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

退会済みユーザー

退会済みユーザー

2016/09/01 01:27 編集

ですね。自分は「回答の質が~」とか言うつもりは無いですが、ここまで継続して丸投げ出来るのはさすがにひどいなぁ…と思います。
guest

0

ベストアンサー

前回とほぼおなじ内容ですが、以下サンプルを確認してください

PHP

1<?php 2 3//初期設定 4$selected["budget"]=array_fill_keys(["B001","B002","B003"],''); 5$selected["food"]=array_fill_keys(["R031","R032"],''); 6$selected["credit_card"]=array_fill_keys(["c01","c02"],''); 7 8//値セット 9$selected["budget"][filter_input(INPUT_GET,"budget")]=" selected"; 10$selected["food"][filter_input(INPUT_GET,"food")]=" selected"; 11$selected["credit_card"][filter_input(INPUT_GET,"credit_card")]=" selected"; 12 13print <<<eof 14<html> 15<head> 16<title>API_SAMPLE</title> 17</head> 18<body> 19<form method="GET"> 20<select name="budget"> 21<option value="">=== 選択して ===</option> 22<option value="B001"{$selected["budget"]["B001"]}>?2000円</option> 23<option value="B002"{$selected["budget"]["B002"]}>2001円?3000円</option> 24<option value="B003"{$selected["budget"]["B003"]}>3001円?4000円</option> 25</select> 26<input type="submit" name="search" value="検索"> 27</form> 28<form method="GET"> 29<select name="food"> 30<option value="">=== 選択して ===</option> 31<option value="R031"{$selected["food"]["R031"]}>ステーキ</option> 32<option value="R032"{$selected["food"]["R032"]}>カレー・ハヤシライス</option> 33</select> 34<select name="credit_card"> 35<option value="">=== 選択して ===</option> 36<option value="c01"{$selected["credit_card"]["c01"]}>VISA</option> 37<option value="c02"{$selected["credit_card"]["c02"]}>マスター</option> 38</select> 39<input type="submit" name="search" value="検索"> 40</form> 41</body> 42</html> 43eof; 44 45?>

#追記

PHP

1<?php 2 3//初期設定 4$selected["budget"]=array_fill_keys(["B001","B002","B003"],''); 5$selected["food"]=array_fill_keys(["R031","R032"],''); 6$selected["credit_card"]=array_fill_keys(["c01","c02"],''); 7 8//値セット 9$budget=filter_input(INPUT_GET,"budget",FILTER_DEFAULT,["options"=>["default"=>""]]); 10$food=filter_input(INPUT_GET,"food",FILTER_DEFAULT,["options"=>["default"=>""]]); 11$credit_card=filter_input(INPUT_GET,"credit_card",FILTER_DEFAULT,["options"=>["default"=>""]]); 12 13$selected["budget"][$budget]=" selected"; 14$selected["food"][$food]=" selected"; 15$selected["credit_card"][$credit_card]=" selected"; 16 17$param=""; 18 19if($budget!==""){ 20 $param.=($param==="")?"?":"&"; 21 $param.="budget=".urlencode($budget); 22} 23if(!in_array("",[$food,$credit_card])){ 24 $param.=($param==="")?"?":"&"; 25 $param.="food=".urlencode($food)."&credit_card=".urlencode($credit_card); 26} 27if($budget!=="" || !in_array("",[$food,$credit_card])){ 28$url="http://webservice.recruit.co.jp/hotpepper/gourmet/v1/".$param; 29print $url."<br>"; 30} 31print <<<eof 32<html> 33<head> 34<title>API_SAMPLE</title> 35</head> 36<body> 37<form method="GET"> 38<select name="budget"> 39<option value="">=== 選択して ===</option> 40<option value="B001"{$selected["budget"]["B001"]}>~2000円</option> 41<option value="B002"{$selected["budget"]["B002"]}>2001円~3000円</option> 42<option value="B003"{$selected["budget"]["B003"]}>3001円~4000円</option> 43</select> 44<input type="submit" name="search" value="検索"> 45</form> 46<form method="GET"> 47<select name="food"> 48<option value="">=== 選択して ===</option> 49<option value="R031"{$selected["food"]["R031"]}>ステーキ</option> 50<option value="R032"{$selected["food"]["R032"]}>カレー・ハヤシライス</option> 51</select> 52<select name="credit_card"> 53<option value="">=== 選択して ===</option> 54<option value="c01"{$selected["credit_card"]["c01"]}>VISA</option> 55<option value="c02"{$selected["credit_card"]["c02"]}>マスター</option> 56</select> 57<input type="submit" name="search" value="検索"> 58</form> 59</body> 60</html> 61eof; 62 63?>

投稿2016/08/30 09:04

編集2016/08/30 09:31
yambejp

総合スコア114505

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

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

uverworld101nm

2016/08/30 09:04

ご回答ありがとうございます。 budgetはbudgetだけで検索できるようにし、foodとcredit_cardは一括で検索できるようにしたいです。
yambejp

2016/08/30 09:07

グルーピングが違うんですね 元ソースを修正しました
uverworld101nm

2016/08/30 09:15

つまり、僕が途中</body><html>を入れていたからエラーになったのですか?
yambejp

2016/08/30 09:32

グループのわけかたと、受け取ったデータの処理がおかしかったんでしょう。 ちなみに$urlの書き方も追記しときました
uverworld101nm

2016/08/30 09:41

やっぱり、filter_inputを使った方がいいのですか?
yambejp

2016/08/30 09:46

使わなくてもできますよ。 自力で解決できるなら別の方法をいろいろ模索してみてください
uverworld101nm

2016/08/30 09:50

いや、そうではなく僕のurlはそのままだとダメだということで間違いないですよね?
yambejp

2016/08/30 09:57

おっしゃりたい意味がよくわかりませんが 質問者さんの書かれたソースは不備が多いことは事実です。 途中経過をまったく無視しても良い結果を得られることはありません。 一つ一つの機能を確認しながら作りこめば、ロジックじたいは たいして難しいことはありません
uverworld101nm

2016/08/30 10:37

分かりました。 最初にhtmlを直してみます。
uverworld101nm

2016/08/30 11:45

僕が言いたかったのは、やっぱり$budget=$_GET(budget);では駄目なんですね。
yambejp

2016/08/30 11:51

>$budget=$_GET(budget); ケアレスミスが多いのも気をつけたほうがよいです $budget=$_GET["budget"]; もし上記をりようするなら $budget=isset($_GET["budget"])?$_GET["budget"]:""; など空だった場合を想定しないとエラーが表示されます
uverworld101nm

2016/08/30 12:03

では他のも、 $credit_card=isset($_GET["credit_card"])?$_GET["credit_card"]:""; $food_category=isset($_GET["food_category"])?$_GET["food_category"]:""; と直すべきですね?
yambejp

2016/08/30 12:09

food_categoryはfoodではないのでしょうか?
uverworld101nm

2016/08/30 12:21

間違えました。$food=isset($_GET["food"])?$_GET["food"]:"";ですね?
yambejp

2016/08/30 12:56

まぁその流れですが、それって結局filter_inputでバリデートしているのと変わらないですよ
uverworld101nm

2016/08/30 13:14

でも、filter_inputに慣れていないので質問したまでです。 urlに$foodを追加する場合は、'&food='.$food.で大丈夫ですか?
yambejp

2016/08/30 13:22

サンプルとか読む気ないんですね urlencode()してください '&food='.urlencode($food)
uverworld101nm

2016/08/30 14:15

いや、その '&food='.urlencode($food) をページングに実装すると、ページ渡しが出来なくなります。
yambejp

2016/08/30 14:26

そうはならない foodは仕様上「R031」か「R032」がわたるので urlencodeしてもしなくても同じ値にしかならない したがってurlencodeをしたからページ渡しができないのではない ではなんのためにurlencode()するのかというと、 ユーザーが悪意をもってfoodのデータを書き換える可能性があるから ユーザーが送ってくるデータはすべて汚染されているという考え
yambejp

2016/08/30 14:27

ちなみに、このやり取り続ける気ないのでギブアップします good luck!
guest

0

html, body, formタグが複数あるのがおかしいのではないですか。

HTML

1<html> 2<head> 3<title>API_SAMPLE</title> 4</head> 5<body> 6 <form method="GET"> 7 <select name="budget"> 8 <option value="B001">〜2000円</option> 9 <option value="B002">2001円〜3000円</option> 10 <option value="B003">3001円〜4000円</option> 11 </select> 12 <select name="food"> 13 <option value="R031">ステーキ</option> 14 <option value="R032">カレー・ハヤシライス</option> 15 </select> 16 <select name="credit_card"> 17 <option value="c01">VISA</option> 18 <option value="c02">マスター</option> 19 </select> 20 <input type="submit" name="search" value="検索" onFocus="this.select()"> 21 </form> 22</body> 23</html>

投稿2016/08/30 09:00

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

uverworld101nm

2016/08/30 09:03

ご回答ありがとうございます。 budgetはbudgetだけで検索できるようにし、foodとcredit_cardは一括で検索できるようにしたいです。
guest

0

if (isset($_GET['credit_card']) || isset($_GET['budget'] || isset($_GET['food'] )) {

カッコの数がちがうんじゃ?
エラーメッセージがでてませんか?

投稿2016/08/30 08:54

jm1156

総合スコア866

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

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

uverworld101nm

2016/08/30 08:56

今、直しました。 すみません。 直しましたが、質問の通りです。
uverworld101nm

2016/08/30 09:03

直しても、foodとcredit_cardの一括送信ができません。
jm1156

2016/08/30 09:03

直ってないようですけど、まぁいいです。 っていうか、↓原因はこっちの質問と同じです。 https://teratail.com/questions/45771 $credit_card=$_GET ["credit_card"]; $budget=$_GET ["budget"]; $food_category=$_GET["food_category"]; 変数名がバラバラですよ。 値をトレースすればすぐわかると思います。
uverworld101nm

2016/08/30 09:14

すみません、分からないので教えてください。
jm1156

2016/08/30 09:27

最初の行 if (isset($_GET['credit_card']) || isset($_GET['budget'] || isset($_GET['food'] )) { では'food'になっていますが、 $food_category=$_GET["food_category"]; "food_category"になっています。 HTMLのほうも <select name="food">になっていますから、 ここの変数が違います。 値のトレースのやり方は自分で調べてください。 エラーメッセージを表示するか、 echoなどで表示させてもいいと思います。
uverworld101nm

2016/08/30 09:31

あっ、すみません。実はfoodの方が正解なんです。 ですが、foodで統合しても検索フォームが送れません。
jm1156

2016/08/30 09:36

$urlの部分もなおしましたか? 直したのであれば、出力されるURLがどうなっているのかを確認してみればいいと思います。 内容がおかしいのであれば、それぞれの変数をechoしてみてどれがおかしいのかを調べましょう。
uverworld101nm

2016/08/30 10:36

少し話が逸れますが、僕のurlのパラメータはおかしいですか? つまり、このurlのパラメータだと、色々と不備ですか?
jm1156

2016/08/30 10:42

コードが修正されたので元の$urlがわからないのですが・・・。 たしか、urlの部分も、food_categoryになっていましたよね? そこもfoodになおさないとだめじゃないでしょうか? ちゃんと出力されるURLを調べましたか?
uverworld101nm

2016/08/30 10:48

yambejpさんが言うように、僕のurlは直す所が多いですか?
jm1156

2016/08/30 10:50

いや、だからw コードが修正されたので元の$urlがわからないですw しいていうなら、全体的になおすところが多いです・・・。
uverworld101nm

2016/08/30 11:41

例えば、どういうところを直した方がいいですか? 今回の質問以外のところで
jm1156

2016/08/30 11:49

mizさんが書いてます。 HTMLの文法の基礎ができてないです。 HTMLの文法は自分で調べてください。 チェックしてくれるサイトもあります。
uverworld101nm

2016/08/30 15:35

説明不足なので説明します。 '&food='.urlencode($food)とすべきですか? yambejpさんが >ではなんのためにurlencode()するのかというと、 ユーザーが悪意をもってfoodのデータを書き換える可能性があるから ユーザーが送ってくるデータはすべて汚染されているという考え とおっしゃっていましたが、僕のコードだと、汚染されやすいのですか?
jm1156

2016/08/30 23:17

いや、それよりも、私の言ったHTMLの文法の基礎は調べましたか? urlencodeを使うべきかどうはか調べましたか? 使うかどうかはあなた次第です。 あなたが使いたい、使ったほうがいいと思うなら使えばいいと思います。 「汚染されやすい」とあなたが判断して、それがイヤなら使えばいいです。 そんなことはないと判断するなら、使わなければいいです。
jm1156

2016/08/31 02:38

じゃぁもういいですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問