PHP MySQL CRUD 应用程序
在本教程中,您将学习如何使用 PHP 和 MySQL 构建 CRUD 应用程序。
什么是 CRUD
CRUD 是 Create、Read、Update 和 Delete 的首字母缩写词。 CRUD 操作是数据库的基本数据操作。 在前面的章节中,我们已经学习了如何执行创建(即插入)、读取(即选择)、更新和删除操作。 在本教程中,我们将创建一个简单的 PHP 应用程序,以便在一个地方对 MySQL 数据库表执行所有这些操作。
好吧,让我们从创建将在所有示例中使用的表开始。
创建数据库表
执行以下 SQL 查询以在您的 MySQL 数据库中创建一个名为 employees 的表。 我们将在未来的所有操作中使用此表。
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
);
创建配置文件
创建表后,我们需要创建一个 PHP 脚本来连接 MySQL 数据库服务器。 让我们创建一个名为"config.php"的文件并将以下代码放入其中。
稍后我们将使用 PHP require_once()
函数将此配置文件包含在其他页面中。
示例
Procedural
Object Oriented
PDO
Download
<?php
/* 数据库凭据。 假设您正在运行 MySQL
具有默认设置的服务器(用户 'root' 没有密码) */
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_NAME', 'demo');
/* 尝试连接 MySQL 数据库 */
$link = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
// 检查连接
if($link === false){
die("ERROR: Could not connect. " . mysqli_connect_error());
}
?>
<?php
/* 数据库凭据。 假设您正在运行 MySQL
具有默认设置的服务器(用户 'root' 没有密码) */
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_NAME', 'demo');
/* 尝试连接 MySQL 数据库 */
$mysqli = new mysqli(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
// 检查连接
if($mysqli === false){
die("ERROR: Could not connect. " . $mysqli->connect_error);
}
?>
<?php
/* 数据库凭据。 假设您正在运行 MySQL
具有默认设置的服务器(用户 'root' 没有密码) */
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_NAME', 'demo');
/* 尝试连接 MySQL 数据库 */
try{
$pdo = new PDO("mysql:host=" . DB_SERVER . ";dbname=" . DB_NAME, DB_USERNAME, DB_PASSWORD);
// 设置 PDO 错误模式为异常
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
die("ERROR: Could not connect. " . $e->getMessage());
}
?>
如果您使用下载按钮下载了面向对象或 PDO 代码示例,请在测试代码之前从文件名中删除文本"-oo-format"或"-pdo-format"。
注意: 在测试此代码之前,请根据您的 MySQL 服务器设置替换凭据,例如,将数据库名称"demo"替换为您自己的数据库名称,将用户名"root"替换为您自己的数据库用户名, 如果有,请指定数据库密码。
创建登陆页面
首先,我们将为我们的 CRUD 应用程序创建一个登录页面,其中包含一个显示 employees 数据库表中记录的数据网格。 它还具有显示在网格中的每条记录的操作图标,您可以选择查看其详细信息、更新或删除它。
我们还将在数据网格的顶部添加一个创建按钮,该按钮可用于在 employees 表中创建新记录。 创建一个名为"index.php"的文件并将以下代码放入其中:
示例
Procedural
Object Oriented
PDO
Download
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Dashboard</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
<style>
.wrapper{
width: 600px;
margin: 0 auto;
}
table tr td:last-child{
width: 120px;
}
</style>
<script>
$(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="mt-5 mb-3 clearfix">
<h2 class="pull-left">Employees Details</h2>
<a href="create.asp" class="btn btn-success pull-right"><i class="fa fa-plus"></i> Add New Employee</a>
</div>
<?php
// 包含配置文件
require_once "config.asp";
// 尝试选择查询执行
$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>Address</th>";
echo "<th>Salary</th>";
echo "<th>Action</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.asp?id='. $row['id'] .'" class="mr-3" title="View Record" data-toggle="tooltip"><span class="fa fa-eye"></span></a>';
echo '<a href="update.asp?id='. $row['id'] .'" class="mr-3" title="Update Record" data-toggle="tooltip"><span class="fa fa-pencil"></span></a>';
echo '<a href="delete.asp?id='. $row['id'] .'" title="Delete Record" data-toggle="tooltip"><span class="fa fa-trash"></span></a>';
echo "</td>";
echo "</tr>";
}
echo "</tbody>";
echo "</table>";
// Free result set
mysqli_free_result($result);
} else{
echo '<div class="alert alert-danger"><em>No records were found.</em></div>';
}
} else{
echo "Oops! Something went wrong. Please try again later.";
}
// 关闭连接
mysqli_close($link);
?>
</div>
</div>
</div>
</div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Dashboard</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
<style>
.wrapper{
width: 600px;
margin: 0 auto;
}
table tr td:last-child{
width: 120px;
}
</style>
<script>
$(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="mt-5 mb-3 clearfix">
<h2 class="pull-left">Employees Details</h2>
<a href="create.asp" class="btn btn-success pull-right"><i class="fa fa-plus"></i> Add New Employee</a>
</div>
<?php
// 包含配置文件
require_once "config.asp";
// 尝试选择查询执行
$sql = "SELECT * FROM employees";
if($result = $mysqli->query($sql)){
if($result->num_rows > 0){
echo '<table class="table table-bordered table-striped">';
echo "<thead>";
echo "<tr>";
echo "<th>#</th>";
echo "<th>Name</th>";
echo "<th>Address</th>";
echo "<th>Salary</th>";
echo "<th>Action</th>";
echo "</tr>";
echo "</thead>";
echo "<tbody>";
while($row = $result->fetch_array()){
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.asp?id='. $row['id'] .'" class="mr-3" title="View Record" data-toggle="tooltip"><span class="fa fa-eye"></span></a>';
echo '<a href="update.asp?id='. $row['id'] .'" class="mr-3" title="Update Record" data-toggle="tooltip"><span class="fa fa-pencil"></span></a>';
echo '<a href="delete.asp?id='. $row['id'] .'" title="Delete Record" data-toggle="tooltip"><span class="fa fa-trash"></span></a>';
echo "</td>";
echo "</tr>";
}
echo "</tbody>";
echo "</table>";
// Free result set
$result->free();
} else{
echo '<div class="alert alert-danger"><em>No records were found.</em></div>';
}
} else{
echo "Oops! Something went wrong. Please try again later.";
}
// 关闭连接
$mysqli->close();
?>
</div>
</div>
</div>
</div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Dashboard</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
<style>
.wrapper{
width: 600px;
margin: 0 auto;
}
table tr td:last-child{
width: 120px;
}
</style>
<script>
$(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="mt-5 mb-3 clearfix">
<h2 class="pull-left">Employees Details</h2>
<a href="create.asp" class="btn btn-success pull-right"><i class="fa fa-plus"></i> Add New Employee</a>
</div>
<?php
// 包含配置文件
require_once "config.asp";
// 尝试选择查询执行
$sql = "SELECT * FROM employees";
if($result = $pdo->query($sql)){
if($result->rowCount() > 0){
echo '<table class="table table-bordered table-striped">';
echo "<thead>";
echo "<tr>";
echo "<th>#</th>";
echo "<th>Name</th>";
echo "<th>Address</th>";
echo "<th>Salary</th>";
echo "<th>Action</th>";
echo "</tr>";
echo "</thead>";
echo "<tbody>";
while($row = $result->fetch()){
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.asp?id='. $row['id'] .'" class="mr-3" title="View Record" data-toggle="tooltip"><span class="fa fa-eye"></span></a>';
echo '<a href="update.asp?id='. $row['id'] .'" class="mr-3" title="Update Record" data-toggle="tooltip"><span class="fa fa-pencil"></span></a>';
echo '<a href="delete.asp?id='. $row['id'] .'" title="Delete Record" data-toggle="tooltip"><span class="fa fa-trash"></span></a>';
echo "</td>";
echo "</tr>";
}
echo "</tbody>";
echo "</table>";
// Free result set
unset($result);
} else{
echo '<div class="alert alert-danger"><em>No records were found.</em></div>';
}
} else{
echo "Oops! Something went wrong. Please try again later.";
}
// 关闭连接
unset($pdo);
?>
</div>
</div>
</div>
</div>
</body>
</html>
一旦 employees 表填充了一些记录,登录页面即 CRUD 数据网格可能如下图所示:
提示:我们使用了 Bootstrap 框架来快速、美观地制作这个 CRUD 应用程序布局。 Bootstrap 是最流行和最强大的前端框架,用于更快、更轻松地进行响应式 Web 开发。 请查看 Bootstrap 教程 部分以了解有关此框架的更多信息。
创建创建页面
在本节中,我们将 Create 构建CRUD应用程序的创建功能。
让我们创建一个名为"create.php"的文件并将以下代码放入其中。 它将生成一个 Web 表单,可用于在 employees 表中插入记录。
示例
Procedural
Object Oriented
PDO
Download
<?php
// 包含配置文件
require_once "config.asp";
// 定义变量并用空值初始化
$name = $address = $salary = "";
$name_err = $address_err = $salary_err = "";
// 提交表单时处理表单数据
if($_SERVER["REQUEST_METHOD"] == "POST"){
// 验证名称
$input_name = trim($_POST["name"]);
if(empty($input_name)){
$name_err = "Please enter a name.";
} elseif(!filter_var($input_name, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z\s]+$/")))){
$name_err = "Please enter a valid name.";
} else{
$name = $input_name;
}
// 验证地址
$input_address = trim($_POST["address"]);
if(empty($input_address)){
$address_err = "Please enter an address.";
} else{
$address = $input_address;
}
// 验证 salary
$input_salary = trim($_POST["salary"]);
if(empty($input_salary)){
$salary_err = "Please enter the salary amount.";
} elseif(!ctype_digit($input_salary)){
$salary_err = "Please enter a positive integer value.";
} else{
$salary = $input_salary;
}
// 在插入数据库之前检查输入错误
if(empty($name_err) && empty($address_err) && empty($salary_err)){
// 准备一个插入语句
$sql = "INSERT INTO employees (name, address, salary) VALUES (?, ?, ?)";
if($stmt = mysqli_prepare($link, $sql)){
// 将变量作为参数绑定到准备好的语句
mysqli_stmt_bind_param($stmt, "sss", $param_name, $param_address, $param_salary);
// 设置参数
$param_name = $name;
$param_address = $address;
$param_salary = $salary;
// 尝试执行准备好的语句
if(mysqli_stmt_execute($stmt)){
// 记录创建成功。 重定向到登陆页面
header("location: index.asp");
exit();
} else{
echo "Oops! Something went wrong. Please try again later.";
}
}
// 关闭语句
mysqli_stmt_close($stmt);
}
// 关闭连接
mysqli_close($link);
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Create Record</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<style>
.wrapper{
width: 600px;
margin: 0 auto;
}
</style>
</head>
<body>
<div class="wrapper">
<div class="container-fluid">
<div class="row">
<div class="col-md-12">
<h2 class="mt-5">Create Record</h2>
<p>Please fill this form and submit to add employee record to the database.</p>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
<div class="form-group">
<label>Name</label>
<input type="text" name="name" class="form-control <?php echo (!empty($name_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $name; ?>">
<span class="invalid-feedback"><?php echo $name_err;?></span>
</div>
<div class="form-group">
<label>Address</label>
<textarea name="address" class="form-control <?php echo (!empty($address_err)) ? 'is-invalid' : ''; ?>"><?php echo $address; ?></textarea>
<span class="invalid-feedback"><?php echo $address_err;?></span>
</div>
<div class="form-group">
<label>Salary</label>
<input type="text" name="salary" class="form-control <?php echo (!empty($salary_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $salary; ?>">
<span class="invalid-feedback"><?php echo $salary_err;?></span>
</div>
<input type="submit" class="btn btn-primary" value="Submit">
<a href="index.asp" class="btn btn-secondary ml-2">Cancel</a>
</form>
</div>
</div>
</div>
</div>
</body>
</html>
<?php
// 包含配置文件
require_once "config.asp";
// 定义变量并用空值初始化
$name = $address = $salary = "";
$name_err = $address_err = $salary_err = "";
// 提交表单时处理表单数据
if($_SERVER["REQUEST_METHOD"] == "POST"){
// 验证名称
$input_name = trim($_POST["name"]);
if(empty($input_name)){
$name_err = "Please enter a name.";
} elseif(!filter_var($input_name, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z\s]+$/")))){
$name_err = "Please enter a valid name.";
} else{
$name = $input_name;
}
// 验证地址
$input_address = trim($_POST["address"]);
if(empty($input_address)){
$address_err = "Please enter an address.";
} else{
$address = $input_address;
}
// 验证 salary
$input_salary = trim($_POST["salary"]);
if(empty($input_salary)){
$salary_err = "Please enter the salary amount.";
} elseif(!ctype_digit($input_salary)){
$salary_err = "Please enter a positive integer value.";
} else{
$salary = $input_salary;
}
// 在插入数据库之前检查输入错误
if(empty($name_err) && empty($address_err) && empty($salary_err)){
// 准备一个插入语句
$sql = "INSERT INTO employees (name, address, salary) VALUES (?, ?, ?)";
if($stmt = $mysqli->prepare($sql)){
// 将变量作为参数绑定到准备好的语句
$stmt->bind_param("sss", $param_name, $param_address, $param_salary);
// 设置参数
$param_name = $name;
$param_address = $address;
$param_salary = $salary;
// 尝试执行准备好的语句
if($stmt->execute()){
// 记录创建成功。 重定向到登陆页面
header("location: index.asp");
exit();
} else{
echo "Oops! Something went wrong. Please try again later.";
}
}
// 关闭语句
$stmt->close();
}
// 关闭连接
$mysqli->close();
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Create Record</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<style>
.wrapper{
width: 600px;
margin: 0 auto;
}
</style>
</head>
<body>
<div class="wrapper">
<div class="container-fluid">
<div class="row">
<div class="col-md-12">
<h2 class="mt-5">Create Record</h2>
<p>Please fill this form and submit to add employee record to the database.</p>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
<div class="form-group">
<label>Name</label>
<input type="text" name="name" class="form-control <?php echo (!empty($name_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $name; ?>">
<span class="invalid-feedback"><?php echo $name_err;?></span>
</div>
<div class="form-group">
<label>Address</label>
<textarea name="address" class="form-control <?php echo (!empty($address_err)) ? 'is-invalid' : ''; ?>"><?php echo $address; ?></textarea>
<span class="invalid-feedback"><?php echo $address_err;?></span>
</div>
<div class="form-group">
<label>Salary</label>
<input type="text" name="salary" class="form-control <?php echo (!empty($salary_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $salary; ?>">
<span class="invalid-feedback"><?php echo $salary_err;?></span>
</div>
<input type="submit" class="btn btn-primary" value="Submit">
<a href="index.asp" class="btn btn-secondary ml-2">Cancel</a>
</form>
</div>
</div>
</div>
</div>
</body>
</html>
<?php
// 包含配置文件
require_once "config.asp";
// 定义变量并用空值初始化
$name = $address = $salary = "";
$name_err = $address_err = $salary_err = "";
// 提交表单时处理表单数据
if($_SERVER["REQUEST_METHOD"] == "POST"){
// 验证名称
$input_name = trim($_POST["name"]);
if(empty($input_name)){
$name_err = "Please enter a name.";
} elseif(!filter_var($input_name, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z\s]+$/")))){
$name_err = "Please enter a valid name.";
} else{
$name = $input_name;
}
// 验证地址
$input_address = trim($_POST["address"]);
if(empty($input_address)){
$address_err = "Please enter an address.";
} else{
$address = $input_address;
}
// 验证 salary
$input_salary = trim($_POST["salary"]);
if(empty($input_salary)){
$salary_err = "Please enter the salary amount.";
} elseif(!ctype_digit($input_salary)){
$salary_err = "Please enter a positive integer value.";
} else{
$salary = $input_salary;
}
// 在插入数据库之前检查输入错误
if(empty($name_err) && empty($address_err) && empty($salary_err)){
// 准备一个插入语句
$sql = "INSERT INTO employees (name, address, salary) VALUES (:name, :address, :salary)";
if($stmt = $pdo->prepare($sql)){
// 将变量作为参数绑定到准备好的语句
$stmt->bindParam(":name", $param_name);
$stmt->bindParam(":address", $param_address);
$stmt->bindParam(":salary", $param_salary);
// 设置参数
$param_name = $name;
$param_address = $address;
$param_salary = $salary;
// 尝试执行准备好的语句
if($stmt->execute()){
// 记录创建成功。 重定向到登陆页面
header("location: index.asp");
exit();
} else{
echo "Oops! Something went wrong. Please try again later.";
}
}
// 关闭语句
unset($stmt);
}
// 关闭连接
unset($pdo);
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Create Record</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<style>
.wrapper{
width: 600px;
margin: 0 auto;
}
</style>
</head>
<body>
<div class="wrapper">
<div class="container-fluid">
<div class="row">
<div class="col-md-12">
<h2 class="mt-5">Create Record</h2>
<p>Please fill this form and submit to add employee record to the database.</p>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
<div class="form-group">
<label>Name</label>
<input type="text" name="name" class="form-control <?php echo (!empty($name_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $name; ?>">
<span class="invalid-feedback"><?php echo $name_err;?></span>
</div>
<div class="form-group">
<label>Address</label>
<textarea name="address" class="form-control <?php echo (!empty($address_err)) ? 'is-invalid' : ''; ?>"><?php echo $address; ?></textarea>
<span class="invalid-feedback"><?php echo $address_err;?></span>
</div>
<div class="form-group">
<label>Salary</label>
<input type="text" name="salary" class="form-control <?php echo (!empty($salary_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $salary; ?>">
<span class="invalid-feedback"><?php echo $salary_err;?></span>
</div>
<input type="submit" class="btn btn-primary" value="Submit">
<a href="index.asp" class="btn btn-secondary ml-2">Cancel</a>
</form>
</div>
</div>
</div>
</div>
</body>
</html>
同一个"create.php"文件将显示 HTML 表单并处理提交的表单数据。 它还将在保存数据之前对用户输入(第 11 行到第 37 行)执行基本验证。
创建阅读页面
现在是时候构建我们的 CRUD 应用程序的 R Read 读取功能了。
让我们创建一个名为"read.php"的文件并将以下代码放入其中。 它只会根据员工的 id 属性从 employees 表中检索记录。
示例
Procedural
Object Oriented
PDO
Download
<?php
// 在进一步处理之前检查 id 参数是否存在
if(isset($_GET["id"]) && !empty(trim($_GET["id"]))){
// 包含配置文件
require_once "config.asp";
// 准备一个选择语句
$sql = "SELECT * FROM employees WHERE id = ?";
if($stmt = mysqli_prepare($link, $sql)){
// 将变量作为参数绑定到准备好的语句
mysqli_stmt_bind_param($stmt, "i", $param_id);
// 设置参数
$param_id = trim($_GET["id"]);
// 尝试执行准备好的语句
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.asp");
exit();
}
} else{
echo "Oops! Something went wrong. Please try again later.";
}
}
// 关闭语句
mysqli_stmt_close($stmt);
// 关闭连接
mysqli_close($link);
} else{
// URL 不包含 id 参数。 重定向到错误页面
header("location: error.asp");
exit();
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>View Record</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<style>
.wrapper{
width: 600px;
margin: 0 auto;
}
</style>
</head>
<body>
<div class="wrapper">
<div class="container-fluid">
<div class="row">
<div class="col-md-12">
<h1 class="mt-5 mb-3">View Record</h1>
<div class="form-group">
<label>Name</label>
<p><b><?php echo $row["name"]; ?></b></p>
</div>
<div class="form-group">
<label>Address</label>
<p><b><?php echo $row["address"]; ?></b></p>
</div>
<div class="form-group">
<label>Salary</label>
<p><b><?php echo $row["salary"]; ?></b></p>
</div>
<p><a href="index.asp" class="btn btn-primary">Back</a></p>
</div>
</div>
</div>
</div>
</body>
</html>
<?php
// 在进一步处理之前检查 id 参数是否存在
if(isset($_GET["id"]) && !empty(trim($_GET["id"]))){
// 包含配置文件
require_once "config.asp";
// 准备一个选择语句
$sql = "SELECT * FROM employees WHERE id = ?";
if($stmt = $mysqli->prepare($sql)){
// 将变量作为参数绑定到准备好的语句
$stmt->bind_param("i", $param_id);
// 设置参数
$param_id = trim($_GET["id"]);
// 尝试执行准备好的语句
if($stmt->execute()){
$result = $stmt->get_result();
if($result->num_rows == 1){
/* 获取结果行作为关联数组。 由于结果集
只包含一行,我们不需要使用while循环*/
$row = $result->fetch_array(MYSQLI_ASSOC);
// 检索单个字段值
$name = $row["name"];
$address = $row["address"];
$salary = $row["salary"];
} else{
// URL 不包含有效的 id 参数。 重定向到错误页面
header("location: error.asp");
exit();
}
} else{
echo "Oops! Something went wrong. Please try again later.";
}
}
// 关闭语句
$stmt->close();
// 关闭连接
$mysqli->close();
} else{
// URL 不包含 id 参数。 重定向到错误页面
header("location: error.asp");
exit();
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>View Record</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<style>
.wrapper{
width: 600px;
margin: 0 auto;
}
</style>
</head>
<body>
<div class="wrapper">
<div class="container-fluid">
<div class="row">
<div class="col-md-12">
<h1 class="mt-5 mb-3">View Record</h1>
<div class="form-group">
<label>Name</label>
<p><b><?php echo $row["name"]; ?></b></p>
</div>
<div class="form-group">
<label>Address</label>
<p><b><?php echo $row["address"]; ?></b></p>
</div>
<div class="form-group">
<label>Salary</label>
<p><b><?php echo $row["salary"]; ?></b></p>
</div>
<p><a href="index.asp" class="btn btn-primary">Back</a></p>
</div>
</div>
</div>
</div>
</body>
</html>
<?php
// 在进一步处理之前检查 id 参数是否存在
if(isset($_GET["id"]) && !empty(trim($_GET["id"]))){
// 包含配置文件
require_once "config.asp";
// 准备一个选择语句
$sql = "SELECT * FROM employees WHERE id = :id";
if($stmt = $pdo->prepare($sql)){
// 将变量作为参数绑定到准备好的语句
$stmt->bindParam(":id", $param_id);
// 设置参数
$param_id = trim($_GET["id"]);
// 尝试执行准备好的语句
if($stmt->execute()){
if($stmt->rowCount() == 1){
/* 获取结果行作为关联数组。 由于结果集
只包含一行,我们不需要使用while循环*/
$row = $stmt->fetch(PDO::FETCH_ASSOC);
// 检索单个字段值
$name = $row["name"];
$address = $row["address"];
$salary = $row["salary"];
} else{
// URL 不包含有效的 id 参数。 重定向到错误页面
header("location: error.asp");
exit();
}
} else{
echo "Oops! Something went wrong. Please try again later.";
}
}
// 关闭语句
unset($stmt);
// 关闭连接
unset($pdo);
} else{
// URL 不包含 id 参数。 重定向到错误页面
header("location: error.asp");
exit();
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>View Record</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<style>
.wrapper{
width: 600px;
margin: 0 auto;
}
</style>
</head>
<body>
<div class="wrapper">
<div class="container-fluid">
<div class="row">
<div class="col-md-12">
<h1 class="mt-5 mb-3">View Record</h1>
<div class="form-group">
<label>Name</label>
<p><b><?php echo $row["name"]; ?></b></p>
</div>
<div class="form-group">
<label>Address</label>
<p><b><?php echo $row["address"]; ?></b></p>
</div>
<div class="form-group">
<label>Salary</label>
<p><b><?php echo $row["salary"]; ?></b></p>
</div>
<p><a href="index.asp" class="btn btn-primary">Back</a></p>
</div>
</div>
</div>
</div>
</body>
</html>
创建更新页面
同样,我们可以构建 CRUD 应用程序的 Update 更新功能。
让我们创建一个名为"update.php"的文件并将以下代码放入其中。 它将根据员工的 id 属性更新 employees 表中的现有记录。
示例
Procedural
Object Oriented
PDO
Download
<?php
// 包含配置文件
require_once "config.asp";
// 定义变量并用空值初始化
$name = $address = $salary = "";
$name_err = $address_err = $salary_err = "";
// 提交表单时处理表单数据
if(isset($_POST["id"]) && !empty($_POST["id"])){
// 获取隐藏的输入值
$id = $_POST["id"];
// 验证名称
$input_name = trim($_POST["name"]);
if(empty($input_name)){
$name_err = "Please enter a name.";
} elseif(!filter_var($input_name, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z\s]+$/")))){
$name_err = "Please enter a valid name.";
} else{
$name = $input_name;
}
// 验证 address 地址
$input_address = trim($_POST["address"]);
if(empty($input_address)){
$address_err = "Please enter an address.";
} else{
$address = $input_address;
}
// 验证 salary
$input_salary = trim($_POST["salary"]);
if(empty($input_salary)){
$salary_err = "Please enter the salary amount.";
} elseif(!ctype_digit($input_salary)){
$salary_err = "Please enter a positive integer value.";
} else{
$salary = $input_salary;
}
// 在插入数据库之前检查输入错误
if(empty($name_err) && empty($address_err) && empty($salary_err)){
// 准备更新语句
$sql = "UPDATE employees SET name=?, address=?, salary=? WHERE id=?";
if($stmt = mysqli_prepare($link, $sql)){
// 将变量作为参数绑定到准备好的语句
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;
// 尝试执行准备好的语句
if(mysqli_stmt_execute($stmt)){
// 记录更新成功。 重定向到登陆页面
header("location: index.asp");
exit();
} else{
echo "Oops! Something went wrong. Please try again later.";
}
}
// 关闭语句
mysqli_stmt_close($stmt);
}
// 关闭连接
mysqli_close($link);
} else{
// 在进一步处理之前检查 id 参数是否存在
if(isset($_GET["id"]) && !empty(trim($_GET["id"]))){
// Get URL parameter
$id = trim($_GET["id"]);
// 准备一个选择语句
$sql = "SELECT * FROM employees WHERE id = ?";
if($stmt = mysqli_prepare($link, $sql)){
// 将变量作为参数绑定到准备好的语句
mysqli_stmt_bind_param($stmt, "i", $param_id);
// 设置参数
$param_id = $id;
// 尝试执行准备好的语句
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.asp");
exit();
}
} else{
echo "Oops! Something went wrong. Please try again later.";
}
}
// 关闭语句
mysqli_stmt_close($stmt);
// 关闭连接
mysqli_close($link);
} else{
// URL 不包含 id 参数。 重定向到错误页面
header("location: error.asp");
exit();
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Update Record</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<style>
.wrapper{
width: 600px;
margin: 0 auto;
}
</style>
</head>
<body>
<div class="wrapper">
<div class="container-fluid">
<div class="row">
<div class="col-md-12">
<h2 class="mt-5">Update Record</h2>
<p>Please edit the input values and submit to update the employee record.</p>
<form action="<?php echo htmlspecialchars(basename($_SERVER['REQUEST_URI'])); ?>" method="post">
<div class="form-group">
<label>Name</label>
<input type="text" name="name" class="form-control <?php echo (!empty($name_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $name; ?>">
<span class="invalid-feedback"><?php echo $name_err;?></span>
</div>
<div class="form-group">
<label>Address</label>
<textarea name="address" class="form-control <?php echo (!empty($address_err)) ? 'is-invalid' : ''; ?>"><?php echo $address; ?></textarea>
<span class="invalid-feedback"><?php echo $address_err;?></span>
</div>
<div class="form-group">
<label>Salary</label>
<input type="text" name="salary" class="form-control <?php echo (!empty($salary_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $salary; ?>">
<span class="invalid-feedback"><?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.asp" class="btn btn-secondary ml-2">Cancel</a>
</form>
</div>
</div>
</div>
</div>
</body>
</html>
<?php
// 包含配置文件
require_once "config.asp";
// 定义变量并用空值初始化
$name = $address = $salary = "";
$name_err = $address_err = $salary_err = "";
// 提交表单时处理表单数据
if(isset($_POST["id"]) && !empty($_POST["id"])){
// 获取隐藏的输入值
$id = $_POST["id"];
// 验证名称
$input_name = trim($_POST["name"]);
if(empty($input_name)){
$name_err = "Please enter a name.";
} elseif(!filter_var($input_name, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z\s]+$/")))){
$name_err = "Please enter a valid name.";
} else{
$name = $input_name;
}
// 验证地址 address
$input_address = trim($_POST["address"]);
if(empty($input_address)){
$address_err = "Please enter an address.";
} else{
$address = $input_address;
}
// 验证 salary
$input_salary = trim($_POST["salary"]);
if(empty($input_salary)){
$salary_err = "Please enter the salary amount.";
} elseif(!ctype_digit($input_salary)){
$salary_err = "Please enter a positive integer value.";
} else{
$salary = $input_salary;
}
// 在插入数据库之前检查输入错误
if(empty($name_err) && empty($address_err) && empty($salary_err)){
// 准备更新语句
$sql = "UPDATE employees SET name=?, address=?, salary=? WHERE id=?";
if($stmt = $mysqli->prepare($sql)){
// 将变量作为参数绑定到准备好的语句
$stmt->bind_param("sssi", $param_name, $param_address, $param_salary, $param_id);
// 设置参数
$param_name = $name;
$param_address = $address;
$param_salary = $salary;
$param_id = $id;
// 尝试执行准备好的语句
if($stmt->execute()){
// 记录更新成功。 重定向到登陆页面
header("location: index.asp");
exit();
} else{
echo "Oops! Something went wrong. Please try again later.";
}
}
// 关闭语句
$stmt->close();
}
// 关闭连接
$mysqli->close();
} else{
// 在进一步处理之前检查 id 参数是否存在
if(isset($_GET["id"]) && !empty(trim($_GET["id"]))){
// Get URL parameter
$id = trim($_GET["id"]);
// 准备一个选择语句
$sql = "SELECT * FROM employees WHERE id = ?";
if($stmt = $mysqli->prepare($sql)){
// 将变量作为参数绑定到准备好的语句
$stmt->bind_param("i", $param_id);
// 设置参数
$param_id = $id;
// 尝试执行准备好的语句
if($stmt->execute()){
$result = $stmt->get_result();
if($result->num_rows == 1){
/* 获取结果行作为关联数组。 由于结果集
只包含一行,我们不需要使用while循环*/
$row = $result->fetch_array(MYSQLI_ASSOC);
// 检索单个字段值
$name = $row["name"];
$address = $row["address"];
$salary = $row["salary"];
} else{
// URL 不包含有效的 id。 重定向到错误页面
header("location: error.asp");
exit();
}
} else{
echo "Oops! Something went wrong. Please try again later.";
}
}
// 关闭语句
$stmt->close();
// 关闭连接
$mysqli->close();
} else{
// URL 不包含 id 参数。 重定向到错误页面
header("location: error.asp");
exit();
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Update Record</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<style>
.wrapper{
width: 600px;
margin: 0 auto;
}
</style>
</head>
<body>
<div class="wrapper">
<div class="container-fluid">
<div class="row">
<div class="col-md-12">
<h2 class="mt-5">Update Record</h2>
<p>Please edit the input values and submit to update the employee record.</p>
<form action="<?php echo htmlspecialchars(basename($_SERVER['REQUEST_URI'])); ?>" method="post">
<div class="form-group">
<label>Name</label>
<input type="text" name="name" class="form-control <?php echo (!empty($name_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $name; ?>">
<span class="invalid-feedback"><?php echo $name_err;?></span>
</div>
<div class="form-group">
<label>Address</label>
<textarea name="address" class="form-control <?php echo (!empty($address_err)) ? 'is-invalid' : ''; ?>"><?php echo $address; ?></textarea>
<span class="invalid-feedback"><?php echo $address_err;?></span>
</div>
<div class="form-group">
<label>Salary</label>
<input type="text" name="salary" class="form-control <?php echo (!empty($salary_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $salary; ?>">
<span class="invalid-feedback"><?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.asp" class="btn btn-secondary ml-2">Cancel</a>
</form>
</div>
</div>
</div>
</div>
</body>
</html>
<?php
// 包含配置文件
require_once "config.asp";
// 定义变量并用空值初始化
$name = $address = $salary = "";
$name_err = $address_err = $salary_err = "";
// 提交表单时处理表单数据
if(isset($_POST["id"]) && !empty($_POST["id"])){
// 获取隐藏的输入值
$id = $_POST["id"];
// 验证名称
$input_name = trim($_POST["name"]);
if(empty($input_name)){
$name_err = "Please enter a name.";
} elseif(!filter_var($input_name, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z\s]+$/")))){
$name_err = "Please enter a valid name.";
} else{
$name = $input_name;
}
// 验证地址 address
$input_address = trim($_POST["address"]);
if(empty($input_address)){
$address_err = "Please enter an address.";
} else{
$address = $input_address;
}
// 验证 salary
$input_salary = trim($_POST["salary"]);
if(empty($input_salary)){
$salary_err = "Please enter the salary amount.";
} elseif(!ctype_digit($input_salary)){
$salary_err = "Please enter a positive integer value.";
} else{
$salary = $input_salary;
}
// 在插入数据库之前检查输入错误
if(empty($name_err) && empty($address_err) && empty($salary_err)){
// 准备更新语句
$sql = "UPDATE employees SET name=:name, address=:address, salary=:salary WHERE id=:id";
if($stmt = $pdo->prepare($sql)){
// 将变量作为参数绑定到准备好的语句
$stmt->bindParam(":name", $param_name);
$stmt->bindParam(":address", $param_address);
$stmt->bindParam(":salary", $param_salary);
$stmt->bindParam(":id", $param_id);
// 设置参数
$param_name = $name;
$param_address = $address;
$param_salary = $salary;
$param_id = $id;
// 尝试执行准备好的语句
if($stmt->execute()){
// 记录更新成功。 重定向到登陆页面
header("location: index.asp");
exit();
} else{
echo "Oops! Something went wrong. Please try again later.";
}
}
// 关闭语句
unset($stmt);
}
// 关闭连接
unset($pdo);
} else{
// 在进一步处理之前检查 id 参数是否存在
if(isset($_GET["id"]) && !empty(trim($_GET["id"]))){
// Get URL parameter
$id = trim($_GET["id"]);
// 准备一个选择语句
$sql = "SELECT * FROM employees WHERE id = :id";
if($stmt = $pdo->prepare($sql)){
// 将变量作为参数绑定到准备好的语句
$stmt->bindParam(":id", $param_id);
// 设置参数
$param_id = $id;
// 尝试执行准备好的语句
if($stmt->execute()){
if($stmt->rowCount() == 1){
/* 获取结果行作为关联数组。 由于结果集
只包含一行,我们不需要使用while循环*/
$row = $stmt->fetch(PDO::FETCH_ASSOC);
// 检索单个字段值
$name = $row["name"];
$address = $row["address"];
$salary = $row["salary"];
} else{
// URL 不包含有效的 id。 重定向到错误页面
header("location: error.asp");
exit();
}
} else{
echo "Oops! Something went wrong. Please try again later.";
}
}
// 关闭语句
unset($stmt);
// 关闭连接
unset($pdo);
} else{
// URL 不包含 id 参数。 重定向到错误页面
header("location: error.asp");
exit();
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Update Record</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<style>
.wrapper{
width: 600px;
margin: 0 auto;
}
</style>
</head>
<body>
<div class="wrapper">
<div class="container-fluid">
<div class="row">
<div class="col-md-12">
<h2 class="mt-5">Update Record</h2>
<p>Please edit the input values and submit to update the employee record.</p>
<form action="<?php echo htmlspecialchars(basename($_SERVER['REQUEST_URI'])); ?>" method="post">
<div class="form-group">
<label>Name</label>
<input type="text" name="name" class="form-control <?php echo (!empty($name_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $name; ?>">
<span class="invalid-feedback"><?php echo $name_err;?></span>
</div>
<div class="form-group">
<label>Address</label>
<textarea name="address" class="form-control <?php echo (!empty($address_err)) ? 'is-invalid' : ''; ?>"><?php echo $address; ?></textarea>
<span class="invalid-feedback"><?php echo $address_err;?></span>
</div>
<div class="form-group">
<label>Salary</label>
<input type="text" name="salary" class="form-control <?php echo (!empty($salary_err)) ? 'is-invalid' : ''; ?>" value="<?php echo $salary; ?>">
<span class="invalid-feedback"><?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.asp" class="btn btn-secondary ml-2">Cancel</a>
</form>
</div>
</div>
</div>
</div>
</body>
</html>
创建删除页面
最后,我们将构建 CRUD 应用程序的 Delete 删除功能。
让我们创建一个名为"delete.php"的文件并将以下代码放入其中。 它将根据员工的 id 属性从 employees 表中删除现有记录。
示例
Procedural
Object Oriented
PDO
Download
<?php
// 确认后处理删除操作
if(isset($_POST["id"]) && !empty($_POST["id"])){
// 包含配置文件
require_once "config.asp";
// 准备删除语句
$sql = "DELETE FROM employees WHERE id = ?";
if($stmt = mysqli_prepare($link, $sql)){
// 将变量作为参数绑定到准备好的语句
mysqli_stmt_bind_param($stmt, "i", $param_id);
// 设置参数
$param_id = trim($_POST["id"]);
// 尝试执行准备好的语句
if(mysqli_stmt_execute($stmt)){
// 记录删除成功。 重定向到登陆页面
header("location: index.asp");
exit();
} else{
echo "Oops! Something went wrong. Please try again later.";
}
}
// 关闭语句
mysqli_stmt_close($stmt);
// 关闭连接
mysqli_close($link);
} else{
// 检查id参数是否存在
if(empty(trim($_GET["id"]))){
// URL 不包含 id 参数。 重定向到错误页面
header("location: error.asp");
exit();
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Delete Record</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<style>
.wrapper{
width: 600px;
margin: 0 auto;
}
</style>
</head>
<body>
<div class="wrapper">
<div class="container-fluid">
<div class="row">
<div class="col-md-12">
<h2 class="mt-5 mb-3">Delete Record</h2>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
<div class="alert alert-danger">
<input type="hidden" name="id" value="<?php echo trim($_GET["id"]); ?>"/>
<p>Are you sure you want to delete this employee record?</p>
<p>
<input type="submit" value="Yes" class="btn btn-danger">
<a href="index.asp" class="btn btn-secondary">No</a>
</p>
</div>
</form>
</div>
</div>
</div>
</div>
</body>
</html>
<?php
// 确认后处理删除操作
if(isset($_POST["id"]) && !empty($_POST["id"])){
// 包含配置文件
require_once "config.asp";
// 准备删除语句
$sql = "DELETE FROM employees WHERE id = ?";
if($stmt = $mysqli->prepare($sql)){
// 将变量作为参数绑定到准备好的语句
$stmt->bind_param("i", $param_id);
// 设置参数
$param_id = trim($_POST["id"]);
// 尝试执行准备好的语句
if($stmt->execute()){
// 记录删除成功。 重定向到登陆页面
header("location: index.asp");
exit();
} else{
echo "Oops! Something went wrong. Please try again later.";
}
}
// 关闭语句
$stmt->close();
// 关闭连接
$mysqli->close();
} else{
// 检查id参数是否存在
if(empty(trim($_GET["id"]))){
// URL 不包含 id 参数。 重定向到错误页面
header("location: error.asp");
exit();
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Delete Record</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<style>
.wrapper{
width: 600px;
margin: 0 auto;
}
</style>
</head>
<body>
<div class="wrapper">
<div class="container-fluid">
<div class="row">
<div class="col-md-12">
<h2 class="mt-5 mb-3">Delete Record</h2>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
<div class="alert alert-danger">
<input type="hidden" name="id" value="<?php echo trim($_GET["id"]); ?>"/>
<p>Are you sure you want to delete this employee record?</p>
<p>
<input type="submit" value="Yes" class="btn btn-danger">
<a href="index.asp" class="btn btn-secondary ml-2">No</a>
</p>
</div>
</form>
</div>
</div>
</div>
</div>
</body>
</html>
<?php
// 确认后处理删除操作
if(isset($_POST["id"]) && !empty($_POST["id"])){
// 包含配置文件
require_once "config.asp";
// 准备删除语句
$sql = "DELETE FROM employees WHERE id = :id";
if($stmt = $pdo->prepare($sql)){
// 将变量作为参数绑定到准备好的语句
$stmt->bindParam(":id", $param_id);
// 设置参数
$param_id = trim($_POST["id"]);
// 尝试执行准备好的语句
if($stmt->execute()){
// 记录删除成功。 重定向到登陆页面
header("location: index.asp");
exit();
} else{
echo "Oops! Something went wrong. Please try again later.";
}
}
// 关闭语句
unset($stmt);
// 关闭连接
unset($pdo);
} else{
// 检查id参数是否存在
if(empty(trim($_GET["id"]))){
// URL 不包含 id 参数。 重定向到错误页面
header("location: error.asp");
exit();
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Delete Record</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<style>
.wrapper{
width: 600px;
margin: 0 auto;
}
</style>
</head>
<body>
<div class="wrapper">
<div class="container-fluid">
<div class="row">
<div class="col-md-12">
<h2 class="mt-5 mb-3">Delete Record</h2>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
<div class="alert alert-danger">
<input type="hidden" name="id" value="<?php echo trim($_GET["id"]); ?>"/>
<p>Are you sure you want to delete this employee record?</p>
<p>
<input type="submit" value="Yes" class="btn btn-danger">
<a href="index.asp" class="btn btn-secondary ml-2">No</a>
</p>
</div>
</form>
</div>
</div>
</div>
</div>
</body>
</html>
创建错误页面
最后,让我们再创建一个文件"error.php"。 如果请求无效,即 URL 查询字符串中缺少 id 参数或它无效,则将显示此页面。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Error</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<style>
.wrapper{
width: 600px;
margin: 0 auto;
}
</style>
</head>
<body>
<div class="wrapper">
<div class="container-fluid">
<div class="row">
<div class="col-md-12">
<h2 class="mt-5 mb-3">Invalid Request</h2>
<div class="alert alert-danger">Sorry, you've made an invalid request. Please <a href="index.asp" class="alert-link">go back</a> and try again.</div>
</div>
</div>
</div>
</div>
</body>
</html>
经过漫长的旅程,我们终于用 PHP 和 MySQL 完成了我们的 CRUD 应用程序。 我们建议您从一开始就查看 PHP & MySQL数据库教程部分(如果您尚未了解),以便更好地理解本教程的每个部分。