English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial PHP Básico

Tutorial PHP Avançado

PHP & MySQL

Manual de Referência PHP

PHP MySQL Adição, Exclusão, Atualização e Consulta (CRUD)

Neste tutorial, você aprenderá como usar PHP e MySQL para construir aplicativos CRUD.

O que é 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.

Criar tabela de banco de dados

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()函数将此配置文件包含在其他页面中。

Exemplo online

<?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”的文件,并将以下代码放入其中:

Exemplo online

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

Página de criação de registros

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.

Exemplo online

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

Criar página de leitura

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检索记录。

Exemplo online

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

Criar página de atualização

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.

Exemplo online

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

Criar a página de exclusão

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.

Exemplo online

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

Criar página de erro

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.