English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Neste tutorial, você aprenderá como usar PHP e MySQL para construir aplicativos CRUD.
CRUD éC reate,R ead,U pdate eD elete é o acrônimo inicial. As operações CRUD são operações básicas de dados do banco de dados. Nos capítulos anteriores, já aprendemos como executar operações de criação (ou seja, inserção), leitura (ou seja, seleção), atualização e exclusão. Neste tutorial, criaremos um simples aplicativo PHP para executar todas essas operações em uma tabela do banco de dados MySQL.
Ok, vamos começar com a criação da tabela, que usaremos em todos os exemplos.
Execute a seguinte consulta SQL para criar um banco de dados chamadoemployeeda tabela 's. Usaremos essa tabela em todas as operações futuras.
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()函数将此配置文件包含在其他页面中。
<?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("错误:无法连接。 " 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">Detalhes de Funcionários</h2">
<a href="create.php" class="btn btn-success pull-right">Adicionar Novo Funcionário</a>
</div>
<?php
//Incluir arquivo de configuração
require_once "config.php";
//Tentativa de executar consulta de seleção
$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.php?id=%. $row['id'] ."' title='View Record' data-toggle='tooltip'>
ememployeesApós preencher a tabela com alguns registros, a página de login ou grid de dados CRUD pode parecer como na figura a seguir:
Dica:Usamos o framework Bootstrap para criar rapidamente e elegantemente o layout do aplicativo CRUD. Bootstrap é o framework frontal mais popular e poderoso, usado para desenvolver mais rapidamente e de forma mais fácil a web.
Nesta seção, construiremos a página de criação do aplicativo CRUD.C função de criação.
Vamos criar um arquivo chamado "create.php" e inserir o seguinte código nele. Ele gerará um formulário web que pode ser usado paraemployeeInserindo registro na tabela.
<?php //Incluir o arquivo de configuração require_once "config.php"; //Definir variáveis e inicializá-las com valores vazios $name = $address = $salary = \ $name_err = $address_err = $salary_err = \ //Tratar dados do formulário ao submeter o formulário if($_SERVER["REQUEST_METHOD"] == "POST"){ // Validar nome $input_name = trim($_POST["name"]); if(empty($input_name)){ $name_err = "Por favor, insira um nome."; Se (!filter_var($input_name, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z\s]+$/")))){ $name_err = "Por favor, insira um nome válido."; } else{ $name = $input_name; } //Verificando endereço $input_address = trim($_POST["address"]); if(empty($input_address)){ $address_err = "Please enter an address."; } else{ $address = $input_address; } //验证薪水 $input_salary = trim($_POST["salary"]); if(empty($input_salary)){ $salary_err = "Por favor, insira o valor do salário."; } elseif(!ctype_digit($input_salary)){ $salary_err = "Por favor, insira um número inteiro positivo."; } else{ $salary = $input_salary; } //Verificando erros de entrada antes de inserir no banco de dados if(empty($name_err) && empty($address_err) && empty($salary_err)){ //Preparando declaração INSERT $sql = "INSERT INTO employees (name, address, salary) VALUES (?, ?, ?)"; if($stmt = mysqli_prepare($link, $sql)){ //Vincular uma variável como parâmetro à declaração preparada mysqli_stmt_bind_param($stmt, "sss", $param_name, $param_address, $param_salary); // Definir parâmetros $param_name = $name; $param_address = $address; $param_salary = $salary; // Tentativa de executar a declaração preparada if(mysqli_stmt_execute($stmt)){ //O registro foi criado com sucesso. Redirecionando para a página de login header("location: index.php"); exit(); } else{ Algo deu errado. Por favor, tente novamente mais tarde.; } } // Fechar declaração mysqli_stmt_close($stmt); } //Fechar conexão 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>Criar registro</h2"> </div> <p>Por favor, preencha este formulário e submeta para adicionar um registro de funcionário ao banco de dados.</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>Endereço</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>Salário</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">Cancelar</a> </form> </div> </div> </div> </div> </html>
O mesmo arquivo "create.php" mostrará o formulário HTML e processará os dados do formulário submetidos. Antes de salvar os dados, ele também executará validações básicas de entrada do usuário.
Agora é hora de construir a parte de leitura do CRUD aplicação.R função de leitura CRUD.
Vamos criar um arquivo chamado "read.php" e inserir o seguinte código nele. Ele será baseado emFuncionárioatualizar o atributo id da tabela employees para检索记录。
<?php // 在进一步处理之前检查id参数是否存在 if(isset($_GET["id"]) && !empty(trim($_GET["id"]))){ //Incluir arquivo de configuração require_once "config.php"; //SELECT statement $sql = "SELECT * FROM employees WHERE id = ?"; if($stmt = mysqli_prepare($link, $sql)){ //Vincular uma variável como parâmetro à declaração preparada mysqli_stmt_bind_param($stmt, "i", $param_id); //Definir parâmetro $param_id = trim($_GET["id"]); //Tente executar a instrução preparada if(mysqli_stmt_execute($stmt)){ $result = mysqli_stmt_get_result($stmt); if(mysqli_num_rows($result) == 1){ /* Extrair linha de resultado como array associativo. Como o conjunto de resultados contém apenas uma linha, não precisamos usar loop while*/ $row = mysqli_fetch_array($result, MYSQLI_ASSOC); //Procurar valor de campo único $name = $row["name"]; $address = $row["address"]; $salary = $row["salary"]; } else{ //A URL não contém um parâmetro de id válido. Redirecionar para a página de erro header("location: error.php"); exit(); } } else{ echo "Uau! Algo deu errado. Tente novamente mais tarde."; } } // Fechar declaração mysqli_stmt_close($stmt); //Fechar conexão mysqli_close($link); } else{ //A URL não contém o parâmetro id. Redirecionando para a página de erro header("location: error.php"); exit(); } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Ver Registro</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>Ver registro</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>Endereço</label> <p class="form-control-static"><?php echo $row["address"]; ?></p> </div> <div class="form-group"> <label>Salário</label> <p class="form-control-static"><?php echo $row["salary"]; ?></p> </div> <p><a href="index.php" class="btn btn-primary">Voltar</a></p> </div> </div> </div> </div> </html>
Da mesma forma, podemos criar a função de atualização CRUD da nossa aplicação.
Vamos criar um arquivo chamado "update.php" e inserir o seguinte código nele. Ele será baseado emFuncionárioatualizar o atributo idFuncionárioregistros existentes na tabela.
<?php //Incluir arquivo de configuração require_once "config.php"; //Definir variáveis e inicializá-las com valores vazios $name = $address = $salary = \ $name_err = $address_err = $salary_err = \ //Tratar dados do formulário ao submeter o formulário if(isset($_POST["id"]) && !empty($_POST["id"])){ // Obter valor de entrada oculta $id = $_POST["id"]; // Validar nome $input_name = trim($_POST["name"]); if(empty($input_name)){ $name_err = "Por favor, insira um nome."; Se (!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; } // Validate address address $input_address = trim($_POST["address"]); if(empty($input_address)){ $address_err = "Please enter an address."; } else{ $address = $input_address; } //验证薪水 $input_salary = trim($_POST["salary"]); if(empty($input_salary)){ $salary_err = "请输入薪水金额。"; } elseif(!ctype_digit($input_salary)){ $salary_err = "请输入一个正整数值。"; } else{ $salary = $input_salary; } //在插入数据库之前检查输入错误 if(empty($name_err) && empty($address_err) && empty($salary_err)){ //UPDATE语句 $sql = "UPDATE employees SET name=?, address=?, salary=? WHERE id=?"; if($stmt = mysqli_prepare($link, $sql)){ //Vincular uma variável como parâmetro à declaração preparada mysqli_stmt_bind_param($stmt, "sssi", $param_name, $param_address, $param_salary, $param_id); //Definir parâmetro $param_name = $name; $param_address = $address; $param_salary = $salary; $param_id = $id; //Tentando executar a declaração preparada if(mysqli_stmt_execute($stmt)){ //记录更新成功。 重定向至登录页面 header("location: index.php"); exit(); } else{ echo "出了点问题。 请稍后再试。"; } } // Fechar declaração mysqli_stmt_close($stmt); } //Fechar conexão mysqli_close($link); } else{ //在进一步处理之前检查id参数是否存在 if(isset($_GET["id"]) && !empty(trim($_GET["id"]))){ //获取URL参数 $id = trim($_GET["id"]); //select语句 $sql = "SELECT * FROM employees WHERE id = ?"; if($stmt = mysqli_prepare($link, $sql)){ //Vincular uma variável como parâmetro à declaração preparada mysqli_stmt_bind_param($stmt, "i", $param_id); //Definir parâmetro $param_id = $id; //Tentando executar a declaração preparada if(mysqli_stmt_execute($stmt)){ $result = mysqli_stmt_get_result($stmt); if(mysqli_num_rows($result) == 1){ /* Extrair linha de resultado como array associativo. Como o conjunto de resultados contém apenas uma linha, não precisamos usar loop while */ $row = mysqli_fetch_array($result, MYSQLI_ASSOC); //Procurar valor de campo único $name = $row["name"]; $address = $row["address"]; $salary = $row["salary"]; } else{ //A URL não contém um ID válido. Redirecionar para a página de erro header("location: error.php"); exit(); } } else{ echo "Uau! Algo deu errado. Tente novamente mais tarde."; } } // Fechar declaração mysqli_stmt_close($stmt); //Fechar conexão mysqli_close($link); } else{ //A URL não contém o parâmetro id. Redirecionando para a página de erro 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>Atualizar registro</h2"> </div> <p>Por favor, edite o valor de entrada e submeta para atualizar o registro.</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>Endereço</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>Salário</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">Cancelar</a> </form> </div> </div> </div> </div> </html>
Por fim, construiremosdnossa função de exclusão CRUD.
Vamos criar um arquivo chamado "delete.php" e inserir o seguinte código nele. Ele será baseado noFuncionárioO atributo id deFuncionárioExcluir o registro existente na tabela.
<?php //Realizar a operação de exclusão após a confirmação if(isset($_POST["id"]) && !empty($_POST["id"])){ //Incluir o arquivo de configuração require_once "config.php"; //Instrução DELETE $sql = "DELETE FROM employees WHERE id = ?"; if($stmt = mysqli_prepare($link, $sql)){ //Vincular uma variável como parâmetro à declaração preparada mysqli_stmt_bind_param($stmt, "i", $param_id); // Definir parâmetros $param_id = trim($_POST["id"]); //Tentando executar a declaração preparada if(mysqli_stmt_execute($stmt)){ //Registro deletado com sucesso. Redirecionando para a página de login header("location: index.php"); exit(); } else{ echo "Uau! Algo deu errado. Tente novamente mais tarde."; } } // Fechar declaração mysqli_stmt_close($stmt); //Fechar conexão mysqli_close($link); } else{ //Verificar se o parâmetro id existe if(empty(trim($_GET["id"]))){ //A URL não contém o parâmetro id. Redirecionando para a página de erro 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>Você tem certeza de que deseja excluir este registro?</p><br> <p> <input type="submit" value="Sim" class="btn btn-danger"> <a href="index.php" class="btn btn-default">Não</a> </p> </div> </form>
Por fim, vamos criar um arquivo "error.php". Se a solicitação for inválida, ou seja, se o parâmetro id está ausente na string de consulta da URL ou é inválido, esta página será exibida.
<h1>Solicitação inválida</h1"> <div class="alert alert-danger fade in"> <p>Desculpe, a solicitação que você enviou não é válida. Por favor, <a href="index.php" class="alert-link">Voltar</a> Tente novamente.</p> </div>
Após uma longa jornada, finalmente completamos a aplicação CRUD usando PHP e MySQL.