English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In diesem Tutorial werden Sie lernen, wie man mit PHP und MySQL CRUD-Anwendungen erstellt.
CRUD istC Create,R Read,U pdate undD E ist das Akronym für elete. CRUD-Operationen sind grundlegende Datenoperationen in der Datenbank. In den vorangegangenen Kapiteln haben wir bereits gelernt, wie man die Operationen Create (d.h. Einfügen), Read (d.h. Auswählen), Update und Delete ausführt. In diesem Tutorial werden wir eine einfache PHP-Anwendung erstellen, um alle diese Operationen an einer Stelle auf einer MySQL-Datenbanktabelle auszuführen.
Gut, lassen Sie uns mit dem Erstellen der Tabelle beginnen. Wir werden diese Tabelle in allen Beispielen verwenden.
Führen Sie den folgenden SQL-Befehl aus, um in der MySQL-Datenbank eine Tabelle mit dem Namenemployees Tabelle. Wir werden diese Tabelle in allen zukünftigen Aktionen verwenden.
CREATE TABLE employees ( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100) NOT NULL, address VARCHAR(255) NOT NULL, salary INT(10) NOT NULL );
Nachdem wir die Tabelle erstellt haben, müssen wir ein PHP-Skript erstellen, um eine Verbindung zum MySQL-Datenbankserver herzustellen. Lassen Sie uns eine Datei namens “config.php” erstellen und den folgenden Code hineinlegen.
Später werden wir die PHP-funktion require_once() verwenden, um diese Konfigurationsdatei in anderen Seiten zu includieren.
<?php /* Datenbankanmeldeinformationen. Angenommen, Sie führen MySQL aus Server mit Standardeinstellungen (Benutzer “root”, kein Passwort) */ define('DB_SERVER', 'localhost'); define('DB_USERNAME', 'root'); define('DB_PASSWORD', ''); define('DB_NAME', 'demo'); /* Versuche, eine Verbindung zum MySQL-Datenbankserver herzustellen. */ $link = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME); //Verbindung überprüfen if($link === false){ die("Fehler: Verbindung nicht möglich. " . mysqli_connect_error()); } ?>
首先,我们将为CRUD应用程序创建一个登录页面,该页面包含一个数据网格,其中显示了employee数据库表中的记录。它还为网格中显示的每个记录都有操作图标,您可以选择查看其详细信息,对其进行更新或删除。
我们还将在数据网格的顶部添加一个创建按钮,该按钮可用于在employee在表中创建新记录。创建一个名为“index.php”的文件,并将以下代码放入其中:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Dashboard</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css"> <script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.js"></script> <style type="text/css"> .wrapper{ width: 650px; margin: 0 auto; } .page-header h2{ margin-top: 0; } table tr td:last-child a{ margin-right: 15px; } </style> <script type="text/javascript"> $(document).ready(function(){ $('[data-toggle="tooltip"]').tooltip(); }); </script> </head> <body> <div class="wrapper"> <div class="container-fluid"> <div class="row"> <div class="col-md-12"> <div class="page-header clearfix"> <h2 class="pull-left">Mitarbeiterdetails</h2> <a href="create.php" class="btn btn-success pull-right">Neuen Mitarbeiter hinzufügen</a> </div> <?php //Einschließen der Konfigurationsdatei require_once "config.php"; //Versuchen, die Auswahlabfrage auszuführen $sql = "SELECT * FROM employees"; if($result = mysqli_query($link, $sql)){ if(mysqli_num_rows($result) > 0){ echo "<table class='table table-bordered table-striped'>"; echo "<thead>"; echo "<tr>"; echo "<th>#</th>"; echo "<th>Name</th>"; echo "<th>Adresse</th>"; echo "<th>Gehalt</th>"; echo "<th>Aktion</th>"; echo "</tr>"; echo "</thead>"; echo "<tbody>"; while($row = mysqli_fetch_array($result)){ echo "<tr>"; echo "<td>" . $row['id'] . "</td>"; echo "<td>" . $row['name'] . "</td>"; echo "<td>" . $row['address'] . "</td>"; echo "<td>" . $row['salary'] . "</td>"; echo "<td>"; echo "<a href='read.php?id=%. $row['id'] ."' title='Eintrag anzeigen' data-toggle='tooltip'><span class='glyphicon glyphicon'-eye-open"></span></a>"; echo "<a href='update.php?id=%. $row['id'] ."' title='Eintrag aktualisieren' data-toggle='tooltip'><span class='glyphicon glyphicon'-pencil"></span></a>"; echo "<a href='delete.php?id=%. $row['id'] ."' title='Löschen von Einträgen' data-toggle='tooltip'><span class='glyphicon glyphicon'-trash'></span></a>"; echo "</td>"; echo "</tr>"; } echo "</tbody>"; echo "</table>"; // Freie Ergebnisgruppe freigeben mysqli_free_result($result); } else{ echo "<p class='lead'><em>No records were found.</em></p>"; } } else{ echo "Fehler: Es konnte $sql nicht ausgeführt werden. " . mysqli_error($link); } //Verbindungsbeenden mysqli_close($link); ?> </div> </div> </div> </div> </body> </html>
inemployeesNachdem einige Einträge in die Tabelle eingefügt wurden, könnte die Login-Seite oder das CRUD-Datenraster wie im folgenden Bild aussehen:
Tipp:Wir haben das Bootstrap-Framework verwendet, um schnell und schön das CRUD-Anwendungslayout zu erstellen. Bootstrap ist das beliebteste und leistungsstärkste Frontend-Framework, das für schnelleren und einfacheren Web-Entwicklung verwendet wird.
In diesem Abschnitt werden wir die Erstellungsseite der CRUD-Anwendung aufbauen.C Erstellungsfunktion.
Lassen Sie uns eine Datei namens "create.php" erstellen und den folgenden Code hineinlegen. Sie erstellt ein Web-Formular, das zuremployeeEintrag in die Tabelle eingefügt.
<?php //Die Konfigurationsdatei wird eingebunden. require_once "config.php"; //Variablen definieren und mit leeren Werten initialisieren $name = $address = $salary = ""; $name_err = $address_err = $salary_err = ""; //Beim Absenden des Formulars die Formulardaten verarbeiten if($_SERVER["REQUEST_METHOD"] == "POST"){ // Name validieren $input_name = trim($_POST["name"]); if(empty($input_name)){ $name_err = "Bitte geben Sie einen Namen ein."; wenn (!filter_var($input_name, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z\s]+$/")))){ $name_err = "Bitte geben Sie einen gültigen Namen ein."; } else{ $name = $input_name; } //Adresse überprüfen $input_address = trim($_POST["address"]); if(empty($input_address)){ $address_err = "Bitte geben Sie eine Adresse ein."; } else{ $address = $input_address; } //Gehalt überprüfen $input_salary = trim($_POST["salary"]); if(empty($input_salary)){ $salary_err = "Bitte geben Sie das Gehaltskonto ein."; } elseif(!ctype_digit($input_salary)){ $salary_err = "Bitte geben Sie eine positive Ganzzahl ein."; } else{ $salary = $input_salary; } //Überprüfen Sie vor der Datenbank-Eintragung auf Eingabefehler if(empty($name_err) && empty($address_err) && empty($salary_err)){ //Vorbereitete INSERT-Anweisung $sql = "INSERT INTO employees (name, address, salary) VALUES (?, ?, ?)"; if($stmt = mysqli_prepare($link, $sql)){ //Die Variable wird als Parameter an das vorbereitete Statement gebunden. mysqli_stmt_bind_param($stmt, "sss", $param_name, $param_address, $param_salary); // Setze Parameter $param_name = $name; $param_address = $address; $param_salary = $salary; // Versuch, die vorbereitete Anweisung auszuführen if(mysqli_stmt_execute($stmt)){ //Das Record wurde erfolgreich erstellt. Umgeleitet zur Login-Seite header("location: index.php"); exit(); } else{ echo "Ein Problem ist aufgetreten. Bitte versuchen Sie es später noch einmal."; } } // Statement schließen mysqli_stmt_close($stmt); } //Verbindungsbeenden mysqli_close($link); } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> Create Record</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css"> <style type="text/css"> .wrapper{ width: 500px; margin: 0 auto; } </style> </head> <div class="wrapper"> <div class="container-fluid"> <div class="row"> <div class="col-md-12"> <div class="page-header"> <h2>Erstelle Eintrag</h2> </div> <p>Füllen Sie dieses Formular aus und senden Sie es, um das Mitarbeiterrecord in die Datenbank hinzuzufügen.</p> <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post"> <div class="form-group <?php echo (!empty($name_err)) ? 'has-error' : ''; ?>"> <label>Name</label> <input type="text" name="name" class="form-control" value="<?php echo $name; ?>"> <span class="help-block"><?php echo $name_err;?>"/span> </div> <div class="form-group <?php echo (!empty($address_err)) ? 'has-error' : ''; ?>"> label>Address</label> <textarea name="address" class="form-control/textarea> <span class="help-block"><?php echo $address_err;?></span> </div> <div class="form-group <?php echo (!empty($salary_err)) ? 'has-error' : ''; ?>"> <label>Salary</label> <input type="text" name="salary" class="form-control" value="<?php echo $salary; ?>"> <span class="help-block"><?php echo $salary_err;?></span> </div> <input type="submit" class="btn btn-primary" value="Submit"> <a href="index.php" class="btn btn-default">Abbrechen</a> </form> </div> </div> </div> </div> </html>
Der gleiche "create.php"-Datei zeigt das HTML-Formular an und verarbeitet gesendete Formulardaten. Bevor die Daten gespeichert werden, führt sie auch grundlegende Validierung der Benutzereingaben durch.
Jetzt ist es an der Zeit, die CRUD-Anwendung zu bauenR Lesefunktion.
Lassen Sie uns eine Datei namens "read.php" erstellen und den folgenden Code hineinlegen. Er wird basierend aufMitarbeiterid-Attribut aus der Tabelle employees abrufen, um Einträge zu检索.
<?php // Überprüfen Sie vor der Weiterverarbeitung, ob der id-Parameter vorhanden ist if(isset($_GET["id"]) && !empty(trim($_GET["id"]))){ //Einschließen der Konfigurationsdatei require_once "config.php"; //SELECT-Anweisung $sql = "SELECT * FROM employees WHERE id = ?"; if($stmt = mysqli_prepare($link, $sql)){ //Die Variable wird als Parameter an das vorbereitete Statement gebunden. mysqli_stmt_bind_param($stmt, "i", $param_id); //设置参数 $param_id = trim($_GET["id"]); //Versuchen Sie, ein vorbereitetes Statement auszuführen if(mysqli_stmt_execute($stmt)){ $result = mysqli_stmt_get_result($stmt); if(mysqli_num_rows($result) == 1){ /* 提取结果行作为关联数组。由于结果集仅包含一行,因此我们不需要使用while循环*/ $row = mysqli_fetch_array($result, MYSQLI_ASSOC); //检索单个字段值 $name = $row["name"]; $address = $row["address"]; $salary = $row["salary"]; } else{ //Die URL enthält keinen gültigen id-Parameter. Leiten Sie auf die Fehlerseite um header("location: error.php"); exit(); } } else{ echo "Ach! Es ist etwas schiefgelaufen. Bitte versuchen Sie es später noch einmal."; } } // Statement schließen mysqli_stmt_close($stmt); //Verbindungsbeenden mysqli_close($link); } else{ //Die URL enthält keinen id-Parameter. Weiterleitung zur Fehlerseite header("location: error.php"); exit(); } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Zeige Eintrag</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css"> <style type="text/css"> .wrapper{ width: 500px; margin: 0 auto; } </style> </head> <div class="wrapper"> <div class="container-fluid"> <div class="row"> <div class="col-md-12"> <div class="page-header"> <h1>Zeige Eintrag</h1> </div> <div class="form-group"> <label>Name</label> <p class="form-control-static"><?php echo $row["name"]; ?></p> </div> <div class="form-group"> label>Address</label> <p class="form-control-static"><?php echo $row["address"]; ?></p> </div> <div class="form-group"> <label>Salary</label> <p class="form-control-static"><?php echo $row["salary"]; ?></p> </div> <p><a href="index.php" class="btn btn-primary">Zurück</a></p> </div> </div> </div> </div> </html>
Gleichzeitig können wir die UPDATE-Funktion unserer CRUD-Anwendung erstellen.
Lassen Sie uns eine Datei namens "update.php" erstellen und den folgenden Code hineinlegen. Er wird basierend aufMitarbeiteraktualisierenMitarbeiterBestehende Einträge in der Tabelle.
<?php //Einschließen der Konfigurationsdatei require_once "config.php"; //Variablen definieren und mit leeren Werten initialisieren $name = $address = $salary = ""; $name_err = $address_err = $salary_err = ""; //Beim Absenden des Formulars die Formulardaten verarbeiten if(isset($_POST["id"]) && !empty($_POST["id"])){ // Wert eines versteckten Eingabefeldes abrufen $id = $_POST["id"]; // Name validieren $input_name = trim($_POST["name"]); if(empty($input_name)){ $name_err = "Bitte geben Sie einen Namen ein."; wenn (!filter_var($input_name, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z\s]+$/")))){ $name_err = "Bitte geben Sie einen gültigen Namen ein."; } else{ $name = $input_name; } // Adresse validieren $input_address = trim($_POST["address"]); if(empty($input_address)){ $address_err = "Bitte geben Sie eine Adresse ein."; } else{ $address = $input_address; } //Gehalt überprüfen $input_salary = trim($_POST["salary"]); if(empty($input_salary)){ $salary_err = "Bitte geben Sie den Gehaltsbetrag ein."; } elseif(!ctype_digit($input_salary)){ $salary_err = "Bitte geben Sie einen positiven Ganzzahlwert ein."; } else{ $salary = $input_salary; } //Überprüfen Sie vor der Datenbank-Insertion auf Eingabefehler if(empty($name_err) && empty($address_err) && empty($salary_err)){ //UPDATE-Anweisung $sql = "UPDATE employees SET name=?, address=?, salary=? WHERE id=?"; if($stmt = mysqli_prepare($link, $sql)){ //Die Variable wird als Parameter an das vorbereitete Statement gebunden. mysqli_stmt_bind_param($stmt, "sssi", $param_name, $param_address, $param_salary, $param_id); //设置参数 $param_name = $name; $param_address = $address; $param_salary = $salary; $param_id = $id; //Versuchen Sie, die vorbereitete Anweisung auszuführen if(mysqli_stmt_execute($stmt)){ //Aktualisierung erfolgreich protokolliert. Umleitung zur Anmeldeseite header("location: index.php"); exit(); } else{ echo "Es gibt ein Problem. Bitte versuchen Sie es später noch einmal."; } } // Statement schließen mysqli_stmt_close($stmt); } //Verbindungsbeenden mysqli_close($link); } else{ //Überprüfen Sie vor der Weiterverarbeitung, ob der id-Parameter vorhanden ist if(isset($_GET["id"]) && !empty(trim($_GET["id"]))){ //URL-Parameter erhalten $id = trim($_GET["id"]); //SELECT-Anweisung $sql = "SELECT * FROM employees WHERE id = ?"; if($stmt = mysqli_prepare($link, $sql)){ //Die Variable wird als Parameter an das vorbereitete Statement gebunden. mysqli_stmt_bind_param($stmt, "i", $param_id); //设置参数 $param_id = $id; //Versuchen Sie, die vorbereitete Anweisung auszuführen if(mysqli_stmt_execute($stmt)){ $result = mysqli_stmt_get_result($stmt); if(mysqli_num_rows($result) == 1){ /* 提取结果行作为关联数组。由于结果集仅包含一行,因此我们不需要使用while循环 */ $row = mysqli_fetch_array($result, MYSQLI_ASSOC); //检索单个字段值 $name = $row["name"]; $address = $row["address"]; $salary = $row["salary"]; } else{ //URL不包含有效的ID。重定向至错误页面 header("location: error.php"); exit(); } } else{ echo "Ach! Es ist etwas schiefgelaufen. Bitte versuchen Sie es später noch einmal."; } } // Statement schließen mysqli_stmt_close($stmt); //Verbindungsbeenden mysqli_close($link); } else{ //Die URL enthält keinen id-Parameter. Weiterleitung zur Fehlerseite header("location: error.php"); exit(); } } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Update Record</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css"> <style type="text/css"> .wrapper{ width: 500px; margin: 0 auto; } </style> </head> <div class="wrapper"> <div class="container-fluid"> <div class="row"> <div class="col-md-12"> <div class="page-header"> <h2>更新记录</h2> </div> <p>请编辑输入值并提交以更新记录。</p> <form action="<?php echo htmlspecialchars(basename($_SERVER['REQUEST_URI'])); ?>" method="post"> <div class="form-group <?php echo (!empty($name_err)) ? 'has-error' : ''; ?>"> <label>Name</label> <input type="text" name="name" class="form-control" value="<?php echo $name; ?>"> <span class="help-block"><?php echo $name_err;?>"/span> </div> <div class="form-group <?php echo (!empty($address_err)) ? 'has-error' : ''; ?>"> label>Address</label> <textarea name="address" class="form-control/textarea> <span class="help-block"><?php echo $address_err;?></span> </div> <div class="form-group <?php echo (!empty($salary_err)) ? 'has-error' : ''; ?>"> <label>Salary</label> <input type="text" name="salary" class="form-control" value="<?php echo $salary; ?>"> <span class="help-block"><?php echo $salary_err;?></span> </div> <input type="hidden" name="id" value="<?php echo $id; ?>"/> <input type="submit" class="btn btn-primary" value="Submit"> <a href="index.php" class="btn btn-default">Abbrechen</a> </form> </div> </div> </div> </div> </html>
Schließlich werden wirdunsere CRUD-Anwendungsfunktion elete.
Lassen Sie uns eine Datei namens "delete.php" erstellen und den folgenden Code hineinlegen. Diese Datei wirdMitarbeiterDas id-Attribut vonMitarbeiterLöschen der bestehenden Einträge im Tisch.
<?php //Nach der Bestätigung wird der Löschvorgang ausgeführt. if(isset($_POST["id"]) && !empty($_POST["id"])){ //Die Konfigurationsdatei wird eingebunden. require_once "config.php"; //DELETE-Anweisung $sql = "DELETE FROM employees WHERE id = ?"; if($stmt = mysqli_prepare($link, $sql)){ //Die Variable wird als Parameter an das vorbereitete Statement gebunden. mysqli_stmt_bind_param($stmt, "i", $param_id); // Setze Parameter $param_id = trim($_POST["id"]); //Versuchen Sie, die vorbereitete Anweisung auszuführen if(mysqli_stmt_execute($stmt)){ //Das Löschen des Eintrags war erfolgreich. Weiterleitung zur Anmeldeseite header("location: index.php"); exit(); } else{ echo "Ach! Es ist etwas schiefgelaufen. Bitte versuchen Sie es später noch einmal."; } } // Statement schließen mysqli_stmt_close($stmt); //Verbindungsbeenden mysqli_close($link); } else{ //Überprüfen Sie, ob der id-Parameter vorhanden ist if(empty(trim($_GET["id"]))){ //Die URL enthält keinen id-Parameter. Weiterleitung zur Fehlerseite header("location: error.php"); exit(); } } ?> <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post"> <div class="alert alert-danger fade in"> <input type="hidden" name="id" value="<?php echo trim($_GET["id"]); ?>"/> <p>Sind Sie sicher, dass Sie diesen Eintrag löschen möchten?</p><br> <p> <input type="submit" value="Ja" class="btn btn-danger"> <a href="index.php" class="btn btn-default">Nein</a> </p> </div> </form>
Am Ende lassen Sie uns eine Datei "error.php" erstellen. Wenn die Anfrage ungültig ist, d.h. der URL-Query-String fehlt den id-Parameter oder dieser Parameter ist ungültig, wird diese Seite angezeigt.
<h1>Ungültige Anfrage</h1> <div class="alert alert-danger fade in"> <p>Entschuldigung, Ihre angeforderte Anfrage ist ungültig. Bitte <a href="index.php" class="alert-link">Zurück</a> Versuchen Sie es noch einmal.</p> </div>
Nach einer langen Reise haben wir schließlich mit PHP und MySQL eine CRUD-Anwendung fertiggestellt.