• 締切済み

php セレクトボックス 分岐 わかりません・・・

php if文? セレクトボックスの選択に応じて、次ページで表示するものも変えたい。 授業評価アンケートのデータ収集システムを開発中です。 page1.php では、 年度(セレクトボックス)[nendo] 学年(セレクトボックス)[gakunen] クラス(セレクトボックス)[class] 科目名(テキストボックス)[kamokumei] 科目コード(テキストボックス)[kamokucode] 分類(テキストボックス)[kind] 履歴者数(テキストボックス)[people] を選択及び入力します。 page2.php では page1.php で選択及び入力された情報をPOST?hidden?などを利用し、 年度:2011 学年:1 クラス:1 科目名:国語 科目コード:11L901 分類:講義科目 履歴者数:40 のように表示させ、その下にアンケートの回答者数を入力する表を示します。 分類のセレクトボックスには4種類の項目があります。 講義科目・体育科目・実験科目・HR です。 分類により、アンケートの設問数が異なるようにしたいのです。 たとえば、 講義科目は設問が1~5。体育科目は1~8。実験科目は1~10。HRは11~15。 だとします。 page1.php 入力された「分類」に応じて、設問数の異なる、 page2.php を表示したいのですが、わかりません。 また、アンケートの表については、 A~F評価があり、 設問1のAならそのマスをname="1A"、設問2のBならname="2B",・・・というようにしています。 page3.php 入力したものを全て表示し、で確認ページとし、 page4.php で、「登録」ボタンを押すと、 年度 学年 ・ ・ ・ 履歴者数 ・ ・ ・ 1A 1B ・ ・ ・ 15F (↑のような構造のtableも用意済み) のデータをmysqlに挿入します。 「分類」による分岐をせず、 page2.phpで、設問数1~5の場合で、データの挿入には成功しました。 6~15については、空となっています。 「分類」により設問数の異なるpage2.phpを表示し、 現在の段階のように、データを挿入できるような形態にできませんでしょうか? どうかお願いしたします!!!!!!!!!! 時間がありません>< お願いします!!!!

  • PHP
  • 回答数4
  • ありがとう数4

みんなの回答

回答No.4

こんばんは。 >require_once '/HTMLファイルのディレクトリ/kougi.html'; >のところはphpではいけないのでしょうか? ちょっと???ですが・・・、何でもいいですよ。テキストでも・・・。 page1.php これは問題ないですよね? 普通にフォームに入力(選択)してもらって、page2.phpを呼べばいいです。 page2.php >「分類」によって、page2.phpで表示されるアンケートの設問数を変えたいのです。 はい。 なので、設問数が違うhtml(phpでもいいけど、phpにする必要もない・・・)を用意しておきます。 >page1で選択した分類が・・・という風にしたいです。 そうです。 なので、require_onceでif文を書いて、読み込むhtmlを変えるんです。 これでpage1.phpで選択された分類によって、表示するページ(設問数が変化する)を変えることができます。 それぞれに用意しているhtmlは、それぞれの入力フォームでpage3.phpを呼び出せばいいです。 page3.phpは、どこから呼ばれても関係なく、page2.phpの入力(選択)結果を表示すればいいだけですし、 同様にpage4.phpも、入ってきたリクエストだけDBに入れればいいだけです。 page1.phpからpage2.phpにPOSTしたデータは、前述のように、page2.php側で$_POSTで取れますし、includeするhtmlへの渡し方も、前述の通りでOKです。

回答No.3

こんばんは。 できたのかな・・・? >すみません、たぶん後者です。 例えば・・・、 page1.php <?php なんやかんや・・・ <form action="/page2.php" method="post"> <select name="nendo"> <option value="2010">2010</option> <option value="2011">2011</option> 略 </select> </form> なんやかんや・・・ ?> page2.php <?php なんやかんや・・・ $nendo=$_POST['nendo']; なんやかんや・・・ require_once '/HTMLファイルのディレクトリ/kougi.html'; ?> kougi.html <html> <head>略</head> <body> <?=$nendo?> または <?php echo $nendo?> なんやかんや・・・ </body> </html> みたいな感じです・・・。 これでpage1.phpからPOSTされた年度が表示されます。

y_okamoto_2918
質問者

お礼

わざわざありがとうございます!! まだできていません。 学校のPCで開発しているのですが、土日に工事で停電だったものですから、作業ができずでした・・・・ require_once '/HTMLファイルのディレクトリ/kougi.html'; のところはphpではいけないのでしょうか? page1.php では年度(セレクトボックス)・学年(セレクトボックス)・クラス(セレクトボックス)・科目名(テキストボックス)・科目コード(テキストボックス)・分類(テキストボックス)・履歴者数(テキストボックス)を入力します。 そしてpage2.phpに 「分類」によって、page2.phpで表示されるアンケートの設問数を変えたいのです。 page2.phpで表示される内容について、 page1で選択した分類が 講義科目なら、設問数5のアンケート 実験科目なら、設問数10のアンケート 選択科目なら、設問数15のアンケート HRなら、設問数15~-20のアンケート という風にしたいです。 page2.phpだけで表示できないのなら、他の方法でもいいのですが、わかりません。 そして、アンケート結果入力をして、 page3.phpで確認作業 page4.phpでDBへ登録。 という風にしたんですが、 教えて頂いたものを活用する方法がわかりません・・・すみません よろしくおねがいします!

回答No.2

こんにちは。 考え方は、いたって単純です。 例えば・・・、 kougi.html(設問1-5) taiiku.html(設問1-8) など、レイアウトが違うHTMLファイルを作成しておきます。 ある程度は静的に書けばいいのですが、どうしても動的に表示させたいものがあるでしょう。 例えば、前の画面で入力された値など。 この場合、HTML内の表示させたい箇所に、 <?php echo $変数名?> (ショートタグが使える設定になっているなら<?=$変数名?>でOK) と書いてやります。 で、問題のpage2.phpですが、 これはクラスになってるんですかね? それともただのPHPファイル? 前者の場合は、 final class page2{ // エントリポイントのファンクション、名前は適当・・・ public function execute(){ $variables=array(); $variables['変数名(これはHTMLファイルに書いた変数名※$記号はナシ!!)']='値'; // 必要なものを追加・・・。よーするに連想配列 if(HTMLの呼び出し分岐){ $html='/HTMLファイルのディレクトリ/kougi.html'; }elseif(同様){ $html='/HTMLファイルのディレクトリ/taiiku.html'; }// ・・・以下略 ob_start(); extract($variables, EXTR_OVERWRITE); // これでHTMLに出力する変数の配列を展開しています。 require_once $html; // 実際にHTMLファイルをrequire(includeでもOK)する。 $output = ob_get_clean(); // ここでHTMLに変数展開されたもの(出来上がり)が$outputに入ります。 // headerを吐くならここでやっておく(キャッシュ操作とか・・・) exit($output); // echoと同じ。もうやる事がないのでexit() } } 後者の場合は、上からclass定義とfunction定義を外せばいいです。 特にheaderとかを吐かないなら、ob_start()とかも不要です。 っちゅうか、クラス化されていない場合はファイルの上のほうでheader書いてるわな・・・普通。 いずれにしても、HTMLとPHPを分けておいた方が楽ですね。

y_okamoto_2918
質問者

お礼

回答ありがとうございます!! すみません、たぶん後者です。 できるかわかりませんが、参考にやってみます!! 丁寧な回答ありがとうございます!! わからなければまたお願いするかもしれませんが、 そのときはよろしくお願いします・・・

回答No.1

こんばんは。 page2.phpでの画面の出し分け(設問数が違うので、何らかの方法で分けないといけないが・・・)はどのようにおこなう予定ですか? 1.htmlの中にPHPコードが書いてある? 2.htmlは外部ファイルにして、PHPでincludeしている? 1ならpage1.phpで呼び分けないといけません。 2ならpage2.phpで分岐処理を書いて、includeするhtmlを振り分けます。 個人的には2が好きですが・・・。

y_okamoto_2918
質問者

お礼

こんばんは! 1で行おうとしました。 何故、知識が浅いもので、if文でできるのかなとか思ったのですが、うまくできずです。 include ちらっと参考書か何かで見たことがある程度で、実用方法が全然わかりませn;; 直接活かせるようなサンプルソースなど頂けるととても助かります>< どうぞお願いします!

関連するQ&A

  • phpでのセレクトボックスからの受け渡しについて

    phpにおいての、セレクトボックスにより選択させたデータの受け渡しについて、どなかか教えてください。 授業評価アンケートのデータ収集システムを卒研で開発しています。 その中の一部で、 年度・学年・クラス を各々セレクトボックスにて選択させるページがあります。 仮にpage1.htmlとし、以下にその一部を示します。 <FORM method="post" action="page2.php" enctype="application/x-www-form-urlencoded"> <P> 年度: <SELECT name="nendo"> <OPTION value="1">2006</OPTION> <OPTION value="2">2007</OPTION> <OPTION value="3">2008</OPTION> <OPTION value="4">2009</OPTION> <OPTION value="5">2010</OPTION> <OPTION value="6" selected>2011</OPTION> <OPTION value="7">2012</OPTION> </SELECT> 学年: <SELECT name="gakunen"> <OPTION value="1">1年</OPTION> <OPTION value="2">2年</OPTION> <OPTION value="3">3年</OPTION> <OPTION value="4">4年</OPTION> </SELECT> クラス: <SELECT name="class"> <OPTION value="1">1組</OPTION> <OPTION value="2">2組</OPTION> <OPTION value="3">3組</OPTION> <OPTION value="4">4組</OPTION> <!-- --> </SELECT> </P> <P><INPUT type="submit" value="科目選択へ"> <INPUT type="reset" value="取り消す"></P> 次のページ(page2.php)では 科目・分類 を各々セレクトボックスにて選択させるページを用意します。 その際に、科目・分類の各々のセレクトボックスの上に、 前ページ(page1.php)にて選択された値(valueではなく文字列(2008,1年))を表示します。 年度:~~ 学年:~~ クラス:~~ これについては以下の方法で成功しました。 年度:<? echo $_POST["nendo"]+2005?> 年 学年:<? if ($_POST["gakunen"] == "1"){ echo "1年"; } else if ($_POST["gakunen"] == "2"){ echo "2年"; } else if ($_POST["gakunen"] == "3"){ echo "3年"; } else if ($_POST["gakunen"] == "4"){ echo "4年"; } ?> クラスについても同様の手法。 ここからが本題です。 page1.html→page2.php に受け渡した年度・学年・クラスのデータを page2.php→page3.php にも同じように、年度:~~・・・と表示させたいのですが、わかりません。 hiddenというのを使うのでしょうか。 調べても、このパターンのように1ページまたいでのデータの受け渡し方法がよくわかりません。 他の方法もあるのでしょうか。 どなたか具体的に教えてください!

    • 締切済み
    • PHP
  • Web上(php)からmysqlにデータを挿入する

    授業評価アンケートのデータ収集システムを開発しています。 年度(セレクトボックス)[nendo]・学年(セレクトボックス)[gakunen]・クラス(セレクトボックス)[class]・科目名(テキストボックス)[kamokumei]・科目コード(テキストボックス)[kamokucode]・分類(セレクトボックス)[kind]・履歴者数(テキストボックス)[people] について、POST?hidden?でデータをページをまたいで持っていきます。 最終的に、アンケートの評価として、設問1~14のそれぞれについてA~F評価の人数を入力します。 表形式にしており、 設問1のA評価については、name="1A" 設問2のB評価については、name="2B" のようにしています。 そして、 「登録ボタン」 を押すと、 年度・学年・ ・・・ ・履歴者数 及び 設問1~14のそれぞれについてA~F評価の人数 をデータベースに挿入したいのですがわかりません。 データベースの構造は、 データベース名:student テーブル名:data field: nendo gakunen class kamokumei kamokucode kind people 1A 1B ・ ・ ・ 31F のようになっています。 今、挿入しようとしているアンケートについては、設問数は14です。 if文で、「分類」の選択(4つ)に応じて、設問数が変えたいため、31Fまでフィールドを用意しています。 今、挿入しようとしているものは年度や学年や・・・と、設問1~14のそれぞれについてA~F評価の人数ですが、フィールドが・・・31Fまであっても問題ないのでしょうか? <?php mysql_connect("localhost", "aiueo","##aiueo"); //データベースへ接続 mysql_select_db("aiueo"); //データベースを選択 $14F = $_POST["14F"]; $14E = $_POST["14E"]; $14D = $_POST["14D"]; ・ ・ ・ $people = $_POST["people"]; $kind = $_POST["kind"]; $kamokucode = $_POST["kamokucode"]; $kamokumei = $_POST["kamokumei"]; $class = $_POST["class"]; $gakunen = $_POST["gakunen"]; $nendo = $_POST["nendo"]; $sql = 'INSERT INTO `data` (`nendo`, `gakunen`, `class`, `kamokumei`, `kamokucode`, `kind`, `people`, `1A`, `1B`, `1C`, `1D`, `1E`, `1F`,・・・) VALUES     (\'\', \''.$nendo.\''.$gakunen.'\', \''.$class.'\', \''.$kamokumei.'\', \''.$kamokucode.'\',\''.$kind.', \',\''.$people.'\', \''.$1A.'\', \''.$1B.'\', \''.$1C.'\', \''.$1D.'\', \''.$1E.'\', \''.$1F.'\',・・・) mysql_query( $sql ); ?> のようにしています。 どなたか教えてください!!!

    • ベストアンサー
    • PHP
  • phpとjavascript ・・・・ について

    授業評価アンケートのデータ収集システムの開発を行っています。 科目及び科目コードを入力させるページ(page1.php)があります。 その入力について、入力ミスをなくすために、「参照」ページ(kamoku.html)をつくり、 そこには予め「科目/科目コード」という項目のある表が用意されており、 そのページ(kamoku.html)へジャンプし、そこで入力したい項目をクリックすると、 page1.phpの科目及び科目コード、各々のテキストボックスに入力したいものを代入することに成功しました。 このような構造にする前は、 手入力した後、 「次ページへ」 をクリックすると、次ページへジャンプするようになっていました。 <FORM method="post" action="page2.php" enctype="application/x-www-form-urlencoded"> javascript を利用したのですが、 これが原因なのでしょうか? javascriptを利用したページの拡張子は必ずhtmlじゃないといけないのでしょうか? (page1.phpをただ単にpage1.htmlにしてもダメでしたが・・・) URLについて、 http://----/page1.php 次ページをクリックすると http://----/page1.php?nendo=6&gakunen=1&class=1&kamokumei=&kamokucode=&kind=1&people=&sub=次ページへ のようになり、昔のように次ページをジャンプせず、入力項目が空になったりします。 どなたか解決法を教えてください!!! お願いします><

    • ベストアンサー
    • PHP
  • テクストボックスからセレクトボックスへ

    1.テキストボックスにテキストを入力 2.追加ボタンを押す 3.セレクトボックスに表示 4.セレクトボックスに追加した項目を選択し削除ボタンで削除できる 以下のようなプログラムを教えていただけますでしょうか?

  • テキストボックスにクリックしたものを代入する

    授業評価アンケートのデータ収集システムを卒研で作っています。 あるページ、(test.php)に 学年・クラス etc 科目名/科目コード:[textbox1]/[textbox2] 参照 etc というような行を作ります。 「参照」にリンク先として、 kamoku.html という、 学年・クラス・科目名・科目コード という項目のある表を表示します。 参照をクリックすると、新しいタブで kamoku.html が開きます。(これはできました) このページ内の表をユーザに見て頂き、 test.php にて科目名・科目コードを入力してもらおうと考えました。 しかしそれでは入力ミスも生じてくると思いますで、 表内の、ある科目名をクリックすると、 test.php の科目名のテキストボックス(textbox1)にその文字列(科目名)が代入され、 科目コードも同様にテキストボックス(textbox2)にその文字列(科目コード)が代入される というのはできませんでしょうか? そうすれば入力ミスもなくなりますので。 どなたか教えてください! お願いします!

    • ベストアンサー
    • PHP
  • aspのセレクトボックスにDBのデータを表示する

    お世話になっています。 現在、aspとSQLServerを使って一覧表を作成しています。 その一覧表を、大分類と中分類のセレクトボックスから 選択して、検索ボタンを押すと、SQLを作成して一覧表を表示する のですが、問題は、大分類を選択した後、その大分類で絞りこまれた 中分類を表示するのに少し時間がかかりすぎるのです。。 中分類はSQLServerのマスターからひろってくるのですが、SQLの 実行自体は1秒もかからないのですが、HTML上でセレクトボックスに 表示させると、すごく時間がかかるのです。テキストファイルから 読み込んだ大分類のセレクトボックスは表示が速いのに、 中分類を同じように速く表示させるには何か別の技術が必要 なのでしょうか? また、大分類のセレクトボックスのonChangeにSubmit()して、 ページを作成しなおしています。 よろしくお願いいたします。

  • セレクトボックスについて

    現在、PHP画面を使って登録画面を作成しています。 必要事項を打ち込んだら、「確認」のボタンを押し、ページジャンプして 打ち込んだ内容を確認させその内容でよければ「登録」ボタン、 修正したければ「修正」ボタンといった流れで、修正ボタンを押すと 必要事項を打ち込んだ画面に戻るようにしているのですが、 その際、セレクトボックス(<select>)に最初に打ち込んだ内容を表示させたいのですが どうしたらいいのでしょうか? (最初にセレクトボックスで「男」を選択していたら修正で戻っても「男」が選択されているようにしたい) input typeのtextで打ち込んだ内容はセッションと変数を使ってvalueに値を入れたら 表示することができたのですが… 回答お待ちしています。

    • ベストアンサー
    • PHP
  • AJAX+PHPでセレクトボックスの連動

    AJAX+PHPでセレクトボックスの連動をしようとしています。 function SelAjax(){ var x = $('#category1').val(); $.ajax({ type: "POST", url: "category.php", data: {"prm":x}, dataType: "json", success: function(data, status){ $.each(data,function(i) { $('#category2').append($('<option>').attr({ value: i }).text(data[i])); }); }, error: function(XMLHttpRequest, status, errorThrown){ alert("エラーが発生しました!"); } }); } としています。 PHP側で $CATEGORY2 = array( 1 => array( 1 => "a", 2 => "b", 3 => "c", 4 => "d", ), 2 => array( 1 => "e", 2 => "f", 3 => "g", 4 => "h", ), 3 => array( 1 => "i", 2 => "j", 3 => "k", 4 => "l", ), 4 => array( 1 => "m", 2 => "n", 3 => "o", 4 => "p", ), 5 => array( 1 => "q", 2 => "r", ), 6 => array( 1 => "s", 2 => "t", 3 => "u", ), ); $ary = array(); if($_POST["prm"]){ for($i=1;$i<=6;$i++){ if($i ==$_POST["prm"] ) $ary = $CATEGORY2[$i]; } } echo json_encode($ary); としています。 一回目に1番目のセレクトボックスを選択してAjaxでPOSTし2つ目のセレクトボックスを生成できました。 しかし、2回目として1番目のセレクトボックスを選択した際に、1回目にPHPから受け取った配列に積みあがってしまいます。 どのように対処すればいいかわかりません。 教えてください。

    • ベストアンサー
    • AJAX
  • テキストボックスとセレクトボックスの選択肢の連携

    この度はお世話になります。 1個のテキストボックスに入力された文字列により、その後の1個の セレクトメニューの選択肢を変更することってできるのでしょうか? 具体的には以下のような動作です。 ・デフォルトではテキストボックスに文字列が入力された場合は、  その後のセレクトボックスには「トマト、きゅうり、ほうれんそう」  の選択肢が入る。 ・テキストボックスに「あいうえお」と入力された時のみ、その後の  セレクトボックスが「りんご、みかん、ぶどう」の選択肢に変わる。 ・テキストボックスに「かきくけこ」と入力された時のみ、その後の  セレクトボックスに「あじ、さば、かつお」の選択肢に変わる。 こんな感じですが、よろしくお願い致します。 当方、只今javascriptを勉強しており、条件式に苦戦しております。 サンプルプログラムを見せていただけるとありがたく思います。

  • phpでのセレクトボックスの値を配列で指定

    セレクトボックスの値をループで繰り返してvalueを設定しているのですがvalueの数が多くなればかなり見づらく 修正もしにくいのでvalue値を配列などで指定したいと思っています。 その場合、どのようにしてvalue値に配列を設定すればよろしいのでしょうか。 また配列でvalueを設定した場合[selected]などで初期値を設定する方法も分からなかったので 何かわかりやすくかつ少ない行数で胥吏できる方法があればご教授お願いします。 <?php for ($data = 1; $data < 5; $data++) { ?> <tr><td> <select name="test<?php echo $data?>"> <option value=1>1 <option value=2>2 <option value=3>3 <option value=4>4 <option value=5>5 <option value=6>6 <option value=7>7 <option value=8>8 <option value=9>9 <option value=10>10 </select> <?php } ?> ※option valueが20とか30とかになるとかなり見づらい処理かなと思います。 配列を変えるだけでいいようにしたいです。

    • 締切済み
    • PHP

専門家に質問してみよう