【夏休み企画】検索システムつくってみようぜ!③
投稿者: | カテゴリ PHP, Tips | 2009 年 8 月 20 日
キテレツ荘のデザインがリュニューアルされた様ですが皆様いかがお過ごしでしょうか。
さてさて、そろそろ脱力し始めそうな気配がプンプンしているかしこです。
【3、Getによるform内のphp化】
・Getで受信するルーチン
・Getで受信した内容をフォームに反映させる
この2つで参ります。が、えー、恐らくこのシリーズのキーポイント1です。
そのため、ボリュームもヤバイかも。
実際の完成形はこちら⇒「キテ荘的検索ってみよ」
スターターキットはこちら。
まずはGet、Postや書き方などをこちらで予習することをオススメします。
■Getで受信するルーチン
フォームのメゾットをGetとして送信するとURLが「index.php?cat=1」のような形になります。
これを受信するには「$_GET["cat"];」と書いてあげれば受信できます。
ではでは、今回のシステムもcatを受信するので次のようにします。
=========================================
if($_GET["cat"]){
$cat = $_GET["cat"];
}else{
$cat = “” ;
}
=========================================
なにをしているのかといえば『$_GET["cat"]』があれば変数$catに代入。
なければNull(空に)という処理をしています。
今回のシステムではcat、catd、price、new、typeの5つを受信しますが、type以外は上のルーチンで対応可能です。
typeについてはチェックボックスを利用しているので扱いが少し異なります。
=========================================
if($_GET["type"]){
$type = $_GET['type'];
}else{
$type = array(1,2,3,4,5,6);
}
=========================================
$_GETがあれば変数$typeへ、なければ$typeに配列として1,2,3,4,5,6を代入しています。
何故、ここだけ処理が違うのか・・・といいますと、
受信した際のURLが「index.php?type[]=1&type[]=2&type[]=3」というように受信して変数typeに配列として格納しています。
で、チェックボックスが全て空で検索するという矛盾対策のために空で受信した場合は全てにチェックを入れて受信するという処理を行っています。
ま、このあたりの処理はあまり深く追求しなくてもよいと思います。配列の受信はこんなものだ!的でよいでしょう。
■Getで受信した内容をフォームに反映させる
なんのことかといいますと、form内のselectbox等で検索をしますわね。
結果が呼びだされた時にこの処理をしないとイチイチselectbox達が初期状態に戻ります。
そうなると自分が何を検索したのかがわからなくなるという事態が発生します。またその状態で再度検索をすると先の条件がどこかにいってしまいます。これはユーザービリティ云々の前に検索システムとしては致命的な欠陥といってもいいでしょう。
ここからはそうならない処理を行ってみたいと思います。
では、具体的にどうするのか?
要はselectの中身に”checked”をつけてやれればよいのです。
下は新着か否かという項目をいじってみた例です。
=========================================
<select name=”new” style=”width:160px;”>
<option value=”0″
<?
if($new == 0){
print “selected”;
}
?>
>こだわらない</option>
<option value=”1″
<?
if($new == 1){
print “selected”;
}
?>
>新着で探す</option>
</select>
=========================================
この例でいくとGetで$newを取得していれば0か1の値が入っているのでselectの間にphpをねじ込んでいます。で、 もし0(null)なら「こだわらない」に”checked”が、1なら「新着で探す」に”checked”が入るので、めでたく選択項目がキープされるわけです。
他の項目もこれと同じルーチンでOKですがやはりチェックボックスの項目だけは別になります。
=========================================
<input type=”checkbox” id=”type1″ name=”type[]” value=”1″
<?
if($type[0]==1){
print “checked”;
}
?>
/>
<input type=”checkbox” id=”type2″ name=”type[]” value=”2″
<?
if($type[0]==2||$type[1]==2){
print “checked”;
}
?>
/>
<input type=”checkbox” id=”type3″ name=”type[]” value=”3″
<?
if($type[0]==3||$type[1]==3||$type[2]==3){
print “checked”;
}
?>
/>
=========================================
これも理屈は同じで”checked”をつけるかつけないかっていう処理なのですがif文の条件が少し複雑で$typeの配列の何番目に格納されているかが送信時のチェックボックスのチェック数によってことなるので想定される配列の順番だけ条件を用意しておるわけです。
このあたりは少し複雑で、基礎的な知識がないと苦しいです。勉強会があるようなので、解説してもいいかと思っています。
詳しくは今日の完成データを参照してくだることを期待しています。
ということで本日はここまでです。(だいぶ長くなりましたよ・・・)
今日のデータはこちらからダウンロードできます。
さてさて、次回は実際の検索ルーチンが絡んでくる検索結果数の表示にチャンレンジしましょう。
【予定】
・4、条件による検索結果数の表示
・5、条件による検索結果の表示(完成)
関連記事
- これに関係する記事はござーせん



