プロが教える店舗&オフィスのセキュリティ対策術

PHP4
MySQL4
経験値1ヶ月くらいのビギナーです。

PHP+MySQLで会員DBを構築し、やっと検索をかけて思惑の通り一覧が表示されるようになり感激していたのもつかの間・・・

この1週間『並び替え』という新たな壁にぶつかり身もだえしております。

ベテランの皆さま!どうか!どうか、お知恵を!救いの手をお貸しくださいませ!!

【 現状です 】

■会員テーブル:member
■id:int
■name:vachar
■age:int
■addr:varchar

レコード数200くらい

【 したいこと 】

例えば年齢を20~30で検索します。

50くらいのレコードが絞られて表示されます。

このときはidの順番に一旦並んでいます。

それから年齢の若い順、高齢の順に並び替えたいのですが・・・どうしたいいでしょうか?

【 やってみたこと 】

プルダウンを設置して、javascriptで選択した時点でURLを移動させて(違うファイルではなくそのファイルに)その際、GETで数値を持っていってもらって
おんなじファイル(一覧表示のPHPファイル)にリンクさせて、そのGET値を受け取って、反映して・・・と文章にすると良くわからんことを思いついてして
見ました。

全てのレコードが表示されているときはうまく行きました・・・が、検索した結果の状態で並び替えると、検索した結果の50件の中での並び替えが
できず、並び替えを実行すると全てのレコードが表示されてしまいます。

検索して、「絞り込まれた状態(ここでは50件のこと)」でそのレコードたちだけを並び替えさせたいのです。

【 こんなコードなんです 】

一覧表示のPHPファイル:ichiran.php

<?
$db = mysql_connect("localhost","××××","××××");

mysql_select_db("member");
$query = "SET NAMES utf8";

// 検索ページから年齢の下限を取得

$low_age= $_POST["low_age"];

// 検索ページから年齢の上限を取得

$high_age= $_POST["high_age"];

// 並び替えの時、

$order_age= $_GET["order_age"];



// 取得した検索結果からSQL文に変換(下限)

if($low_age != ""){

$where_low_age = "age >= '$low_age'";
}
else {

$where_low_age = "";
}

// 取得した検索結果からSQL文に変換(上限)

if($high_age != ""){

$where_high_age = "age <= '$high_age'";
}
else {

$where_high_age = "";


// 取得した並び替えGETをSQL文に変換

switch ($order_age){

case 1:
$sql_order = " order by age ";
break;
case 2:
$sql_order = " order by age desc ;
break;
default:
$sql_order = " order by id ";
}


// SQL文に変換

$query = "select * from member where ".$where_low_age." and ".$where_high_age.$sql_order;

$result = mysql_query($query);

</html>
<body>
<head>
<!-- 並び替え -->
<script type="text/javascript">
function change(myURI){
if(myURI !="default"){
window.document.location.href=myURI;
}
}
</script>
<!-- 並び替え -->
</head>

<!-- 一覧表示 -->

while( $row = mysql_fetch_array($result) ) {

echo $row["age"]."<br>";

}

<!-- 並び替え実行部分 -->

<form name="sampleForm1" id="sampleForm1">
<select name="selectMenu1" id="selectMenu1"
onchange="change(this.form.selectMenu1.value);">
<option value="default" selected="selected">年齢並び替え</option>
<option value="ichiran.php?order_age=1">若い順</option>
<option value="ichiran.php?order_age=2">高齢の順</option>
</select>
</form>


</body>
</html>

<?
mysql_close($db);
?>

分かりにくい説明ですが、どうぞどうぞ皆さまよろしくお願い致します!!

A 回答 (2件)

値の受け渡しのもんだいじゃないでしょうか



// 検索ページから年齢の下限を取得
$low_age= $_POST["low_age"];

// 検索ページから年齢の上限を取得
$high_age= $_POST["high_age"];

// 並び替えの時、
$order_age= $_GET["order_age"];

ここで$_POSTと$_GETが混在しているので、どちらかの値かしかとらないと思います。
どちらかに統一させるか、どちらでも値をとるように変更すればよいでしょう。
    • good
    • 0
この回答へのお礼

ありがとうございます!

皆さまのお陰でうまく行きました!!

お礼日時:2008/04/26 18:09

べつのページからpostデータを渡してますね?


これを自分自信のページに再読み込みするときに値がわたってません。
やるならこんな感じでhidden渡しするといいでしょう。
javascriptについてももう少し理解を深めた方がよいでしょう。

<?
$low_age= $_REQUEST["low_age"];
$high_age= $_REQUEST["high_age"];
$order_age= $_REQUEST["order_age"];

$selected["order_age"][$order_age]=" selected";

//$low_ageと$high_ageにはインジェクション処理が必要

if($low_age != "") $where_low_age = "AND age >= '$low_age'";
if($high_age != "") $where_high_age = "AND age <= '$high_age'";

switch ($order_age){
case 1:
$sql_order = " order by age ";
break;
case 2:
$sql_order = " order by age desc" ;
break;
}

$query = "select * from member where 1".$where_low_age.$where_high_age.$sql_order;

print<<<eof
テスト:{$query}<br>

<form method="post" action="{$_SERVER['PHP_SELF']}">
<input type="hidden" name="low_age" value="{$low_age}">
<input type="hidden" name="high_age" value="{$high_age}">
<select name="order_age" onchange="this.form.submit();">
<option value="default" selected="selected">年齢並び替え</option>
<option value="1"{$selected["order_age"][1]}>若い順</option>
<option value="2"{$selected["order_age"][2]}>高齢の順</option>
</select>
</form>
eof;

?>
    • good
    • 0
この回答へのお礼

なるほど・・・PHPでできるのですね・・・
あ、onchangeの部分はjavascriptですね・・・

ありがとうございます!!

とても参考になりました。

うまく作動しました!!

お礼日時:2008/04/26 18:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!