• ベストアンサー

リスト選択後他の項目がクリアされる。

phpで検索条件を設定する画面を作っています。 今ある条件項目Aがリスト選択制で何か選ぶとJavaScriptが動いて別の条件項目Bの内容が表示されるようになっています。 このJavaScriptが動作したために、それまでに入力されていたそれ以外の条件項目(例えばC~F)のデータが一旦クリアされてしまいます。これをクリアしないようにするためにどうしたらよろしいでしょうか?テキストタイプも同じリストタイプもクリアされてしまいました。

質問者が選んだベストアンサー

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.7

こんにちは。 ・配列のデータ <input type="hidden" name="bbb[]" value = "<?php print $_POST['bbb']; ?>" > 上記のように書いた場合に出力されるHTMLを見てみてください。 <input type="hidden" name="bbb[]" value="Array" /> となっていると思います。 これでは送信されるのは"Array"という情報です。 name[]とすることでPHP側で配列として扱ってくれているだけであってhiddenに格納してもう一度同じデータを送信するなら同じように展開してあげる必要があります。 <?php foreach ( $_POST['type'] as $value ) { ?> <input type="hidden" name="type[]" value="<?= $value ?>" /> <?php } ?> こうすることで送信されてきた分のhidden要素が出来ますので、またPHP側でそのデータを配列として受け取ることが出来ます。

o2shgi3eatge
質問者

お礼

こんにちは。ご回答ありがとうございます。 早速試してみましたが、 <?php foreach ( $_POST['type'] as $value ) { ?> <input type="hidden" name="type[]" value="<?= $value ?>" /> <?php} ?> の{}は違うようだったので <?php foreach ( $_POST['type'] as $value ): ?> <input type="hidden" name="type[]" value="<?= $value ?>" /> <?php endforeach; ?> で行けました。その後動きが可笑しかったですが自力で解決できました。 とりあえず今回で終わりにしたいと思います。 本当多大なる時間と御手間を取らせましてありがとうございました。 今回の質問については別途資料にして残そうと思います。 また、何かphpで分からないことが出てきたらお知恵を拝借できれば幸いです。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (6)

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.6

こんにちは。 すみません、考慮漏れでした。 確かに選択されたものしか入ってきませんので以下のようにすればOKです。 名前も一緒でかまいません。 $type = isset ( $_POST['type'] ) ? $_POST['type'] : array(); <input type="checkbox" name="type[]" value="A"<?= in_array('A',$type) ? ' checked="checked"' : '' ?> />A<br /> <input type="checkbox" name="type[]" value="B"<?= in_array('B',$type) ? ' checked="checked"' : '' ?> />B<br /> <input type="checkbox" name="type[]" value="C"<?= in_array('C',$type) ? ' checked="checked"' : '' ?> />C<br /> <input type="checkbox" name="type[]" value="D"<?= in_array('D',$type) ? ' checked="checked"' : '' ?> />D<br /> <input type="submit" value="送信" /> 要はtypeという配列の中に同じvalueがあるか調べればよいのでin_array()を使います。 in_array()については調べてみてください。

o2shgi3eatge
質問者

お礼

こんばんは。毎度回答頂きありがとうございます。 教えて頂いたin_array()を使って試してみたら上手く動く事ができました。ありがとうございます。 一方、それに関係することなのですがもしお手間でなければ相談させて頂きたいのですが、 そのcheckboxをformを使った別のphpファイルに渡した後受けた側ではそのデータを使って検索処理を行って検索結果を表示させています。 先頭ページはいいのですが次のページや表示順を変えたとき、結局自分自身に対してそれらのデータを再度渡すことになるのですがこれが普通のデータなら上手く渡せられるのですが配列データが上手く渡せません。 渡す際にhiddenを使って以下のように設定しています。 ・普通のデータ <input type="hidden" name="aaa" value = "<?php print $aaa;>" > ・配列のデータ <input type="hidden" name="bbb[]" value = "<?php print $_POST['bbb']; ?>" > 自分自身にデータをもう一度渡して同じように検索処理が動くようにしたいのですが何か言い渡し方があるものでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.5

こんにちは。 ループで処理するかは作り方次第です。 $type = isset ( $_POST['type[]'] ) ? $_POST['type[]'] : NULL; <input type="checkbox" name="type[]" value="A">と定義した場合、PHP側で配列になりますが下のような取り方になります。 $_POST['type'][0] なので <input type="checkbox" name="type[]" value="A"<?= $_POST['type'][0] === 'A' ? ' checked="checked"' : '' ?> /> <input type="checkbox" name="type[]" value="B"<?= $_POST['type'][1] === 'B' ? ' checked="checked"' : '' ?> /> とすれば実現出来ます。

o2shgi3eatge
質問者

お礼

毎度回答頂き本当に感謝します。 書いて下さった書き方で試した見た所、チェックは全クリアされることがなくなりました。 ただ、間間にチェックを入れてリスト変化すると中途半端にクリアされてしまいます。4つある項目の先頭以外の3つをチェック入れると全クリアされるので 原因は$_POST['type'][0]がチェックされているものだけを順番に格納されているため、比較ではじかれたと思います。 実際、これらのデータを受け取ってSQL文を作るために使いやすいようにとnameが共通の配列を使いましたが、今回の動きを見るとそれぞれに別のnameを指定しないといけないのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.4

こんにちは。 checkboxも同様です。 値を取得して、表示する際に比較しchecked="checked"を出力してあげれば初期状態でチェックされたものになります。

o2shgi3eatge
質問者

お礼

再び回答していただきありがとうございます。 checkboxも同様ということで試してみました。 ただ、checkboxについては一つ問題があってselectみたいに一つだけではんくいくつかあるのでnameがaaa[]といった配列になるので、 <?= $v3 === 'A' ? ' checked="checked"' : '' ?> といった書き方では上手く行きません。この書き方をループ処理で調べる必要があると思ったのですが、如何でしょうか? 上記書き方のループ版となるとどのような書き方になるのでしょうか? ちなみに現在下記のような書き方になっていますがクリアされます。 $type = isset ( $_POST['type[]'] ) ? $_POST['type[]'] : NULL; <input type="checkbox" name="type[]" value="A" <?= $type === 'A' ? ' checked="checked"' : '' ?>>エー <input type="checkbox" name="type[]" value="B" <?= $type === 'B' ? ' checked="checked"' : '' ?>>ビー <input type="checkbox" name="type[]" value="C" <?= $type === 'C' ? ' checked="checked"' : '' ?>>シー

全文を見る
すると、全ての回答が全文表示されます。
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.3

こんにちは。 >参考にtextタイプで書いてくださいましたがこれがselect/optionやcheckboxの場合はどうなるのでしょうか? これは例のソースを見ればわかると思いますが、selectでの初期状態を設定するにはselected="selected"をoptionに付けてあげます。 ==== php部分 $v3 = isset ( $_POST['v3'] ) ? $_POST['v3'] : NULL; ==== html部分 <select name="v3"> <option value="A"<?= $v3 === 'A' ? ' selected="selected"' : '' ?>>A</option> <option value="B"<?= $v3 === 'B' ? ' selected="selected"' : '' ?>>B</option> <option value="C"<?= $v3 === 'C' ? ' selected="selected"' : '' ?>>C</option> </select> 上記のようにすることによって選択されていたv3の値が取得できます。 取得した値とそのoptionの値を比較して同じだった場合はselected="selected"を表示しています。

o2shgi3eatge
質問者

お礼

回答ありがとうございます。 ちょっと試してみます。これはcheckboxも同様でしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.2

こんにちは。 多分私が作ったスクリプトを参考にしていると思いますが、あのソースだと保持できているのはリストAの選択値のみです。 他にフォーム部品を追加するのであればリロード毎に入力されている内容をセットしてあげないといけません。 (何故かというと選択毎にsubmitしている為です) $v1 = isset ( $_POST['v1'] ) ? $_POST['v1'] : ""; $v2 = isset ( $_POST['v2'] ) ? $_POST['v2'] : ""; <input type="text" name="v1" value="<?= $v1 ?>" /> <input type="text" name="v2" value="<?= $v2 ?>" />

o2shgi3eatge
質問者

お礼

回答ありがとうございます。 その項目ごとに随時内容をセットしないといけないんですね。 参考にtextタイプで書いてくださいましたがこれがselect/optionやcheckboxの場合はどうなるのでしょうか?いずれもデータで送信したい値をvalueに入れているためvalueが使えないと思うのですが。

全文を見る
すると、全ての回答が全文表示されます。
  • singlecat
  • ベストアンサー率33% (139/418)
回答No.1

ソースが無いので何も指摘ができません... そのJavaScriptがバグっているので、それを直してくださいとしか言いようがありません。

o2shgi3eatge
質問者

補足

すいません。 私の勝手な予想ですが、バグっているというよりかは追加で何か記載すればいけるのかな?と思うのですが。。。(>_<) とりあえずリスト選択時に動作するjavascript のソースを下記に記載します。 <script type="text/javascript"> function setDistrict ( obj ) { document.getElementById('id_district').selectedIndex = 0; document.getElementById('dsearch').submit(); } function setArea ( obj ) { document.getElementById('id_area').selectedIndex = 0; document.getElementById('dsearch').submit(); } </script>

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • リストで選んだものでそれぞれの項目を表示したい

    検索条件を設定するページを作っています。 そのなかで、リストからジャンルを選択し、その選ばれたジャンル毎に追加で条件項目を表示させたいのです。 たとえばすべての家電商品に対して値段と名前で条件設定できるところに ジャンルで携帯を選ぶと追加項目として携帯会社が表示されてドコモ・ソフトバンク・au などの会社を選択できるとか。 phpの<select>の<option>でonchangeでJavaScriptを呼び出して function itemChange(parts){ xxx = parts.options[parts.selectedIndex].value; } でxxxに選択された項目のvalue値が入って、現在はそのデータ毎に 別の変数$yyyに入れて<html>の<body>内で<?php if($yyy == 1): ?> で表示・非表示を設定していますが上手く行きません。 何かよい方法がないものでしょうか? また、今回の検索条件にはジャンル以外にも別のリストがありそれを選択すると その詳細項目(大)のリストが、詳細項目(大)のリストからさらに何か選択すると さらに詳細項目(小)のリストが表示されるものも作りたいと思いますが実現可能でしょうか?

  • 選択項目をリストに反映させる方法

    リンクリストのようなCGIを作ろうと思っています。 ベースになるCGIは配布されているものをダウンロードしたのですが、それにアンケートのようなものを付けることはできないでしょうか? すでにある項目は、「名前」「サイト名」「サイトアドレス」をテキストボックスで入力できるようになっています。 それに、例えば「趣味」という項目を足して、「読書・音楽鑑賞・映画鑑賞・その他」から選択できるようにし、選んだものがリストに反映されるようにしたいのです。 「名前」「サイトアドレス」などを記入する部分には「<input type="text" size=50 name="name" value="$name">」ということが書かれているので、その選択項目にも同じように「$」をつけなければいけないと思うのですが、どこにつけたらいいのかわかりません。 よい方法、または参考になるページがありましたら、教えていただけますでしょうか? よろしくお願いします。

    • ベストアンサー
    • CGI
  • 選択したリスト項目のラベル名を取り出すには?

    選択したリスト項目のラベル名を取り出すには? どなた様かご存知でしたらお助けください。 環境はWinXP,Flash8(AS2.0)です。 作りたいこと:選択したリスト項目のラベル名が取り出せること 作成した状況: 1)リスト.asファイルに配列でリストを作成、それをFlaファイルのリストボックス(listboxA)に表示。(リスト項目が1,000個以上あるのでList内のパラメータに記載はせず、配列を記載した別ファイルで対応することにしました。)  Shopping_array[0] = {label:"ばなな", data:"1"};   …  Shopping_array[13] = {label:"りんご", data:"14"}; のように表記し、  リスト表示までは問題なし。 2)Adobeのページより下記をコピペ、ダイナミックテキスト(statusMessage)を用意して表示確認。    import mx.controls.Alert;  import mx.data.binding.Binding;  import flash.filters.BevelFilter;  myListBoxListener = new Object ();  myListBoxListener.change = function (eventObj)   { var eventSource:Array = eventObj.target; var theSelectedItem = eventSource.selectedItem; var theSelectedItemLabel = theSelectedItem.label; msg = theSelectedItemLabel; statusMessage.text = msg;   };  listboxA.addEventListener ("change", myListBoxListener); 困っていること: 上記のスクリプトで動作はしたのですが、選択1回分しかテキストボックスに表示できません。 選択したものを確定させるまでは、何回でも選択できるようにしたいと思っております。 お願い: 選択した項目により、次の作業を同じようにさせたいと思っており、ここで躓いて大変困っております。 つたない文面ですが、どなた様か対処方法をご存じでしたらご教示下さい、 ※AS3.0の時代に古いものを使っております。すみません。

    • ベストアンサー
    • Flash
  • リストからの選択

    エクセルにて文字を入れる際にデータの入力規制を用いてリストから選択するようにしているのですが、そのリストを可変的にしたいのですが可能でしょうか? A1のセル: A,B,C から選択 A2のセル: A1が"A"の場合D,E,F       A1が"B"の場合D,G,H       A1が"C"の場合E,I,J の選択させたいです。

  • selectで選択項目に伴った2個目の項目の変更

    はじめて質問させていただきます。 よろしくおねがいします。 ・住所などの入力画面で、都道府県を選択すると、選択した都道府県に対応した市区町村の項目を表示させたいです。 ・PHPは使えないので、Javascriptのみで制作しなければなりません。 ・出来る限りすっきりとしたソースを希望しております。 おわかりの方がいらっしゃいましたら、教えて下さい。 よろしくおねがいします!

  • リストボックスから選択できないのはどうして!?

    実はJAVASCRIPTでリストボックス(select1)から会社名を選択するとその下のテキストボックス(link)に そのURLがでるものを作っていたのですが、なぜかリストボックスが選択できない状態になってしまいます。 下のがそのコードなのですが、どなたかわかるかたいらっしゃいませんか? どうぞよろしくお願いいたします。 <SCRIPT type="text/javascript"> <!-- function aaa() { var a; if((f.select1.value) ="A社") {url = "http://www.a***.co.jp" }; else if((f.select1.value) ="B社") {url =" http://www.b***.co.jp" }; else if((f.select1.value) ="C社") {url = "http://www.c***.co.jp" }; else{url = "URLはありません"}; (f.link.value) = url; return } //--> </script> <select onchange = "aaa()" name="select1"> <option value="A社" selected>A社</option> <option value="B社">B社</option> <option value="C社">C社</option>      <option value="D社">D社</option> </select> <input type="text" name="link">

  • リストボックスの選択項目をさらにクリック

    こんにちは。 C#+.NetFramework3.5で開発しています。 リストボックスを使っているのですが、リストボックスの選択されている項目をさらにクリックした場合を検出したいのです。 イベントは、 Click MouseClick MouseDown を試してみましたが、どれも選択項目が変化したあとに呼び出されるため、目的を達することができません。 選択項目が変化する前に発生するイベントはないのでしょうか? よろしくお願いします。

  • PHPリストボックス DB値取得関連

    PHPにてサイトを作っています 途中プルダウンのリストのデータを取得する際に リスト1を選択するとJavaScriptで同じURLへジャンプし、リスト1の値をPOSTし再表示で リスト1にひもづくデータをDBから読んでリスト2のないようにしています。 さらに同じようにリスト2を選択するとリスト1、リスト2にひもづくデータを金額として表示します。 これを行うことで<form>がJavaScriptに占有されてしまい リスト以外のテキストの実際にポストしたい入力データが<Form>で次ページへ飛ばせなくなりました。 リスト選択のリロード毎に全入力データをPOSTし変数に入れhiddenで別の<form>タグにいれて ましたが、 リスト未選択でリロードしない場合は値が取れず送信した際には値が飛ばせません。 構造イメージは以下です <form action="aaa.php" name="frm" method="post">  DBを読む1 <select name="zzz" onChange="document.forms['frm'].submit()" >     </select> </form> <form action="next.php" method="post">  <input type="hidden" name="aaa" value="<?php echo $aaa; ?>">  <input type="hidden" name="bbb" value="<?php echo $bbb; ?>">  ・・・・・・・ <input type="submit" value="送信"> </form> わかりにくくてすみませんが良い案があれば教えてください。

    • ベストアンサー
    • PHP
  • リストボックスの選択項目をテキストボックスへ

    リストボックス1の選択項目7項目を左列のテキストボックス10個のうち7個に反映するコードがわかりません。どなたかご教授のほどよろしくお願いします。

  • Excel 入力規則のリストで選択した項目のカウントアップ

    こんにちは。Excelでのカウントアップについての質問です。 入力規則でドロップダウンリストを作成しておりそちらで選択した項目の選択回数を別Sheetのセルにカウントアップさせて行きたいのですが、どなたか良い方法がございましたら御教授願います。 リストがあるセルはSheet1のC16で毎回リストの項目を選択して行きます。 そしてリストは名前の定義で作成しておりSheet2のD4:D23にそれぞれのリストで選択する項目が有ります。 Sheet2!E4:E23のセルにSheet1!C16で選択したリストの項目をどの項目を何回選択したかカウントして行きたいと考えております。 リストの内容を引っ張って来るのはCOUNTIF関数で出来たのですが、当然違う項目を選択するとカウントが0に戻ってしまいます。 ≪現状≫ 項目Aを選択⇒Aのカウントが1になる 項目Bを選択⇒Bのカウントが1になる代わりにAのカウントが0になる ≪理想の形≫ 項目Aを選択⇒Aのカウントが1になる 項目Bを選択⇒Bのカウントが1になりAのカウントも1のまま 以上、宜しくお願い申し上げます。

このQ&Aのポイント
  • Wi-Fiルータを新しいものに買い替え、ブリッジモードで使用しています。プリンタ本体、PC、スマホそれぞれの無線LAN接続は完了しているのですが、PCのBrother iPrint&Scan上ではプリンタがオフライン、スマホアプリのMobile Connectでは製品の登録ができません。何に問題があるのでしょうか?何度接続し直しても上手くいかないので、今はプリンタ有線LANで接続し、使用できています。
  • PCとスマホの無線LAN接続は完了しているが、PCのBrother iPrint&Scanではプリンタがオフライン状態、スマホアプリのMobile Connectでは製品の登録ができない問題が発生している。何度接続し直しても解決しないため、現在はプリンタを有線LANで接続して使用している。
  • 新しいWi-Fiルータを導入し、ブリッジモードで使用しているが、プリンタがオフラインであるとPCのBrother iPrint&Scan上で表示され、スマホのMobile Connectでは製品の登録ができない問題が発生している。何度も接続し直しても改善されず、現在は有線LAN接続でプリンタを使用している。
回答を見る