
今回作りたいものは、このサイトで質問する際の「投稿カテゴリー選択フォーム」と全く同じものです。
大中小のカテゴリーを選択するドロップダウンリストが3つあり、大カテゴリーを選べばそれに応じた中カテゴリーの値が2つ目のドロップダウンリストに入り、
大と中のカテゴリーを選べばそれに応じた小カテゴリーの値が3つ目のドロップダウンリストに入る。というものです。
リストに使うデータは、全てデータベースから取得してきます。(各カテゴリーのデータを格納した3つのテーブルがあります。)
ベースはPHPで作成していますが、この動作を行うにはJavaScriptが必要だとか、onChangeというものを使えばいいとか、ある程度調べたのですが、具体的にどのように記述すればいいのかわかりません。
サンプルが置いてあるサイトも見たのですが、ドロップダウンリストが2個だったり、リストに入るデータが数個の固定された文字列だったりと、応用できるものではありませんでした。
当方、PHPは若干わかりますが、JavaScriptに関してはほとんど知識がありません。
詳細まで教えていただける方、もしくは同じ内容の解説が載っているサイトなどがあれば教えてください。
よろしくお願いします。
No.4ベストアンサー
- 回答日時:
うまく伝わってないようで申し訳ないです。
つまりこういうことです。
<?PHP
$url=($_REQUEST["cat3"]=="")?$_SERVER["PHP_SELF"]:"entry.php";
//カテゴリ3までしっかりデータがはいってない限り再帰的処理をする
print<<<eof
<form action="{$url}">
<select name="cat1" onChange="this.form.submit()">
<option></option>......
</select>
<select name="cat2" onChange="this.form.submit()">
<option></option>......
</select>
<select name="cat3" onChange="this.form.submit()">
<option></option>......
</select>
<input type="text" name="namae" />
<input type="text" name="email" />
<input type="submit" value="送信" />
</form>
eof;
?>
私の勉強不足で理解できていなかったようです。
申し訳ありません。
$urlの取り扱い手法は全く知りませんでした。(^^ゞ
理解して先に進みたいと思いますので、ご提示いただいたソースをもとに勉強しなおします。
ありがとうございました。
No.3
- 回答日時:
>カテゴリーと他の項目は送り先が違うので、フォームを分けるしかないように思います。
論点がずれている気がします。
結局カテゴリを選択するまでentry.phpにデータを送ることはないので
formは一つあれば充分です。
カテゴリ1を選ぶ→自分にデータを送る→カテゴリ2を選ぶ→自分にデータを送る→
カテゴリ3を選ぶ→自分にデータを送る→ここではじめえてactionに
entry.phpをプログラムで書きこんでやるのが妥当です。
つまりはjavascriptでsubmitこそしていますが、実際にはsubmitボタンを
押しても同じです。
データが足りないときは再帰的な処理がされて、最後すべてのデータが
そろったところではじめて登録画面にデータをおくってやるということです。
セッションとかクッキーとか最初から無理しないで、仕組みをよく
理解すれば解決方法はみえてきますよ。
たびたびご回答ありがとうございます。
「カテゴリーと他の項目は送り先が違う」という理由は、
カテゴリーを選んだ時のデータの送り先は自分自身なので、<form action="$PHP_SELF">となると思います。
一方、フォーム全部のデータの送り先はentry.phpなので、<form action="entry.php">となると思います。
よって、一つのフォームに異なる送り先(action="送り先")を設定できないのではないか?と思ったからです。
現状では、以下のようなソースで作成しています。
<form action="$PHP_SELF">
<select name="cat1" onChange="this.form.submit()">
<option></option>......(←DBのデータをPHPで処理して作成)
</select>
<select name="cat2" onChange="this.form.submit()">
<option></option>......
</select>
<select name="cat3" onChange="this.form.submit()">
<option></option>......
</select>
</form>
<form action="entry.php">
<input type="text" name="namae" />
<input type="text" name="email" />
<input type="submit" value="送信" />
</form>
としています。
一つ目のフォームでsubmitした時に、
if (isset($_POST['cat1'])) $_SESSION['cat1'] = $_POST['cat1'];
としてセッションに格納し、二つ目のフォームをsubmitした時に、(カテゴリーデータをセッションに格納した状態で)entry.phpに渡しています。
これを、一つのフォームにまとめることができるのでしょうか?
参考までに、entry.phpでは、
$_SESSION['cat1']
$_SESSION['cat2']
$_SESSION['cat3']
$_POST['namae']
$_POST['email']
を受け取って処理しています。
No.2
- 回答日時:
>セレクトするたびにsubmitする方法で挑戦しているのですが、
>submitした際、他の入力データが消えてしまいます。
フォームを分けてはいけません。
フォームを分けてしまうと登録ボタンをおしても選んだデータは
サーバー側におくられませんのでなんのために選んだか意味がなくなります。
最終的にentry.phpにデータをながしたいのでしたら、最後の
カテゴリが選ばれた際にフォームのアクションがはいるような
仕組みにしてはどうでしょうか?
カテゴリーを選んだ後、他の項目を入力し、それら全てをentry.phpに送りたいと思っています。
カテゴリーと他の項目は送り先が違うので、フォームを分けるしかないように思います。
カテゴリーデータはセッションに格納して、entry.phpで利用しようと思っています。
No.1
- 回答日時:
カテゴリを絞り込む場合、すべてのデータを最初から取得してしまう
方法と、カテゴリを絞る度に検索してほんとうに絞り込んでいく方法が
あります。
前者であれば、javascriptの連想配列にデータを最初から流し込んでおけば
ちょいちょいとできそうですが、オーバーヘッドが大きいので私なら
やりません。
まっとうにやるなら後者になります。
その場合、セレクトするたびにsubmitしてデータを得る方法と、
ajaxを使う方法があります。
例)
<form>
<select onChange="this.form.submit()">
<option value=1>1
<option value=2>2
</select>
</form>
ちなみにajaxについてはここで解説するには膨大すぎますので、
必要でしたらまずはご自身で学習してください。
この回答への補足
お礼欄に記載したソースのformの部分は、それぞれ
<form name="form1" action="$PHP_SELF" medhot="post">
と記述しております。
4つ目のフォームのみ、POSTされたデータを処理する別のPHPに飛ばしてます。
ありがとうございます。
少し進歩しましたが、新たな問題が発生しました。
セレクトするたびにsubmitする方法で挑戦しているのですが、submitした際、他の入力データが消えてしまいます。
ソースは、以下のように記述しておりますが、最後のフォームのテキストボックスに入力した状態でドロップダウンリストを変更すると、テキストボックスの値が消えてしまいます。
「入力する前に選択してください」のようなコメントをつけて回避するしかないのでしょうか?
<form name="form1">
<select onChange="form.form1.submit()">
<option value="1">1
・・・
</select>
</form>
<form name="form2">
・・・
</form>
<form name="form3">
・・・
</form>
<form name="4" action="entry.php" method="post">
<input type="text" name="comment">
<input type="submit" value="登録">
</form>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルで値ではなく関数を参照する方法 6 2023/03/19 00:50
- Excel(エクセル) Excel ドロップダウンリスト(入力規則)に関してです データの入力規則で元データ79000行のド 3 2023/07/17 10:06
- MySQL [1000地域 × 10カテゴリー = 1万件のテーブル]!グループ化? 1 2023/06/14 23:56
- HTML・CSS WEBサイトの構築。表示データとWEBデザインを分離する考え方を専門用語・業界用語では何と言うか? 8 2022/09/27 09:16
- Visual Basic(VBA) VBA ドロップダウンリストを残して値のみクリア 2 2022/10/27 05:42
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
- Chrome(クローム) 入力フォームの履歴を消したい 2 2023/06/29 13:02
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- Visual Basic(VBA) Excel(VBA) 特定の条件に該当する行の値、書式を同じセルにコピ&ペーストしたいです 1 2022/05/21 18:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
GASでチェックボックスを一括of...
-
スマホ上で、左右スワイプで次...
-
Cookieに保存されない
-
初心者です。gulpでコンパイル...
-
Adobe acrobat proでフォームを...
-
画面遷移を行わずに同一ページ...
-
変数宣言と初期値代入の場所に...
-
switch文のswitch(n)の部分を複...
-
jsでは、'で区切った部分を改行...
-
タグを教えてください。
-
ラジオボタンを複数選択したと...
-
jsで質問です。 formをsubmitし...
-
2025年相性がいい人のサイトの...
-
CookieをWebStoeageに変える
-
Outlookのアカウントがあるとメ...
-
jqueryのselect2で検索欄の文字...
-
<tr>指定した表の行要素をボ...
-
食材の期限を管理するためにGAS...
-
ビデオのJSについて
-
鍵盤アプリで、スマホの画面に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スマホ上で、左右スワイプで次...
-
タグを教えてください。
-
jqueryのselect2で検索欄の文字...
-
jsonテキストデータの並び替え...
-
初心者です。gulpでコンパイル...
-
ラジオボタンを複数選択したと...
-
階層別の組織図の自動作成について
-
jQueryで同じクラス名のものを...
-
二次元配列を使って順位をだす...
-
読み込んだQRコードをフォーム...
-
画面遷移を行わずに同一ページ...
-
セレクトを全て選択されていな...
-
【Google Apps Script】「ライ...
-
Adobe acrobat proでフォームを...
-
二次元配列の全要素の全要素を...
-
【GAS】WEBアプリでハイパーリ...
-
GASでGoogleフォームの自動返信...
-
フォームが空欄の時にフォーム...
-
セレクトボックスで配列を呼び...
-
イラストレーター、縦中横のシ...
おすすめ情報