Formulardaten mit Mysqli_real_escape_string verarbeiten

Habdul Hazeez 15 Februar 2024
  1. Einrichten eines lokalen Servers
  2. Erstellen Sie eine Datenbank und eine Tabelle
  3. Erstellen Sie das HTML-Formular
  4. Formulardaten verarbeiten
  5. Ursachen eines Fehlers in Mysqli_real_escape_string
Formulardaten mit Mysqli_real_escape_string verarbeiten

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:

HTML-Formular in Firefox 100

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

Daten in Datenbank einfügen

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

Verwandter Artikel - MySQL PHP