大変失礼を致しました。参考書のスクリプトをコピー&ペーストしてしまいました。
申し訳ありません。それで、自分なりにやってみました。少々長いですが、私のスクリプトをご覧下さい。
参考書同士のスクリプトを組合せたものなので、メチャクチャだと思います。
少々恥ずかしいですが、よろしくお願いします。(PHPの部分のみ)
それと言い忘れましたが、まだ実際にHPは出してません。ローカル環境で試しながらやってます。
<?php
/* MySQL DB接続情報の設定 DB名/ユーザー名/パスワード */
define("DB_NAME", "データベース名");
define("DB_USER", "root");
define("DB_PASS", "パスワード");
/* リクエストデータの取得 */
$検索項目1 =
htmlspecialchars($_POST["検索項目1 ドロップダウンメニュー"], ENT_QUOTES);
$検索項目2 =
htmlspecialchars($_POST["検索項目2 テキストボックス"], ENT_QUOTES);
$検索項目3 =
htmlspecialchars($_POST["検索項目3 テキストボックス"], ENT_QUOTES);
$検索項目4 =
htmlspecialchars($_POST["検索項目4 テキストボックス"], ENT_QUOTES);
if(
empty($検索項目1) &&
empty($検索項目2) &&
empty($検索項目3) &&
empty($検索項目4)){
/* 何も入力がない場合 */
print "検索項目に何も入力がありません。\n";
} else {
/* MySQLに接続 */
$link =
mysql_connect("localhost", DB_USER, DB_PASS)
or
die("MySQLとの接続に失敗しました。");
/* 接続データベースを選択 */
mysql_select_db(DB_NAME)
or
die("データベースとの接続に失敗しました。");
/* クライアントのキャラクタセットをutf8に変更 */
mysql_query("SET NAMES utf8")
or
die( "クエリーの実行に失敗しました" );
/* 検索項目1、検索項目2、検索項目3、検索項目4での検索(部分一致検索) */
$query = " 検索項目1のフィールド名 LIKE '%" . $検索項目1 . "%' AND 検索項目2のフィールド名 LIKE '%" . $検索項目2 . "%' AND 検索項目3のフィールド名 LIKE '%" . $検索項目3 . "%' AND 検索項目4のフィールド名 LIKE '%" . $検索項目4 . "%'";
/* クエリーを実行し、結果セットを取得 */
// 検索結果件数の取得
$result =
mysql_query("SELECT COUNT(*) AS total FROM テーブル名 WHERE $query")
or
die("クエリーを実行できませんでした。");
$row =
mysql_fetch_assoc( $result );
$total = $row['total'];
// 表示するページ番号
$p =
isset( $_GET['p'] ) ?
intval( $_GET['p'] ) : 0;
// 1ページに表示する件数
$perpage = 10;
// 表示するデータの位置を取得する ここから
$st = ($p - 1) * $perpage;
// 前のページ/次のページのページ番号を取得する は、プラス参考書スクリプトを改造
$prev = $p - 1;
if ($prev < 1) {
$prev = 1;
}
$next = $p + 1; ここまで
ceil( $total/$perpage );
// ページ位置に合わせてデータの取得
$query =
sprintf( 'SELECT * FROM テーブル名 WHERE %s LIMIT %d, %d', $query, $p * $perpage, $perpage );
$result =
mysql_query( $query );
/* 結果セットの行数を取得 */
$rows =
mysql_num_rows($result);
if( $rows == 0 ) {
/* 取り出すデータがない場合、エラーメッセージを表示 */
print "該当するデータが見つかりません。\n";
} else {
?>
検索結果一覧<br><br>
<TABLE border="0">
<TR>
<TH>表示データのそれぞれの題名</TH>
</TR>
<?php
/* データの表示 */
while( $row =
mysql_fetch_array($result) ) {
/* 0からはじまる番号もしくはカラム名を添え字としてデータを取得 */
?>
<TR>
<TD>テーブルから取り出すデータ $row[フィールド名]を使ったスクリプト</TD>
</TR>
<?php
}
print "</TABLE>\n";
// 前のページ/次のページへのリンク
if ($p > 1) {
echo " <a href=\"".$_SERVER["PHP_SELF"]."?p=$prev\">
前のページ</a>";
}
if (($next - 1) * $perpage < $total) {
echo " <a href=\"".$_SERVER["PHP_SELF"]."?p=$next\">
次のページ</a>";
}
}
/* MySQLより切断 */
mysql_close($link);
}
?>
signalさんのご指導いただいたスクリプトによって、10件ずつ表示が可能になりました。
しかし私のスクリプトがメチャクチャなばかりに、「次ページ」をクリックすると
empty関数で定義している、「検索項目に何も入力がありません」のメッセージが出てしまいます。
最初に表示される10件はちゃんと検索どおりに表示されるのですが、「次ページ」をクリックすると
そうなってしまいます。じゃあ、
empty関数の定義を全て削除してみようと思い、やってみると
「次ページ」のデータは表示されるものの、登録データ全部に対してになってしまいます。
せっかく丁寧にご指導いただいたのに、大変申し訳なく思います。
赤を入れる部分がたくさんあるとは思いますが、何卒よろしくお願いします。

kende様のご指摘通り、三項演算子を使用する際には、コードの複雑度などを考慮する必要がありますね。書きやすさと共に可読性も追求したいところですね。