検索システムを作る 誤りの指摘やご意見はこちらへ ご意見板
BBS

PHP Top
項目
検索システムを作る ↑項目に戻る
検索システムを作りましょう。,
巷でよく見かける、検索条件を入力して、条件にヒットしたデータが表示されるものです。
以下の内容で、それぞれのファイルを作成してください。

search.mysql(17行)
input.html(52行)
search.php(77行)

データベース名[sample]を作成し、search.mysqlを実行させてください。
例: mysql sample< search.mysql
テーブルは[search]という名前で次のような項目が作成されます。

試してみる

今回はファイルをいくつかに分けています。
上手に分けると、ロジックとデザインの部分を分離することができます。
これにより、ロジックはプログラマが、デザインはデザイナが担当する、というように分業が可能になります。
(実際には完全に分離することは難しいですが。)
データベース名は[bbs]、テーブルも[bbs]という名前で次のような項目で作成してください。

フィールド名 フィールド型 属性
number int(5) PRIMARY KEY, AUTO_INCREMENT
name varchar(255) NOT NULL
address varchar(255)  
gender varchar(255) NOT NULL
skill varchar(255)  

また、search.mysqlはテストデータを10項目作成します。
(テストデータには実在の人物と同姓同名のデータもありますが本人とは全く関係ありませんよ)

■解説--------

とりあえず、実際に動作させてみるとプログラムが何をしているか良くわかるでしょう。
試してみる
search.phpはinput.htmlよりPOSTで受け取ったデータより
検索文字列を生成し,DBに問い合わせます。
そして検索条件に合致したデータを出力します。

$debug = false;

これはデバッグ用のフラグです。
ためしにtrueにしてみてください。

if($debug) print_r($HTTP_POST_VARS);

のようにデバッグ用のコードが埋め込んであります。
上の文は、POSTメソッドにより与えられた変数を全て表示するので結構便利ですよ。

//クエリ生成
$query = "SELECT * FROM search ";


ここからクエリ(検索用の文字列)を生成します。
今回は「名前」「住所」「性別」「スキル」の4つの条件で検索できます。

「名前」は完全一致・・・【検索文字列】と【名前】が完全に一致
「住所」は部分一致・・・【住所】の一部分に【検索文字列】があれば良い
「性別」は完全一致・・・ラジオボタンで選択したアイテムと一致すれば良い
「スキル」は部分一致・・・【スキル】の一部分に【検索文字列】が一つでもあれば良い

という条件で検索しています。
「名前」と「住所」というように複数の条件を指定した場合は全てを満たすデータのみをヒットさせます。
「スキル」のデータに関しては、複数スキルを持つ場合は半角スラッシュ"/"で区切られている
ことになっています。
$debugフラグをtrueにすると、クエリを表示するので、条件をいろいろ変えて
どのようなクエリを生成しているか見てみてましょう。

検索結果の表示
<? while($row = mysql_fetch_assoc($result)): ?>
< tr><td><?=$row[name]?></td><td><?=$row[address]?></td> <td><?=$row[gender]?></td><td><?=$row[skill]?></td></tr>
<? endwhile; ?>

この部分で検索結果をTABLEの行として表示しています。
while():
endwhile;
構文を使ってみました。

-今日の宿題-
○デザインとロジックを分割してみよう
○検索条件を変えたり、検索項目を追加してみよう
○DBに新しいデータを追加する機能を作成してみよう
○PHP Dreamの管理人とコンパ・・いや、なんでもないです

※ご注意とお願い
MySQLのREGEXP関数は日本語対応していないようです
検索文字列によってはうまく検索できない場合があるので注意してください
マルチバイトでの検索ができる方法を知っている方は掲示板等で教えてください。
よろしくお願いします。
(PHPはマルチバイト対応正規表現があるのでそれを使って検索する?
しかしDBから全部データを取り出すのはいかにも無駄ですよね?
みなさんどうしてるんでしょう?)


↑項目に戻る

PHP Top