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

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

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

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

HTML

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

Q&A

解決済

1回答

2278閲覧

phpでFormで取得した値の結果でメニューを作成し、さらにFormにより値を取得する

SugiuraY

総合スコア317

PHP

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

HTML

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

0グッド

0クリップ

投稿2016/11/15 08:43

編集2016/11/16 05:51

お世話になっております。

表題とても分かりづらくて申し訳ございませんが、結論を申し上げますと以下ことを実現したいと考えております。

【a.php】 <? $comp=array("A社","B社","C社"); ?> (表示画面のイメージ1) 1.A社 2.B社 3.C社 *2.B社を選択 (表示画面のイメージ2) <B社> 1.甲従業員 2.乙従業員 3.丙従業員 *3.丙従業員を選択 (表示画面のイメージ3) <B社>丙従業員>> id 2000 性別男性

すべてFormで選択した$XX=$POST['name']の値をkeyにして
MYSQLから必要な情報を取得しております。
また、Formのactionはすべて"a.phpです。

要するにユーザーの選択によりメニュー画面を表示し、さらにその選択から
必要な情報を表示する、加えてそれまでの選択しを消さない(上記でいうところのイメージ2、イメージ3)プログラムを実装したいと考えております。

あまりHTML自体に明るくなくて申し訳ないのですが上記の意図のようにPOSTで得た結果でメニューを表示し、さらにその内容からFormを作り、新たなPOSTを得ることは可能でしょうか。
それとも上記のような選択の結果をさらに選択のようなプログラムを実装使用とする場合通常、Formを重ねるようなことはしないのでしょうか?

アドバイスを頂ければとてもありがたいです。
なにとぞ、宜しくお願い申し上げます。

convsert.php <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <? $array_11=array("a","b"); $array_12=array("c","d"); $array_21=array("甲","乙"); $array_22=array("丙","丁"); $array_23=array("戊","己"); $array_24=array("己","庚"); ?> <form class="" action="convert.php" method="post"> <input type="radio" name="q1" value="A">A <input type="radio" name="q1" value="B">B <input type="submit" name="rs_1" value="選択する_その1"> </form><br> <!---::::::::::::::::::::::::::::::::::::::::::::::::::::::: 選択する_その1 AかBかを選択することでA->a,b B->c,dの2X2の4通り ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--> <? if (isset($_POST['rs_1'])):?> <? $choice_1=$_POST['q1'];?> <?if ($choice_1=="A"):?> <form class="" action="convert.php" method="post"> <input type="radio" name="q2" value="A"><?echo $array_11[0];?> <input type="radio" name="q2" value="B"><?echo $array_11[1];?> <input type="submit" name="rs_2" value="選択する_その2"> </form> <?endif;?> <?if ($choice_1=="B"):?> <form class="" action="convert.php" method="post"> <input type="radio" name="q2" value="A"><?echo $array_12[0];?> <input type="radio" name="q2" value="B"><?echo $array_12[1];?> <input type="submit" name="rs_2" value="選択する_その2"> </form> <?endif;?> <?endif;?> <!---::::::::::::::::::::::::::::::::::::::::::::::::::::::: 選択する_その2 A->a->甲、乙 A->b->丙、丁 B->c->戊、己 B->d->己、庚 の4X2=8通りの結果を最終的に出力する !!その際、a,b,c,dを選んだ場合でもPOSTしてもそれらの選択肢をけさない!! ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--> <? if (isset($_POST['rs_2'])):?> <? $choice_2=$_POST['q2'];?> <?if ($choice_2=="a") {print_r($array_21);}?> <?if ($choice_2=="b") {print_r($array_22);}?> <?if ($choice_2=="c") {print_r($array_23);}?> <?if ($choice_2=="d") {print_r($array_24);}?> <?endif;?> </body> </html>

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

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

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

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

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

guest

回答1

0

ベストアンサー

可能です。
DBから値を取得するということは、

  • 最初の読み込み時に全選択肢とケースを出力し、JSデータで値を入れ替える
  • AJAXで都度POSTし、戻り値からデータを生成して値を入れ替える

のどちからになりますが、2番目の方がスマートでしょうね。

選択肢がセレクトなのかボタンなのか分かりませんので、トリガーは適当です。

javascript

1$('#hoge').on('click', function() { 2 var company = $('#hoge').val(); 3 $.ajax({ 4 url: 'a.php', 5 data: { 6 "company": company 7 }, 8 dataType: 'html', 9 type: 'post' 10 }).done(function(file) { 11 //jsonデータを加工して代入処理 12 }); 13});

php側では値を受け取ってJSONデータをechoしてあげれば良いです。
恐らく最後のデータが必要なのでしょうから、それをhtmlのformにセットすればいいのではないでしょうか。
見当違いでしたら申し訳ありません。

投稿2016/11/15 09:10

編集2016/11/15 09:11
takepieee

総合スコア686

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

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

SugiuraY

2016/11/15 09:21

ご回答有難うございます。 いえ、私がJSに詳しくないため、まだコードを見てもすぐには理解ができない部分もありますが、目的としては仰るとおりです。因みに全くやり方にこだわっているわけではないのですがphpだけでFormを重ねる方法で実現することは不可能なのでしょうか?
takepieee

2016/11/15 09:29

ページをリロードしても大丈夫であればJSは不要です。 POSTなりGETなりして値をPHPで取得。 その値でセレクトなりラジオボタンなりのオブジェクトを変数化しておき、最後にHTMLを読み込んでその変数を該当箇所に出力すればよいわけですから。 formは重ねる必要ないのでは?と思います。受け取る値によってPHPで処理を変えればいい話です。 リロードしないでやりたいのであれば、上記2つの方法しか思いつきません。
SugiuraY

2016/11/15 14:44

ご回答いただき、誠にありがとうございます。 上記の例で申し上げれば、ユーザーがB社を選択して、初めて甲、乙、丙という値をMYSQLから取得し、さらに乙を選択することで初めて求めるid及び男性という情報にたどり着きます。 仮にユーザーがC社を選択した場合には丁、戊という選択肢が発生しそのうちどちらかを選ぶということで2重の選択肢が発生するため、formが重なる(初めのA~C社を選択しないと次の選択肢が決まらない)と表現をさせていただきました。また、初めにB社を選んで乙を選んだ人がまた初めから選択肢を戻す(リロード?)ことをしないために、乙のidと性別を表示しながらも甲、乙、丙の選択肢を残してあげたいとの意図でした。これもおっしゃる方法で実装は可能ということでしょうか? 読み間違いがあれば誠に申し訳ございませんが、よろしくお願い申し上げます。
takepieee

2016/11/16 01:28 編集

仮に3つ全てプルダウンだったとします。 それぞれname=selecta, selectb, selectcだったとします。 そのプルダウンを囲む形でformがあるとします。 さらにその3つの全てはphpで配列からoptionを生成しているとします。 最初のselectaを選んだ時点で<select name="selecta" onchange="submit(this.form)">が送信a.phpに送信されますので値を取得します。 それをselectedとして再生成、その値からselectbを生成、という流れでしょうか。それを繰り返すだけです。 a.phpの先頭に var_dump($_POST); を入れて、どんな値がセットされてきたのか確認をしてください。 selecta, selectb, selectc全てが送られると思いますが、selectaを選んだ時点ではそれしか値がセットされていないと思います。 selectbを選んだ時点ではselecta, selectb両方がセットされていると思いますので、それぞれselectedとしてセット、selectcの値も出力、という流れですがいかがでしょうか。 私が配列からoption値を生成するのに使っている関数を念のため貼っておきます。 function html_options( $arr, $selected ) { $op = ''; if ( is_array( $arr ) ) { reset( $arr ); while( list( $key, $val ) = each ( $arr ) ) { $op .= "<option value=\"" . $key . "\""; if ( $selected == $key ) { $op .= " selected"; } $op .= ">" . $val . "</option>\n"; } } return $op; } 使い方はphp側で $selecta_option = html_options($comp, $comp_select); とセットし、 <select name="selecta" onchange="submit(this.form)"><?php echo $selecta_option; ?></select> と埋め込めば大丈夫です。 空白行が必要であればそれも入れて下さい。 私の理解力がないのか、質問が曖昧に感じましたので、ふわっとした答えを返しています。申し訳ありません。
SugiuraY

2016/11/16 05:41

ご回答ありがとうございます。また、質問が曖昧であった点を反省し、具体的なコードを作成いたしました。実行して頂くと、選択肢_その2を選択すると選択肢その2が消えてしまい、また最終的な値も得ることができない点をご覧いただけると思います。 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <? $array_11=array("a","b"); $array_12=array("c","d"); $array_21=array("甲","乙"); $array_22=array("丙","丁"); $array_23=array("戊","己"); $array_24=array("己","庚"); ?> <form class="" action="convert.php" method="post"> <input type="radio" name="q1" value="A">A <input type="radio" name="q1" value="B">B  <input type="submit" name="rs_1" value="選択する_その1"> </form><br> <!---::::::::::::::::::::::::::::::::::::::::::::::::::::::: 選択する_その1 AかBかを選択することでA->a,b B->c,dの2X2の4通り ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--> <? if (isset($_POST['rs_1'])):?> <? $choice_1=$_POST['q1'];?> <?if ($choice_1=="A"):?> <form class="" action="convert.php" method="post"> <input type="radio" name="q2" value="A"><?echo $array_11[0];?> <input type="radio" name="q2" value="B"><?echo $array_11[1];?>  <input type="submit" name="rs_2" value="選択する_その2"> </form> <?endif;?> <?if ($choice_1=="B"):?> <form class="" action="convert.php" method="post"> <input type="radio" name="q2" value="A"><?echo $array_12[0];?> <input type="radio" name="q2" value="B"><?echo $array_12[1];?>  <input type="submit" name="rs_2" value="選択する_その2"> </form> <?endif;?> <?endif;?> <!---::::::::::::::::::::::::::::::::::::::::::::::::::::::: 選択する_その2 A->a->甲、乙  A->b->丙、丁 B->c->戊、己  B->d->己、庚 の4X2=8通りの結果を最終的に出力する !!その際、a,b,c,dを選んだ場合でもPOSTしてもそれらの選択肢をけさない!! ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--> <? if (isset($_POST['rs_2'])):?> <? $choice_2=$_POST['q2'];?> <?if ($choice_2="a") {print_r($$array_21);}?> <?if ($choice_2="b") {print_r($$array_22);}?> <?if ($choice_2="c") {print_r($$array_23);}?> <?if ($choice_2="d") {print_r($$array_2c);}?> <?endif;?> </body> </html>
SugiuraY

2016/11/16 05:47

もうしわ絵家ございません、コードミスがありました。 追記します。convert.php <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <? $array_11=array("a","b"); $array_12=array("c","d"); $array_21=array("甲","乙"); $array_22=array("丙","丁"); $array_23=array("戊","己"); $array_24=array("己","庚"); ?> <form class="" action="convert.php" method="post"> <input type="radio" name="q1" value="A">A <input type="radio" name="q1" value="B">B  <input type="submit" name="rs_1" value="選択する_その1"> </form><br> <!---::::::::::::::::::::::::::::::::::::::::::::::::::::::: 選択する_その1 AかBかを選択することでA->a,b B->c,dの2X2の4通り ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--> <? if (isset($_POST['rs_1'])):?> <? $choice_1=$_POST['q1'];?> <?if ($choice_1=="A"):?> <form class="" action="convert.php" method="post"> <input type="radio" name="q2" value="A"><?echo $array_11[0];?> <input type="radio" name="q2" value="B"><?echo $array_11[1];?> <input type="submit" name="rs_2" value="選択する_その2"> </form> <?endif;?> <?if ($choice_1=="B"):?> <form class="" action="convert.php" method="post"> <input type="radio" name="q2" value="A"><?echo $array_12[0];?> <input type="radio" name="q2" value="B"><?echo $array_12[1];?> <input type="submit" name="rs_2" value="選択する_その2"> </form> <?endif;?> <?endif;?> <!---::::::::::::::::::::::::::::::::::::::::::::::::::::::: 選択する_その2 A->a->甲、乙  A->b->丙、丁 B->c->戊、己  B->d->己、庚 の4X2=8通りの結果を最終的に出力する !!その際、a,b,c,dを選んだ場合でもPOSTしてもそれらの選択肢をけさない!! ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::--> <? if (isset($_POST['rs_2'])):?> <? $choice_2=$_POST['q2'];?> <?if ($choice_2="a") {print_r($array_21);}?> <?if ($choice_2="b") {print_r($array_22);}?> <?if ($choice_2="c") {print_r($array_23);}?> <?if ($choice_2="d") {print_r($array_24);}?> <?endif;?> </body> </html>
SugiuraY

2016/11/16 05:53

大変申し訳ございません、最後のif文の比較式に誤りがあったため、修正しました。また、質問本文に編集しましたので、そちらをご参照いただけますでしょうか。 重ねてお詫び申しあげます。
takepieee

2016/11/16 06:32 編集

ちょっと作り変えました。 選択肢によって配列をセットする形です。 バタ臭いコードですが、実際では選択肢によって配列をSQLから読み込むだろう事を考え、この方がいいかなと思いまして。 選択肢もifやらelseifやら入れていますが、SQLからデータを持ってくるのであれば、値をセットして戻り値を求めるだけだと思いますので実際にはこんなバタ臭くならないと思います。 あとは工夫すれば大丈夫と思います。 ご参考までに。 <?php if(isset($_POST['rs_1'])) { $q1val = $_POST['q1']; if($q1val == 'A') { $array_2=array("a"=>"a","b"=>"b"); } elseif($q1val == 'B') { $array_2=array("c"=>"c","d"=>"d"); } $radio2 = html_radios($array_2,'','q2') . "\n<input type=\"submit\" name=\"rs_2\" value=\"選択する_その2\">"; } if(isset($_POST['rs_2'])) { $q1val = $_POST['q1']; $q2val = $_POST['q2']; if($q2val == 'a') { $array_2=array("a"=>"a","b"=>"b"); $array_3=array("甲"=>"甲","乙"=>"乙"); } elseif($q2val == 'b') { $array_2=array("a"=>"a","b"=>"b"); $array_3=array("丙"=>"丙","丁"=>"丁"); } elseif($q2val == 'c') { $array_2=array("c"=>"c","d"=>"d"); $array_3=array("戊"=>"戊","己"=>"己"); } elseif($q2val == 'd') { $array_2=array("c"=>"c","d"=>"d"); $array_3=array("己"=>"己","庚"=>"庚"); } $radio2 = html_radios($array_2,$q2val,'q2') . "\n<input type=\"submit\" name=\"rs_2\" value=\"選択する_その2\">"; $radio3 = html_radios($array_3,'','q3') . "\n<input type=\"submit\" name=\"rs_3\" value=\"選択する_その3\">"; } $array_1=array("A"=>"A","B"=>"B"); $radio1 = html_radios($array_1,$q1val,'q1'); function html_radios( $op_arr, $selected, $op_name ) { $op = ""; if ( is_array( $op_arr ) ) { reset( $op_arr ); while( list( $key, $val ) = each ( $op_arr ) ) { $op .= "<label>"; $op .= "<input type=\"radio\" "; $op .= "name=\"" . $op_name . "\""; $op .= "value=\"" . $key . "\""; if ( $selected == $key ) { $op .= " checked"; } $op .= ">"; $op .= $val; $op .= "</label>\n"; } } return $op; } ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <form class="" action="convert.php" method="post"> <div> <?php echo $radio1; ?> <input type="submit" name="rs_1" value="選択する_その1"> </div> <div> <?php echo $radio2; ?> </div> <div> <?php echo $radio3; ?> </div> </form> </body> </html>
SugiuraY

2016/11/16 06:44

早速ありがとうございます。 まだまだ、素人の私にご親切にご教示いただき、有難うございます。 早速修正頂いたコードはこちらで実行検証しようと思うのですが、最後に単純なことをお伺させてください。もっとも肝の部分が、恐らく調べてもたどり着かなかったのですが、 自分が提示させて頂きましたコードに末尾の下記の部分のうち <? if (isset($_POST['rs_2'])):?> <? $choice_2=$_POST['q2'];?> <?if ($choice_2="a") {print_r($array_21);}?> <?if ($choice_2="b") {print_r($array_22);}?> <?if ($choice_2="c") {print_r($array_23);}?> <?if ($choice_2="d") {print_r($array_24);}?> <?endif;?> についてどのような値を取得しているのだろうと疑問に重い、それぞれの選択肢をいまさらながらvar_dumpした結果、 A->a string(1) "A" A->b string(1) "B" B->c string(1) "A" B->d string(1) "B" がそれぞれの結果でした。もちろん、意図したかった取得すべき値はa,b,c,dそれぞれなのですが、なぜPOSTを重ねた結果、2つめの選択肢のvalue(a,b,c,d)をPOSTしているにもかかわらずこのような結果になるのか、ご存知であれば、ご教示をいただけますでしょうか。。 何卒、宜しくお願い申し上げます。
takepieee

2016/11/16 07:08

どの時点(何をクリックした時)のvar_dumpなのか、 何をvar_dumpした結果なのか、 var_dump(◯◯); 結果コピペ の要領でお願いしてよろしいでしょうか?
SugiuraY

2016/11/16 07:15

大変失礼致しました。以下記載させて頂きます。 例えばですが(8パターンあるので) 選択肢_その2)でdを選択肢クリックした時 $choice_2=$_POST['q2'] string(1) "B" となります。 宜しくお願い申し上げます。
takepieee

2016/11/16 07:25

<?php if ($choice_1=="A"):?> <form class="" action="convert2.php" method="post"> <input type="radio" name="q2" value="A"><?php echo $array_11[0];?> <input type="radio" name="q2" value="B"><?php echo $array_11[1];?> <input type="submit" name="rs_2" value="選択する_その2"> </form> <?php endif;?> <?php if ($choice_1=="B"):?> <form class="" action="convert2.php" method="post"> <input type="radio" name="q2" value="A"><?php echo $array_12[0];?> <input type="radio" name="q2" value="B"><?php echo $array_12[1];?> <input type="submit" name="rs_2" value="選択する_その2"> </form> <?php endif;?> q2の出力箇所ですが、valueにAまたはBがセットされています。 当然変数にはその値が出力されます。 正しくは <?php if ($choice_1=="A"):?> <form class="" action="convert2.php" method="post"> <input type="radio" name="q2" value="a"><?php echo $array_11[0];?> <input type="radio" name="q2" value="b"><?php echo $array_11[1];?> <input type="submit" name="rs_2" value="選択する_その2"> </form> <?php endif;?> <?php if ($choice_1=="B"):?> <form class="" action="convert2.php" method="post"> <input type="radio" name="q2" value="c"><?php echo $array_12[0];?> <input type="radio" name="q2" value="d"><?php echo $array_12[1];?> <input type="submit" name="rs_2" value="選択する_その2"> </form> <?php endif;?> ではないでしょうか?
SugiuraY

2016/11/16 07:32

大変失礼致しました。完全に私の見落としでございませす。 POSTを重ねて行うと渡される値が予想していたものと違う結果になる仕様であるとばかり思っておりました。 しかしながら、選択肢_その2を残すためにはこのままのコードではできないため、ご教示いただきました、コード(今平行してみているのですが、やはりまだまだ私が素人で身からうろこでした。。こういう発想は未だ自分にはなかったです。。)と当初ご教示頂いたAJAXによる方法を勉強してみます。 最後に改めて深く御礼をさせてください。 宜しくお願い申し上げます。
takepieee

2016/11/16 07:46

解決したようで何よりです。 AJAXの参考になるものはないかと思ったのですが、ちょっと前にQiita様に寄稿したものが近いので残します。 http://qiita.com/takepieee/items/c140018b6e7c5d031ba6 この記事のデモでモーダルを出してから、名前を検索し、テーブルを出力するところが今回のソレに挙動は近いのかなと思いましたので。 - 何をPOSTしてどんなデータを受け取ったのか、それをどう出力したのか の部分だけご参照頂ければと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問