Traiter les données de formulaire avec Mysqli_real_escape_string

Habdul Hazeez 15 février 2024
  1. Configurer un serveur local
  2. Créer une base de données et une table
  3. Créer le formulaire HTML
  4. Traiter les données du formulaire
  5. Causes d’une erreur dans Mysqli_real_escape_string
Traiter les données de formulaire avec Mysqli_real_escape_string

Cet article vous apprendra à traiter les données d’un formulaire à l’aide de mysqli_real_escape_string.

Tout d’abord, nous allons configurer un exemple de base de données et une table. Ensuite, nous créerons un formulaire HTML qui acceptera les entrées de l’utilisateur.

Ensuite, en PHP, nous vous expliquerons comment utiliser mysqli_real_escape_string sans provoquer d’erreur.

Configurer un serveur local

Tout le code de cet article fonctionnera sur un serveur. Ainsi, si vous avez accès à un serveur en direct, vous pouvez ignorer cette section et passer à la suivante.

Sinon, installez un serveur local comme XAMPP d’Apache Friends. Une fois XAMPP installé, localisez le dossier htdocs et créez un dossier.

Ce dossier stockera tout le code de cet article.

Créer une base de données et une table

Dans XAMPP, vous pouvez créer une base de données en utilisant phpMyAdmin ou la ligne de commande. Si vous êtes en ligne de commande, connectez-vous à MySQL à l’aide de la commande suivante :

#login to mysql
mysql -u root -p

Une fois connecté à MySQL, créez une base de données. Pour cet article, nous appellerons la base de données my_details.

CREATE database my_details

Une fois la base de données créée, créez une table avec le code SQL suivant. La table contiendra les données de notre exemple de projet.

CREATE TABLE bio_data (
id INT NOT NULL AUTO_INCREMENT,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
PRIMARY KEY (id)) ENGINE = InnoDB;

Créer le formulaire HTML

Le formulaire HTML aura deux entrées de formulaire. Le premier recueille le prénom de l’utilisateur, tandis que le second est pour le nom de famille.

<head>
    <meta charset="utf-8">
    <title>Process Form With mysqli_real_escape_string</title>
    <style>
        body {
            display: grid;
            justify-content: center;
            align-items: center;
            height: 100vh;
        }
    </style>
</head>
<body>
    <main>
        <form action="process_form.php" method="post">
            <label id="first_name">First Name</label>
            <input id="first_name" type="text" name="first_name" required>
            <label id="last_name">Last Name</label>
            <input id="last_name" type="text" name="last_name" required>
            <input type="submit" name="submit_form" value="Submit Form">
        </form>
    </main>
</body>

Production:

Formulaire HTML dans Firefox 100

Traiter les données du formulaire

Lors du traitement du formulaire, nous utilisons mysqli_real_escape_string pour échapper les entrées du formulaire. De plus, la connexion à la base de données doit être le premier argument de mysqli_real_escape_string.

Ainsi, nous avons utilisé mysqli_real_escape_string sur le prénom et le nom dans ce qui suit. Pour utiliser le code, enregistrez-le sous process_form.php.

<?php
    if (isset($_POST['submit_form']) && isset($_POST["first_name"]) && isset($_POST["last_name"])) {
        // Set up a database connection.
        // Here, our password is empty
        $connection_string = new mysqli("localhost", "root", "", "my_details");

        // Escape the first name and last name using
        // mysqli_real_escape_string function. Meanwhile,
        // the first parameter to the function should
        // be the database connection. If you omit, the
        // database connection, you'll get an error.
        $first_name = mysqli_real_escape_string($connection_string, trim(htmlentities($_POST['first_name'])));
        $last_name = mysqli_real_escape_string($connection_string, trim(htmlentities($_POST['last_name'])));

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

        // Check string length, empty strings and
        // non-alphanumeric characters.
         if ( $first_name === "" || !ctype_alnum($first_name) ||
                strlen($first_name) <= 3
            ) {
                echo "Your first name is invalid.";
                exit();
        }

         if ( $last_name === "" || !ctype_alnum($last_name) ||
                strlen($last_name) < 2
            ) {
                echo "Your last name is invalid.";
                exit();
        }

        // Insert the record into the database
        $query = "INSERT into bio_data (first_name, last_name) VALUES ('$first_name', '$last_name')";
        $stmt = $connection_string->prepare($query);
        $stmt->execute();

        if ($stmt->affected_rows === 1) {
            echo "Data inserted successfully";
        }
    } else {
        // User manipulated the HTML form or accessed
        // the script directly. Kill the script.
        echo "An unexpected error occurred. Please, try again later.";
        exit();
    }
?>

Sortie (si le traitement a réussi) :

Insérer des données dans la base de données

Causes d’une erreur dans Mysqli_real_escape_string

Vous obtiendrez une erreur si vous omettez la connexion à la base de données dans mysqli_real_escape_string. Ainsi, dans le code suivant, nous avons modifié process_form.php.

En attendant, cette version n’a pas la connexion à la base de données dans mysqli_real_escape_string. Par conséquent, vous obtiendrez une erreur lorsque vous voudrez insérer des données dans la base de données.

<?php
    if (isset($_POST['submit_form']) && isset($_POST["first_name"]) && isset($_POST["last_name"])) {
        $connection_string = new mysqli("localhost", "root", "", "my_details");

        // We've omitted the connection string
        $first_name = mysqli_real_escape_string(trim(htmlentities($_POST['first_name'])));
        $last_name = mysqli_real_escape_string(trim(htmlentities($_POST['last_name'])));

        if ($connection_string->connect_error) {
            echo "Failed to connect to Database. Please, check your connection details.";
            exit();
        }
        if ( $first_name === "" || !ctype_alnum($first_name) ||
                strlen($first_name) <= 3
           ) {
            echo "Your first name is invalid.";
            exit();
        }

         if ( $last_name === "" || !ctype_alnum($last_name) ||
                strlen($last_name) < 2
            ) {
                echo "Your last name is invalid.";
                exit();
        }

        $query = "INSERT into bio_data (first_name, last_name) VALUES ('$first_name', '$last_name')";
        $stmt = $connection_string->prepare($query);
        $stmt->execute();

        if ($stmt->affected_rows === 1) {
            echo "Data inserted successfully";
        }
    } else {
        echo "An unexpected error occurred. Please, try again later.";
        exit();
    }
?>

Exemple de message d’erreur :

Fatal error: Uncaught ArgumentCountError: mysqli_real_escape_string() expects exactly 2 arguments, 1 given in C:\xampp\htdocs\processformmysqli\process_form.php:12 Stack trace: #0 C:\xampp\htdocs\processformmysqli\process_form.php(12): mysqli_real_escape_string('Johnson') #1 {main} thrown in C:\xampp\htdocs\processformmysqli\process_form.php on line 12
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 - MySQL PHP