- ベストアンサー
リストボックスで選択してWHERE句に入れるには?
こんにちは、PHPはじめて間もないので簡単そうなことで躓いています。 自フォームに設置したリストボックスで <select name="w_id"> <option value="id">ゼッケン順</option> <option value="rank">順位昇順</option> </select></td> w_idの内容を選択して //データを取得する $w_id = $_GET['w_id']; $w_id = htmlspecialchars($w_id,ENT_QUOTES,'UTF-8'); $sql = "SELECT id, hinmei FROM syouhin ORDER BY ".$w_id; として自フォームの表示を変更しようとしていますが w_idに値が入ってこなくて悩んでいます。 どのようにするものなのかご教授ください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
あー、デフォルトから変更しないと動かないですよね javascriptに詳しい方なら良い対応知ってるかもですよ 送信した後のページにも同じフォームがあって、前ページで 選択した方にselectedを付けたいだけなら方法はありますが 同じ値でまた送信したい時に動かないので、微妙ですよね javascriptの板で、同じ動作をonChange以外で出来ないかどうか 聞いてみるのもいいかもしれませんよー 選択した値にselecedを付ける方法↓ $w_id = $_REQUEST[w_id]; $select[$w_id] = "selected"; form部分 <option value="id" $select[id]>ゼッケン順</option> という感じにすると選んだほうにselectedがつきます ※かなり単純化しているので、状況に応じて条件分岐とかも 必要かもしれません 参考になれば幸いです
その他の回答 (2)
- koke29
- ベストアンサー率58% (114/196)
リストを変更した時に送信したいなら <select name="w_id">に をつければいけますよ <select name="w_id" onChange=submit();> 値を受け取る時はmethod=post ならPOSTでOKです
補足
ありがとうございます! ご指摘いただいたとおり <select name="w_id" onChange=submit();> で送信できるようになりました。 ですが、 <option value="id">ゼッケン順</option> <option value="rank">順位昇順</option> では、リストボックス上では選択できても <option value="id">ゼッケン順</option>の方を選んだ場合 送信されず <option value="rank">順位昇順</option>の方を選んだ場合 送信される という結果のため <option value="rank" selected>--------</option> <option value="id">ゼッケン順</option> <option value="rank">順位昇順</option> というようにしてみましたが 動作はするものの リストボックスの表示が常に--------に戻ってしまい この点が改善できればと思っているのですが 何か方法はありますでしょうか? 重ね重ねで申し訳ありませんが よろしくお願いいたします。
うーん。これだけだとなんともいえないが、例えばごく初歩的なところで、GETでなくPOSTで送信していたとか?($_GETでなく$_POSTにすると動くとか?)
お礼
的確なご指摘ありがとうございました。 WHEREではなくORDER BYでした。お恥ずかしい限りです。
補足
はい、POSTで送信ボタンをつけると更新できるのですが... //データを取得する $w_id = $_POST['w_id']; $w_id = htmlspecialchars($w_id,ENT_QUOTES,'UTF-8'); $sql = "SELECT id, hinmei FROM syouhin ORDER BY ".$w_id; <form action="all_rank.php" method="post"> <select name="w_id"> <option value="id">ゼッケン順</option> <option value="rank">順位昇順</option> </select> <input type="hidden" name="" value="'.$w_id.'"> <input type="submit" name="" value="送信"> </form> 送信するアクションをしないで表示を更新することはできないのでしょうか?
お礼
解りやすく説明していただきありがとうございました。 もっと勉強が必要なようですね。