Traiter les données de formulaire avec Mysqli_real_escape_string
- Configurer un serveur local
- Créer une base de données et une table
- Créer le formulaire HTML
- Traiter les données du formulaire
-
Causes d’une erreur dans
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:
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) :
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 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