Configurer un système de recherche avec PHP et MySQL

Habdul Hazeez 30 janvier 2023
  1. Configurer une base de données
  2. Créer le code HTML
  3. Créer le code PHP
Configurer un système de recherche avec PHP et MySQL

Ce tutoriel vous apprendra à créer un système de recherche avec PHP et MySQL. Vous apprendrez à configurer le HTML, la base de données MySQL et le backend PHP. Dans le code PHP, vous apprendrez à utiliser une instruction préparée avec l’opérateur LIKE en SQL.

Configurer une base de données

Téléchargez et installez le serveur XAMPP. Il est livré avec MySQL. Lancez le shell dans le panneau de configuration XAMPP. Connectez-vous au shell MySQL avec la commande suivante :

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

Utilisez la requête SQL suivante pour créer une base de données appelée fruit_db.

CREATE database fruit_db;

Production :

Query OK, 1 row affected (0.001 sec)

Vous aurez besoin d’exemples de données que vous pourrez utiliser. Exécutez donc le SQL suivant sur la base de données fruit_db :

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

Production :

Query OK, 0 rows affected (0.028 sec)

Vérifiez la structure du tableau :

DESC fruit;

Production :

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

Une fois la table configurée, utilisez le SQL suivant pour insérer un exemple de données :

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

Production :

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

Confirmez l’existence des données avec le SQL suivant :

SELECT * FROM fruit;

Production :

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

Créer le code HTML

Le code HTML du système de recherche est un formulaire HTML. Le formulaire a une seule entrée et un bouton submit. Un attribut required dans l’entrée du formulaire assure que les utilisateurs entrent quelque chose dans le formulaire.

Le bloc de code suivant est le code HTML du formulaire de recherche.

<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>

Le CSS suivant rend le formulaire plus présentable.

* {
	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;
}

Le code HTML doit ressembler à l’image suivante dans votre navigateur Web.

rechercher php dans mysql - Formulaire de recherche HTML

Créer le code PHP

Le code PHP traitera la soumission du formulaire. Voici un résumé du fonctionnement du code :

  1. Vérifiez le formulaire soumis par l’utilisateur.
  2. Connectez-vous à la base de données.
  3. Échappez à la chaîne de recherche et coupez l’espace entièrement blanc.
  4. Vérifiez les caractères invalides tels que < ou - (sans les guillemets).
  5. Effectuez la recherche via une instruction préparée.
  6. Renvoyez les résultats.

Le bloc de code suivant est le code PHP complet pour effectuer la recherche. Enregistrez le code dans un fichier appelé 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();
    }
?>

L’image suivante contient le résultat de la chaîne de recherche pine. Il restitue le fruit pineapple et sa couleur.

rechercher php dans mysql - résultat de la recherche pour la chaîne pine

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

Article connexe - PHP MySQL