ApacheとMySQLとPHPの組み合わせで検索フォームを作ってみよう
All About Japan の
|
の記事を参考に(ってほとんどそのまま・・・)
キーワードを含む記事を探し出して一覧表にするプログラムを書きました。
一ページに10項目ページ送りつきです。
自分が工夫したのはデータの受け渡しをGETではなくてPOSTでやるようにしたことですね。
ちょっと見栄えが悪いですが、URL欄にクエリーの中身が出てきません。
まあスタイルシートでなんとか後からごまかしてください(汗)
まず最初にMySQLにデータベースtestを作ります。
普通はMySQLをインストールすると自動でできてるDBですね。
これはご自分の好きなDBを作ってもかまいませんがその場合は下のプログラムのDB test を
書き直してくださいね。
次にDBの中にtab1というテーブルを作ります。
そして
create table tab1(id int not null auto_increment
primary key, field1 varchar(100) not null, field2
text, field3 text, field4 text);
----------------------------------------
id |
field1 | field2 |
field3 | field4
-----------------------------------------
と項目を作ります。
そしてここに自分の検索したいデータをまず突っ込んでいきます。
MySQLへのデータの入れ方はAll About
Japan の記事を読んでください。
そして、Apacheで指定したフォルダに下記PHPをアップすると
動くんです。
上の指定だとデータを入れた順番に自動でid が振られます。
下のファイルでは
まずMySQLが
field1とfield2とfield3のなかにフォームで入力した文字が含まれていれば
id
,field1,field2,field3,field4を昇順に抜き出します。
そしてPHPが
HTMLでテーブルを作成して1行1idずつ1ページにつき10idごと吐き出します。
自分もいまやっと使い出したところなので動かない~とかいう質問には満足に答えられません。
ある程度プログラムを読める方につかっていただければと思います。
なお、このサイトの内容によって読者が何らかの不利益を被っても、私は その責任を負いません。
なにとぞよろしくお願いします。
|
******************************************************
kennsaku.php の内容
*******************************************************
<?
//HTML文を出力 HTMLの開始
print("<HTML>¥n");
//HTML文を出力 HEADの開始
print("<HEAD>¥n");
//文字コードをSHIFT_JISと指定
print("<META HTTP-EQUIV=¥"Content-Type¥"
CONTENT=¥"text/html; charset=¥"Shift_JIS¥">¥n");
//HTML文を出力 TITLEの指定
print("<TITLE>検索フォーム
PHP版</TITLE>¥n");
//HTML文を出力 HEADの終了
print("</HEAD>¥n");
//HTML文を出力 BODYの開始
print("<BODY bgcolor=#33ffff
text=#0000ff>¥n");
//HTML文を出力 登録確認
print("<b>キーワード検索</b><br><br>");
//HTML文を出力 FORMの開始
print("<FORM action=kennsakup.php
method=post>");
//HTML文を出力 入力フィールドの説明
print("何をしらべますか?<br><br>");
//HTML文を出力 入力フィールドの指定
print("<INPUT type=text name=inpnum size=8
maxlengh=8><br><br>");
//HTML文を出力 確認ボタン
print("<INPUT type=submit value=確認>");
//HTML文を出力 取消ボタン
print("<INPUT type=reset
value=取消><br>");
//HTML文を出力 FORMの終了
print("</FORM>");
//HTML文を出力 BODYの終了
print("</BODY>¥n");
//HTML文を出力 HTMLの終了
print("</HTML>¥n");
?>
********************************************************
kennsakup.php の内容
********************************************************
<?
//頁内に表示する行数
$maxline = 10;
print("<HTML><HEAD><META HTTP-EQUIV=¥"Content-Type¥"
CONTENT=¥"text/html;
charset=¥"Shift_JIS¥"><TITLE>検索結果</TITLE></HEAD>¥n");
print("<BODY bgcolor=#33ffff text=0000ff>¥n");
//kennsaku.phpから入力フォーマットに入力されたデータをpostで渡されるので
//$HTTP_POST_VARSによりフィールド
inpnum の内容を取り出し $keyに格納
//$HTTP_POST_VARSによりフィールド page の内容を取り出し
$pageに格納
$key = $HTTP_POST_VARS["inpnum"];
$page=
$HTTP_POST_VARS["page"];
//DBへ接続開始 サーバー名--localhost(またはIPアドレス) ユーザー名--root パスワード--root
$dbHandle
= mysql_connect("localhost","user","password");
//DBの接続に失敗した場合はエラー表示をおこない処理中断
if ($dbHandle == False) {
print
("can not connect db¥n");
exit;
}
/頁数がセットされていない場合は頁数に1をセット
if ($page < 1) {
$page =
1;
}
//開始行を算出
$startline = ($page - 1) * $maxline;
//終了行を算出
$endline = $page * $maxline -1;
//db名 test
$db = "test";
//SQL文 tab1表からfield1からfield3列の中に$keyを含む語句があれば昇順(order by )で抜き出す
$sql
= "select * from tab1 where (field1 like '%$key%' or field2 like '%$key%' or
field3 like '%$key%') order by id";
//SQL文を実行する
$rs= mysql_db_query($db,$sql);
//列数を取得する
$num = mysql_num_fields($rs);
//取得した行数から最終頁を算出
//ceil(数値)は小数点以下を切り上げる関数
$maxpage =
ceil(mysql_num_rows($rs) / $maxline);
//HTML文を出力 テーブルの開始を指定
print("<table border=1>");
//現在の頁/最終頁を表示
print("<caption valign='top' align='right'>Page
".$page."/".$maxpage."</caption>");
//mysql_num_fields 関数を使用し列数を取得する
$fields = mysql_num_fields($rs);
//mysql_num_rows 関数を使用し行数を取得する
$rows = mysql_num_rows($rs);
//入力されたnumberの行があった場合はデータを出力する
if ($rows > 0) {
//HTML文を出力 テーブルの開始を指定
print("<TABLE border=1>");
//test表の列数と同じ回数を繰り返す
for ($i=0;$i<$fields;$i++){
//HTML文を出力 列名を
<td>で囲んで太字で出力
print("<td><b>".mysql_field_name($rs,$i)."</b></td>");
}
//mysql_data_seekによりtest表内の指定した行に移動する
mysql_data_seek($rs,$startline);
//$iに$startlineを代入
$i=$startline;
//最終行でなく かつ $i<=$endlineの条件の間
//test表から行を取り出す
while($row=mysql_fetch_array($rs)
and $i<=$endline){
//HTML文を出力 表の行の開始<tr>
を出力
print("<tr>");
//test表の列数と同じ回数を繰り返す
for($j=0;$j<$fields;$j++){
//HTML文を出力 列の内容を
<td>で囲んで出力
print("<td>".$row[$j]."</td>");
}
//HTML文を出力 表の改行</tr>
を出力
print("</tr>");
//$iに1を加算
$i = $i + 1;
}
}
//入力されたnumberの行が存在しなかった場合はエラーメッセージを出力する
else
{
print(" [" .$key . "]
のデータは登録されていません<br>");
}
//HTML文を出力 テーブルの終了を指定
print("</TABLE>");
//HTML文を出力 テーブルの開始を指定
print("<table><tr>");
//HTML文を出力 caption
を出力
print("<caption align='bottom'>");
//現在表示している頁が1ページより後の頁の場合は前の頁のリンクを作成
if ($page > 1)
{
$i = $page -
1;
//HTML文を出力 .$pageに指定された頁数をセットしてGETで渡すリンクを作成
print("<td>");
print("<FORM action='$PHP_SELF'
method=post>");
print("<INPUT type=hidden name=inpnum value=
".$key.">");
print("<INPUT type=hidden name=page value=
".$i.">");
print("<INPUT type=submit
value=前項>");
print("</FORM>");
print("</td>");
}
//現在表示している頁が1ページではなく最終頁ではない場合は前頁と次頁を
//区切る「・」を出力
if ($page <> 1
and $page <> $maxpage)
{
print("<td>");
print("・");
print("</td>");
}
//現在表示している頁が最終頁より前の頁の場合は前の頁のリンクを作成
if ($page < $maxpage)
{
$i = $page +
1;
//HTML文を出力 .$pageに指定された頁数をセットしてGETで渡すリンクを作成
print("<td>");
print("<FORM action='$PHP_SELF'
method=post>");
print("<INPUT type=hidden name=inpnum value=
".$key.">");
print("<INPUT type=hidden name=page value=
".$i.">");
print("<INPUT type=submit
value=次項>");
print("</FORM>");
print("</td>");
}
//HTML文を出力 テーブルの終了を指定
print("</tr></TABLE>");
///HTML文を出力 改行
print("<br>");
print("<table><tr>");
//出力可能な頁数数分繰り返す
for
($i=1;$i<=$maxpage;$i++) {
//現在の頁の時は [ ]で囲む
if
($i==$page){
print("<td>");
print("[".$i."]");
print("</td>");
} else
{
//HTML文を出力 .$pageに指定された頁数をGETで渡すリンクを作成
print("<td>");
print("<FORM action='$PHP_SELF'
method=post>");
print("<INPUT type=hidden name=inpnum value=
".$key.">");
print("<INPUT type=hidden name=page value=
".$i.">");
print("<INPUT type=submit
value=".$i.">");
print("</FORM>");
print("</td>");
}
//最終頁以外では頁間を区切る「・」を出力
if ($i <>
$maxpage)
{
print("<td>");
print("・");
print("</td>");
}
if($i%10==0){
print("</tr><tr>");
}
}
print("</tr></table>");
//HTML文を出力 /caption
を出力
print("</caption>");
print("</TABLE>");
//結果レコードをメモリから開放
mysql_free_result($rs);
//DBへの接続を切断
mysql_close($dbHandle);
//HTML文を出力 javascriptを使用して直前のページに戻るリンク
print ("<br><a
href='kennsaku.php'>戻る</a><br>");
//HTML文を出力 BODYの終了
print("</BODY>¥n");
//HTML文を出力 HTMLの終了
print("</HTML>¥n");
?>
************************************************************