• 締切済み

PHP セレクトフォームの連動

初めての質問です。よろしくお願いします。 今、同一ページ内で二つのセレクトフォームを連動させてライブ写真の表示をさせようとしているのですが、上手くいきません。 内容は、まず1つ目のセレクトにライブ会場名を表示します。そのセレクトをクリックすると、連動してもう一つのセレクトに写真名のリストが表示されるようにします。 今困っているのは一つ目のセレクトをクリックし、二つ目のセレクトの連動はどうにかできたのですが、二つ目のセレクトをクリックすると一つ目のセレクトが初期状態に戻ってしまいます。 質問がヘタクソなので、ソースとURLを書いておきます。ソースが分かりにくいとは思いますがご了承ください。お分かりになる方は分かりやすく教えてください。よろしくお願いします。 URL http://www.officekuwa.com/soulsurvivores/ontheroad/gallery.php データーベースの内容です。 gallery_title(ライブ会場名が登録されたテーブル) id,title,date,active gallery (写真名が登録されたテーブル) id,cid,title,photos,date,active //一つ目のセレクト // ライブ会場名表示 $gallery_query = "select * from gallery_title where id =".$_POST['setID']."; $gallery_cat_data = mysql_query($gallery_query, $db); $gallery = mysql_fetch_assoc($gallery_cat_data); <FORM method="post" name="setForm" action="/soulsurvivores/ontheroad/gallery.php?ID=<?php echo _hs($gallery['id']); ?>"> <SELECT NAME="setID" CLASS="formPulldown" STYLE="width:175px" onChange="document.setForm.submit()"> <option value=''>Select a Photo Set</option> // 会場名表示 $gallery_query = "select * from gallery_title"; $gallery_cat_data = mysql_query($gallery_query, $db); while($gallery_cat = mysql_fetch_assoc($gallery_cat_data)) { $SELECTED = (($_POST['setID'] == $gallery_cat['id'])?" SELECTED":""); <option value="<?php echo _hs($gallery_cat['id']); ?>"<?php echo _hs($SELECTED);?>><?php echo $gallery_cat['title'];?></OPTION> </SELECT> </TD></FORM> <option value="<?php echo _hs($gallery_cat['id']); ?>"<?php echo _hs($SELECTED);?>><?php echo $gallery_cat['title'];?></OPTION> </SELECT> </TD></FORM> } //二つ目のセレクト // 写真タイトル名表示 if ($_SERVER["REQUEST_METHOD"] == "POST") { $gallery_query = "select * from gallery where cid =".$_POST['setID']."; $gallery_cat_data = mysql_query($gallery_query, $db); $gallery_cat = mysql_fetch_assoc($gallery_cat_data); ?> <FORM method="post" name="phoForm" action="/soulsurvivores/ontheroad/gallery.php?ID=<?php echo _hs($gallery_cat['id']);?>&setID=<?php echo _hs($gallery_cat['cid']);?>"> <SELECT NAME="ID" CLASS="formPulldown" STYLE="width:275;background-color:#FFFFFF" onChange="document.phoForm.submit()"> <option value=''>Select a Photo</option> <?php } } if ($_SERVER["REQUEST_METHOD"] == "POST") { $gallery_query = "select * from gallery where cid =".$_POST['setID']."; $gallery_disp_data = mysql_query($gallery_query, $db); while($gallery_disp = mysql_fetch_assoc($gallery_disp_data)) { $SELECTED = ((!isset($_POST['setID']) Or $_POST['setID'] == "none")?" SELECTED":""); ?> <OPTION VALUE="<?php echo _hs($gallery_disp['cid']);?>" <?php echo _hs($SELECTED); ?>><?php echo $gallery_disp['title'];?></OPTION> <?php } } ?> </SELECT> // 写真の表示 <?php if ($_SERVER["REQUEST_METHOD"]=="POST") { $SELECTED = "SELECTED"; if(!isset($_POST['ID'])) { print ""; } else { // 写真の表示 $gallery_query = "select * from gallery where cid =".$_POST['ID']."; $gallery_cat_data = mysql_query($gallery_query, $db); $gallery_cat = mysql_fetch_assoc($gallery_cat_data); ?> <img src="<?php echo _hs($gallery_cat['photos']); ?>" alt="" hspace="0" vspace="6" border="0"> <?php } } ?>

みんなの回答

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.1

一つ目のselect要素と2つ目のselect要素とが別々のformになっているので、 2回目の送信時には、2つ目の情報しかなくて一つ目のformは初期状態表示するしか有りません。 通常は、2つのselect要素を一つのformに入れて、何回目の送信かを切り分けする情報をhidden要素で持たせます。 例 (sqlからのデータ設定のところは省略) <?php $send = isset($_POST['send']) ? ((int)$_POST['send']+1):1; //  切り分け情報、これで$send>1なら $_SERVER["REQUEST_METHOD"]=="POST" で有ることも解る。 ?> <FORM method="post" name="setForm" action="/soulsurvivores/ontheroad/gallery.php?ID=<?php echo _hs($gallery['id']); ?>"> <INPUT type="hidden" name="send" value="<?php echo $send; ?>"> <SELECT NAME="setID" CLASS="formPulldown" STYLE="width:175px" onChange="document.setForm.submit()"> <option value=''>Select a Photo Set</option> <?php while{ // 略 $SELECTED = ((isset($_POST['setID']) and $_POST['setID'] == $gallery_cat['id'])?" SELECTED":""); // 略 } ?> </SELECT> <SELECT NAME="ID" CLASS="formPulldown" STYLE="width:275;background-color:#FFFFFF" onChange="document.phoForm.submit()"> <option value=''>Select a Photo</option> <?php if( $send == 3 ){ // 3回目(全部決定済みのはず)用の2番目のselect要素の option表示用コード }elseif( $send == 2 ){ // 2回目用の2番目のselect要素の option表示用コード }else{ // 一回目用の2番目のselect要素の option表示用コード // 一回目には2個目のselect要素を表示しないなら、上記の切り分けの中でselect要素の開始タグと終了タグとを出力にする。 } ?> </SELECT> <?php if( $send == 3 ){ // 続けて別のデータを表示したいとき用にhidden要素のデータをリセットするボタンも付けるとよいかも。 } ?> </FORM> <?php if( $send == 3 ){ // 3回目(全部決定済みのはず)用の写真表示用コード }else{ // 一回目と2回目用のデータ未決定中 表示用コード } ?> --- あと、phpの構文と思われるところと、html構文と微妙に入り交じっているのは、<?php ?>のコピーし忘れなだけかしら?

k1977
質問者

お礼

hrm_mmmさん、ありがとうございます!!まだ中々うまくいきませんが、頑張ってみます!また分からない時はこちらで質問させてもらいますので、その時はよろしくお願いします!!

関連するQ&A