Formulardaten mit Mysqli_real_escape_string verarbeiten
- Einrichten eines lokalen Servers
- Erstellen Sie eine Datenbank und eine Tabelle
- Erstellen Sie das HTML-Formular
- Formulardaten verarbeiten
-
Ursachen eines Fehlers in
Mysqli_real_escape_string
In diesem Artikel erfahren Sie, wie Sie Formulardaten mit mysqli_real_escape_string
verarbeiten.
Zuerst richten wir eine Beispieldatenbank und eine Tabelle ein. Dann erstellen wir ein HTML-Formular, das Benutzereingaben akzeptiert.
Danach erklären wir in PHP, wie man mysqli_real_escape_string
verwendet, ohne einen Fehler zu verursachen.
Einrichten eines lokalen Servers
Der gesamte Code für diesen Artikel funktioniert auf einem Server. Wenn Sie also Zugriff auf einen Live-Server haben, können Sie diesen Abschnitt überspringen und zum nächsten übergehen.
Wenn nicht, installieren Sie einen lokalen Server wie XAMPP von Apache Friends. Suchen Sie nach der Installation von XAMPP den Ordner htdocs
und erstellen Sie einen Ordner.
Dieser Ordner speichert den gesamten Code für diesen Artikel.
Erstellen Sie eine Datenbank und eine Tabelle
In XAMPP können Sie eine Datenbank mit phpMyAdmin
oder der Kommandozeile erstellen. Wenn Sie sich in der Befehlszeile befinden, melden Sie sich mit dem folgenden Befehl bei MySQL an:
#login to mysql
mysql -u root -p
Wenn Sie sich bei MySQL angemeldet haben, erstellen Sie eine Datenbank. Für diesen Artikel nennen wir die Datenbank my_details
.
CREATE database my_details
Erstellen Sie mit der erstellten Datenbank eine Tabelle mit dem nächsten SQL-Code. Die Tabelle enthält die Daten für unser Beispielprojekt.
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;
Erstellen Sie das HTML-Formular
Das HTML-Formular hat zwei Formulareingaben. Der erste erfasst den Vornamen des Benutzers, der zweite den Nachnamen.
<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>
Ausgabe:
Formulardaten verarbeiten
Während der Formularverarbeitung verwenden wir mysqli_real_escape_string
, um die Formulareingaben zu maskieren. Außerdem sollte die Datenbankverbindung das erste Argument von mysqli_real_escape_string
sein.
Daher haben wir im Folgenden mysqli_real_escape_string
für den Vor- und Nachnamen verwendet. Um den Code zu verwenden, speichern Sie ihn als 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();
}
?>
Ausgabe (bei erfolgreicher Verarbeitung):
Ursachen eines Fehlers in Mysqli_real_escape_string
Sie erhalten eine Fehlermeldung, wenn Sie die Datenbankverbindung in mysqli_real_escape_string
weglassen. Im folgenden Code haben wir also process_form.php
modifiziert.
Inzwischen hat diese Version die Datenbankverbindung in mysqli_real_escape_string
nicht. Als Ergebnis erhalten Sie eine Fehlermeldung, wenn Sie Daten in die Datenbank einfügen möchten.
<?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();
}
?>
Beispielfehlermeldung:
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