PHP と MySQL を使用して検索システムをセットアップする

Habdul Hazeez 2023年1月30日
  1. データベースをセットアップする
  2. HTML コードを作成する
  3. PHP コードを作成する
PHP と MySQL を使用して検索システムをセットアップする

このチュートリアルでは、PHP と MySQL を使用して検索システムを作成する方法を説明します。HTML、MySQL データベース、および PHP バックエンドを設定する方法を学習します。PHP コードでは、SQL の LIKE 演算子でプリペアドステートメントを使用する方法を学習します。

データベースをセットアップする

XAMPP サーバーをダウンロードしてインストールします。MySQL が付属しています。XAMPP コントロールパネルでシェルを起動します。次のコマンドを使用して MySQL シェルにログインします。

# This login command assumes that the
# password is empty and the user is "root"
mysql -u root -p

次の SQL クエリを使用して、fruit_db というデータベースを作成します。

CREATE database fruit_db;

出力:

Query OK, 1 row affected (0.001 sec)

使用できるサンプルデータが必要になります。したがって、fruit_db データベースで次の SQL を実行します。

CREATE TABLE fruit
(id INT NOT NULL AUTO_INCREMENT,
 name VARCHAR(20) NOT NULL,
 color VARCHAR(20) NOT NULL,
 PRIMARY KEY (id))
 ENGINE = InnoDB;

出力:

Query OK, 0 rows affected (0.028 sec)

テーブルの構造を確認してください。

DESC fruit;

出力:

+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20) | NO   |     | NULL    |                |
| color | varchar(20) | NO   |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+

テーブルを設定したら、次の SQL を使用してサンプルデータを挿入します。

INSERT INTO fruit (id, name, color) VALUES (NULL, 'Banana', 'Yellow'), (NULL, 'Pineapple', 'Green')

出力:

Query OK, 2 rows affected (0.330 sec)
Records: 2  Duplicates: 0  Warnings: 0

次の SQL を使用してデータの存在を確認します。

SELECT * FROM fruit;

出力:

+----+-----------+--------+
| id | name      | color  |
+----+-----------+--------+
|  1 | Banana    | Yellow |
|  2 | Pineapple | Green  |
+----+-----------+--------+

HTML コードを作成する

検索システムの HTML コードは HTML フォームです。フォームには、単一のフォーム入力と submit ボタンがあります。フォームの入力には required 属性があり、ユーザがフォームに何かを入力することを保証します。

次のコードブロックは、検索フォームの HTML コードです。

<main>
	<form action="searchdb.php" method="post">
		<input
			type="text"
			placeholder="Enter your search term"
			name="search"
			required>
		<button type="submit" name="submit">Search</button>
	</form>
</main>

次の CSS は、フォームをより見やすくします。

* {
	margin: 0;
	padding: 0;
	box-sizing: border-box;
}

body {
	display: grid;
	align-items: center;
	place-items: center;
	height: 100vh;
}

main {
	width: 60%;
	border: 2px solid #1560bd;
	padding: 2em;
	display: flex;
	justify-content: center;
}

input,
button {
	padding: 0.2em;
}

HTML は、Web ブラウザの次の画像のようになります。

mysql で php を検索-HTML 検索フォーム

PHP コードを作成する

PHP コードはフォームの送信を処理します。コードの仕組みの概要は次のとおりです。

  1. ユーザーが送信したフォームを確認します。
  2. データベースに接続します。
  3. 検索文字列をエスケープし、すべて空白を削除します。
  4. <-(引用符なし)などの無効な文字を確認します。
  5. プリペアドステートメントを介して検索を実行します。
  6. 結果を返します。

次のコードブロックは、検索を実行するための完全な PHP コードです。コードを searchdb.php というファイルに保存します。

<?php
    if (isset($_POST['submit'])) {
        // Connect to the database
        $connection_string = new mysqli("localhost", "root", "", "fruit_db");
        
        // Escape the search string and trim
        // all whitespace
        $searchString = mysqli_real_escape_string($connection_string, trim(htmlentities($_POST['search'])));

        // If there is a connection error, notify
        // the user, and Kill the script.
        if ($connection_string->connect_error) {
            echo "Failed to connect to Database";
            exit();
        }

        // Check for empty strings and non-alphanumeric
        // characters.
        // Also, check if the string length is less than
        // three. If any of the checks returns "true",
        // return "Invalid search string", and
        // kill the script.
        if ($searchString === "" || !ctype_alnum($searchString) || $searchString < 3) {
            echo "Invalid search string";
            exit();
        }

        // We are using a prepared statement with the
        // search functionality to prevent SQL injection.
        // So, we need to prepend and append the search
        // string with percent signs
        $searchString = "%$searchString%";

        // The prepared statement
        $sql = "SELECT * FROM fruit WHERE name LIKE ?";

        // Prepare, bind, and execute the query
        $prepared_stmt = $connection_string->prepare($sql);
        $prepared_stmt->bind_param('s', $searchString);
        $prepared_stmt->execute();

        // Fetch the result
        $result = $prepared_stmt->get_result();

        if ($result->num_rows === 0) {
            // No match found
            echo "No match found";
            // Kill the script
            exit();

        } else {
            // Process the result(s)
            while ($row = $result->fetch_assoc()) {
                echo "<b>Fruit Name</b>: ". $row['name'] . "<br />";
                echo "<b>Fruit Color</b>: ". $row['color'] . "<br />";

            } // end of while loop
        } // end of if($result->num_rows)

    } else { // The user accessed the script directly

        // Tell them nicely and kill the script.
        echo "That is not allowed!";
        exit();
    }
?>

次の画像には、検索文字列 pine の結果が含まれています。果物の pineapple とその色を返します。

mysql で php を検索-文字列 pine の検索結果

著者: Habdul Hazeez
Habdul Hazeez avatar Habdul Hazeez avatar

Habdul Hazeez is a technical writer with amazing research skills. He can connect the dots, and make sense of data that are scattered across different media.

LinkedIn

関連記事 - PHP MySQL