Escolar Documentos
Profissional Documentos
Cultura Documentos
• Nível: Básico;
• Pré requisitos: PHP básico e banco de dados relacional;
• Conteúdo: PHP procedural e banco de dados.
Apresentação da aplicação
Antes de começarmos a desenvolver você pode conferir como a nossa aplicação
ficará através dos prints abaixo.
O nosso crud será um cadastro de usuários com os campos id, name, email e
phone.
Mão na massa
Para que você rode o CRUD e importe o sql do nosso banco de dados é
necessário ter o seu ambiente de desenvolvimento configurado com o PHP e o
MySQL. Você pode conferir como configurar no nosso ambiente: Ambiente de
desenvolvimento com PHP e MySQL no Windows .
SQL
START TRANSACTION;
SET time_zone = "+00:00";
COMMIT;
<?php
// host
$host = 'http://localhost/conteudos/crud-php-mysql-procedural/';
// db
$db_name = 'crud';
$db_host = 'localhost';
$db_user = 'root';
$db_pass = '';
try {
throw $th;
/src
Dentro do diretório '/src' temos a pasta '/pages' que contém arquivos
responsáveis por gerar nosso html, '/database' com funções que trabalham com
nossas querys de banco de dados e '/actions' que é responsável por fazer o
meio de campo entre '/database' e '/pages'.
/pages/user/read.php
<?php
require_once '../../../config.php';
require_once '../../../src/actions/user.php';
require_once '../../../src/modules/messages.php';
require_once '../partials/header.php';
$users = readUserAction($conn);
?>
<div class="container">
<div class="row">
</div>
</div>
<table class="table-users">
<tr>
<th>NAME</th>
<th>EMAIL</th>
<th>PHONE</th>
</tr>
<tr>
<td class="user-name"><?=htmlspecialchars($row['name'])?></td>
<td class="user-email"><?=htmlspecialchars($row['email'])?></td>
<td class="user-phone"><?=htmlspecialchars($row['phone'])?></td>
<td>
</td>
<td>
</td>
</tr>
</table>
</div>
/pages/user/create.php
<?php
require_once '../../../config.php';
require_once '../../actions/user.php';
require_once '../partials/header.php';
?>
<div class="container">
<div class="row">
</div>
<div class="form-div">
<label>Name</label>
<label>E-mail</label>
<label>Phone</label>
</form>
</div>
</div>
</div>
/pages/user/edit.php
<?php
require_once '../../../config.php';
require_once '../../actions/user.php';
require_once '../partials/header.php';
if (isset($_POST["id"], $_POST["name"]) && isset($_POST["email"]) && isset($_POST["phone"]))
?>
<div class="container">
<div class="row">
</div>
<div class="form-div">
<label>Name</label>
<label>E-mail</label>
<label>Phone</label>
<input type="text" name="phone" value="<?=htmlspecialchars($user['phone'])?>"
required/>
</form>
</div>
</div>
</div>
/pages/user/delete.php
<?php
require_once '../../../config.php';
require_once '../../actions/user.php';
require_once '../partials/header.php';
if(isset($_POST['id']))
deleteUserAction($conn, $_POST['id']);
?>
<div class="container">
<div class="row">
</div>
<div class="form-div">
</form>
</div>
</div>
</div>
<?php
require_once '../../database/user.php';
function readUserAction($conn) {
return readUserDb($conn);
}
function createUserAction($conn, $name, $email, $phone) {
/src/database
A seguir temos nosso arquivo '/src/database/db.php' responsável por executar
nossas querys no banco de dados. Com exceção da nossa função 'readUserDb'
que não utiliza nenhum dado vindo de formulário todas as nossas funções, para
prevenção de SQL injection se iniciam utilizando 'mysqli_real_escape_string'
para escapar nossos dados recebidos como parametro. Em seguida a query é
definida em uma string. Na função 'readUserDb' executamos diretamente nossa
query com a função 'mysqli_query' e retornamos nosso array. Em todos os
outros métodos também para tratarmos SQL injection montamos a query por
partes através de prepared statements. Em todos os métodos encerramos nossa
conexão com 'mysqli_close'.
<?php
$user;
$stmt = mysqli_stmt_init($conn);
if(!mysqli_stmt_prepare($stmt, $sql))
exit('SQL error');
mysqli_stmt_execute($stmt);
$user = mysqli_fetch_assoc(mysqli_stmt_get_result($stmt));
mysqli_close($conn);
return $user;
$sql = "INSERT INTO users (name, email, phone) VALUES (?, ?, ?)";
$stmt = mysqli_stmt_init($conn);
if(!mysqli_stmt_prepare($stmt, $sql))
exit('SQL error');
mysqli_stmt_execute($stmt);
mysqli_close($conn);
return true;
}
function readUserDb($conn) {
$users = [];
$result_check = mysqli_num_rows($result);
if($result_check > 0)
mysqli_close($conn);
return $users;
$stmt = mysqli_stmt_init($conn);
if(!mysqli_stmt_prepare($stmt, $sql))
exit('SQL error');
mysqli_stmt_bind_param($stmt, 'sssi', $name, $email, $phone, $id);
mysqli_stmt_execute($stmt);
mysqli_close($conn);
return true;
if($id) {
$stmt = mysqli_stmt_init($conn);
if(!mysqli_stmt_prepare($stmt, $sql))
exit('SQL error');
mysqli_stmt_execute($stmt);
return true;
}
}
/src/modules
Além dos diretórios citados também temos em '/src' a pasta '/src/modules'
responsável por armazenar nosso arquivo '/src/modules/messages.php' com a
'printMessage' que retorna nossas mensagens de validação impressas no
arquivo '/src/pages/read.php' após alguma alteração feita no banco de dados
através de inserção, edição ou remoção.
<?php
function printMessage($message) {
if ($message=='success-create')
if ($message=='error-create')
if ($message=='success-remove')
if ($message=='error-remove')
if ($message=='success-update')
if ($message=='error-update')
return '<span class="text-error">Error updating registration.</span>';
}
Fonte:
https://devcontratado.com/blog/php/crud-php-mysql