CRUD com PHP
18 CRUD com PHP
CRUD é o acrônimo da expressão em língua Inglesa Create,
Retrieve, Update e Delete, usada para definir quatro
operações básicas usadas em bancos de dados relacionais
(RDBMS) ou em interface para usuários para criação,
consulta, atualização e destruição de dados.
pt.wikipedia.org/wiki/CRUD.
CRUD com PHP
18.1 Exercício com CRUD
Para este exercício vamos alterar a tabela paises para incluir
dois campo adicionais, a moeda e população.
Alterar a tabela Paises
Efectuamos a ligação à nossa base de dados, através da
ligação pré-estabelcida no MySql Workbench.
CRUD com PHP
18.2 Exercício com CRUD
Efectuamos um clique com o botão direito do rato sobre a
tabela países e escolhemos “Alter Table”.
CRUD com PHP
18.3 Exercício com CRUD
Escolhemos “Columns” e criamos os campos como no exemplo.
Seguidamente, fazemos “Apply”, seguido de “Apply Sql” e depois “Finish” e “Close” para fechar a janela.
CRUD com PHP
18.5 Exercício com CRUD
Criação do ficheiro index.php
Este ficheiro vai conter o código inicial deste exemplo. Deve
criar uma pasta chamada CRUD, e criar um ficheiro
chamado index.php
CRUD com PHP18.6 Exercício com CRUD
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
Opções:<br/>
<form action="introduzireditar.php" method="GET" name="paises">
<input type="submit" value="Introduzir" />
</form>
<form action="listar.php" method="GET" name="paises">
<input type="submit" value="Listar" />
</form>
</body>
</html>
CRUD com PHP
18.7 Exercício com CRUD
No slide anterior criamos uma página HTML básica que contém
dois form, cada um com um botão, um para introduzir um novo
país e outro para listar os países. Na opção de listar, vamos
poder editar ou eliminar os países se o desejarmos. Deve criar
uma pasta dentro da pasta CRUD, chamada “includes”, e copiar
para dentro desta pasta o ficheiro config.php criado no último
exemplo.
CRUD com PHP
18.8 Exercício com CRUD
O exemplo do resultado do nosso código HTML para o ficheiro
index.php é o seguinte:
CRUD com PHP
18.9 Exercício com CRUD
Criar o ficheiro introduzireditar.php.
Este ficheiro permitirá introduzir e editar novos países. O seu
código HTML inicial é o seguinte:
<html>
<head>
<meta http-equiv="content-type" content="text/html;
charset=UTF-8">
</head>
<body>
Introduzir os dados do País:<br />
CRUD com PHP
18.10 Exercício com CRUD
<form action="introduzireditar.php" method="POST" name="introduzir">
<label for="nomepais">Nome País: </label>
<input type="text" name="nomepais" value="" />
<br />
<label for="moedapais">Moeda: </label>
<input type="text" name="moedapais" value="" />
<br />
<label for="populacaopais">População: </label>
<input type="text" name="populacaopais" value="" />
<br />
<input type="submit" value="Gravar" />
CRUD com PHP
18.13 Exercício com CRUD
Introduzir o código PHP no ficheiro introduzireditar.php.
Criar uma pasta chamada “include” e colocar dentro da pasta o ficheiro config.php.
Introduzir o seguinte código no inicio do ficheiro introduzireditar.php, antes da primeira tag HTML e dentro das tags PHP <?php … ?>.
<?php
//inclui o ficheiro com as configurações da base de dados
require_once("includes/config.php");
//efectua a conexão com os dados do ficheiro config.php
$conexao = mysql_connect($dbhost, $dbuser, $dbpassword);
CRUD com PHP
18.14 Exercício com CRUD
//testa se a conexão teve sucesso; se não teve dá erro e termina
o script
if (!$conexao)
{
die('Erro de conexão: ' . mysql_error());
}
?>
CRUD com PHP
18.15 Exercício com CRUD
O código anterior efectua a ligação ao nosso servidor MySql
usando as configurações do ficheiro config.php. A conexão é
efectuada com a função mysql_connect(), que recebe os
parâmetros para a ligação, o host onde reside a base de dados, o
utilizador e password definidos.
Um ponto importante é a verificação se a ligação foi bem
sucedida, com a instrucção if (!conexao). Caso não tenha tido
sucesso, o script é terminado com a mensagem ‘Erro de
conexão’ , seguido do respectivo erro do MySql.
CRUD com PHP
18.16 Exercício com CRUD
Detectar um POSTComo já deve ter reparado, o form contido no script introduzireditar.php, efectua um POST sobre si mesmo. A forma de sabermos que foi efectuado um POST e que o script deve recolher os valores de cada campo e efectuar a inserção dos dados na tabela é efectuado pela condição:
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
}
Deve colocar a condição na segunda linha do script, logo a seguir a tag inicial do PHP <?php e fechar o if imediatamente antes da tag de fecho ?>.
CRUD com PHP
18.17 Exercício com CRUD
Seleccionar a base de dados e o charsetDevemos antes de manipular os nossos registos, seleccionar a base de dados com o comando:
mysql_select_db($dbdatabase, $conexao);
e definir o charset com a instrucção:
mysql_set_charset('utf8',$conexao);
Estas duas linhas devem ser colocadas a seguir à instrução:
if (!$conexao)
{
die('Erro de conexão: ' . mysql_error());
}
CRUD com PHP
18.18 Exercício com CRUD
Recolher os dados do array $_POST
Neste passo vamos criar três variáveis auxiliares, que vão
receber os dados do array $_POST, previamente “escapados”
com a função mysql_real_escape_string() para prevenir sql
injection. Colocar as instruções logo abaixo às do ponto
anterior.
$nomepais = mysql_real_escape_string($_POST["nomepais"]);
$moedapais =
mysql_real_escape_string($_POST["moedapais"]);
$populacaopais =
mysql_real_escape_string($_POST["populacaopais"]);
CRUD com PHP
18.19 Exercício com CRUD
Criar o comando SQL para inserir os dados e testar se executou sem erros
Inserir as intrucções abaixo, logo após as instrucções do ponto anterior.
$sql = "INSERT INTO paises (nome_pais, moeda_pais, populacao_pais)" . " VALUES ('" . $nomepais . "', '" . $moedapais . "', " . $populacaopais . ")";
$insert = mysql_query($sql);
if (!$insert)
{
echo $sql;
echo 'Erro ao inserir o registo: ' . mysql_error();
}
CRUD com PHP
18.20 Exercício com CRUD
Testar o script
Nesta fase, já deve ser possível introduzir novos registos.
Executar agora um teste.
CRUD com PHP
18.21 Exercício com CRUD
Criar o script listar.php
Este script mostrará uma lista dos países e as suas informações.
Nesta lista será possível também efectuar a eliminação e edição
de registos.
CRUD com PHP
18.22 Exercício com CRUD
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<table border="black">
<tr>
<th>Nome País</th>
<th>Moeda</th>
<th>População</th>
</tr>
CRUD com PHP
18.23 Exercício com CRUD
<tr>
<td></td>
<td></td>
<td></td>
</tr>
</table>
<a href="index.php">Voltar</a>
</body>
</html>
CRUD com PHP
18.24 Exercício com CRUD
Efectuar a ligação à base de dados
Este passo é semelhante ao do exemplo anterior. Devem introduzir as instrucções abaixo dentro das tags do PHP:
//inclui o ficheiro com as configurações da base de dados
require_once("includes/config.php");
//efectua a conexão com os dados do ficheiro config.php
$conexao = mysql_connect($dbhost, $dbuser, $dbpassword);
//testa se a conexão teve sucesso; se não teve dá erro e termina o script
if (!$conexao)
{
die('Erro de conexão: ' . mysql_error());
}
CRUD com PHP
18.25 Exercício com CRUD
Seleccionar a base de dados e o charset
À semelhança do ficheiro anterior, seleccionamos a base de
dados e definimos o charset. Colocamos as instrucções abaixo
logo a seguir às do ponto anterior:
mysql_select_db("aulasphp", $conexao);
mysql_set_charset('utf8',$conexao);
CRUD com PHP
18.26 Exercício com CRUD
Definir o comando SQL a executar
O comando que vamos executar deve mostrar todos os registos
presentes na tabela paises. Para esse efecito, um simples select é
suficiente. Colocar as intrucções a seguir às do ponto anterior.
$sql = "SELECT * FROM paises";
$paises = mysql_query($sql);
CRUD com PHP
18.27 Exercício com CRUD
Iterar sobre os registos
Para iterarmos sobre os registos, necessitamos de um ciclo e de
converter o resultado do nosso query sql num array associativo.
Devem substituir o código HMTL seguinte:
<tr>
<td></td>
<td></td>
<td></td>
</tr>
CRUD com PHP
18.28 Exercício com CRUD
Iterar sobre os registos
Para iterarmos sobre os registos, necessitamos de um ciclo e de
converter o resultado do nosso query sql num array associativo.
Devem substituir o código HMTL seguinte:
<tr>
<td></td>
<td></td>
<td></td>
</tr>
CRUD com PHP18.29 Exercício com CRUD
Pelo seguinte código:
<?php
while($registos = mysql_fetch_array($paises))
{
echo "<tr>\n";
echo "<td>\n";
echo $registos["nome_pais"];
echo "</td>\n";
echo "<td>\n";
echo $registos["moeda_pais"];
echo "</td>\n";
echo "<td>\n";
echo $registos["populacao_pais"];
echo "</td>\n";
CRUD com PHP18.30 Exercício com CRUD
echo "<td>\n";
echo "<form name=\"editar\" action=\"editarpais.php\" method=\"GET\">";
echo "<input type=\"hidden\" name=\"idpais\" value=\"" . $registos["id_pais"] ."\"/>";
echo "<input type=\"submit\" value=\"Editar\"/>";
echo "</form>";
echo "</td>\n";
echo "<td>\n";
echo "<form name=\"eliminar\" action=\"eliminarpais.php\" method=\"GET\">";
echo "<input type=\"hidden\" name=\"idpais\" value=\"" . $registos["id_pais"] ."\"/>";
echo "<input type=\"submit\" value=\"Eliminar\"/>";
echo "</form>";
echo "</td>\n";
echo "</tr>\n";
}
?>
CRUD com PHP
18.31 Exercício com CRUD
Colocamos um novo header para a tabela com o texto opções. Onde temos o
código:
<tr>
<th>Nome País</th>
<th>Moeda</th>
<th>População</th>
</tr>
Incluímos a linha:
<th colspan="2">Opções</th>
Imediatamente acima da tag </tr>.
Com esta última linha de código, implementámos um método que permitirá
efectuar a edição e eliminação de registos.
CRUD com PHP
18.32 Exercício com CRUD
Criar o script editarpais.php
Este script vai permitir que o registo seleccionado seja
editado. Na prática, o utilizador ao seleccionar o botão
“Editar” na página listar.php, vai chamar este script
com o parâmetro do registo a editar. No script
editar.php, vamos recuperar o id do registo, preencher
os campos com o seu valor e permitir que o utilizador
faça a respectiva alteração. A nível de SQL, será
implementado um update ao registo.
CRUD com PHP18.33 Exercício com CRUD
Código do script editarpais.php
Neste passo vamos criar um novo ficheiro editarpais.php e inluir o seguinte código HTML:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
Editar os dados do País:<br />
<form name="editar" action="introduzireditar.php" method="POST">
<label for="nomepais">Nome País: </label>
<input type="text" name="nomepais" value="" />
<br />
CRUD com PHP
18.34 Exercício com CRUD
<label for="moedapais">Moeda: </label>
<input type="text" name="moedapais" value="" />
<br />
<label for="populacaopais">População: </label>
<input type="text" name="populacaopais" value="" />
<br />
<input type="submit" name =“actualizar” value="Actualizar" />
</form>
<a href="listar.php">Voltar</a>
</body>
</html>
CRUD com PHP
18.35 Exercício com CRUD
Código PHP para extrair o ID do registo a editar
Criar um bloco de código PHP logo acima da primeira linha HTML. Colocar o seguinte código:
//testa se a variável superglobal foi inicializada
if (!isset( $_GET["idpais"]))
{
die("Id do país não fornecido.");
}
//atribui o valor do campo escondido do form à variável
$idPais = $_GET["idpais"];
//grava o id do pais numa sessão
session_start();
$_SESSION["idpais"] = $idPais;
CRUD com PHP
18.36 Exercício com CRUD
O código anterior primeiro testa se a variável idpais, do array
superglobal existe. Se não existir, termina o script com erro. Se
existir, o seu valor será guardado na sessão para mais tarde ser
usado.
CRUD com PHP
18.37 Exercício com CRUD
Seguidamente, colocamos o código abaixo:
//inclui o ficheiro com as configurações da base de dados
require_once("includes/config.php");
//efectua a conexão com os dados do ficheiro config.php
$conexao = mysql_connect($dbhost, $dbuser, $dbpassword);
//testa se a conexão teve sucesso; se não teve dá erro e termina o script
if (!$conexao)
{
die('Erro de conexão: ' . mysql_error());
}
CRUD com PHP
18.38 Exercício com CRUD
mysql_select_db("aulasphp", $conexao);
mysql_set_charset('utf8',$conexao);
$sql = "SELECT * FROM paises WHERE id_pais = " . mysql_real_escape_string($idPais);
$paises = mysql_query($sql);
if (mysql_num_rows($paises) == 0)
{
die("Registo não encontrado" );
}
$registo = mysql_fetch_assoc($paises);
$nomePais = $registo ["nome_pais"];
$moedaPais = $registo ["moeda_pais"];
$populacaoPais = $registo ["populacao_pais"];
CRUD com PHP
18.39 Exercício com CRUD
Parte do código anterior já é conhecido. O query SQL executado
pesquisa na tabela de países o país com o ID pretendido e atribui
o resultado do query a um array associativo para podermos usar
os campos.
CRUD com PHP
18.40 Exercício com CRUD
Alteraçao dos inputs do formulário.
Com os dados do registo já atribuídos a um array, podemos
afixá-los no form, através do campo “value” de cada input do
form. Alterar os inputs de acordo com as instrucções abaixo:
<input type="text" name="nomepais" value="<?php echo
$nomePais; ?>" />
<input type="text" name="moedapais" value="<?php echo
$moedaPais; ?>" />
<input type="text" name="populacaopais" value="<?php
echo $populacaoPais; ?>" />
CRUD com PHP
18.41 Exercício com CRUD
Actualizar o script introduzireditar.php
Este script deve ser alterado para servir não só para introduzir
informação, mas também para permitir a edição dos mesmos. As
alterações a efectuar são as seguintes:
Detectar se foi efectuado um POST
Como vamos usar o mesmo script para inserir e editar registos,
necessitamos de testar se foi efectuado um POST. Caso não
tenha sido feito um POST, o form é apresentado, se pelo
contrário, tivermos efectuado um POST, vamos detectar se
devemos fazer um insert ou um update.
inserir o código seguinte no início do script introduzireditar.php:
CRUD com PHP
18.42 Exercício com CRUD
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
//inclui o ficheiro com as configurações da base de dados
require_once("includes/config.php");
//efectua a conexão com os dados do ficheiro config.php
$conexao = mysql_connect($dbhost, $dbuser, $dbpassword);
//testa se a conexão teve sucesso; se não teve dá erro e termina o script
if (!$conexao)
{
die('Erro de conexão: ' . mysql_error());
}
mysql_select_db("aulasphp", $conexao);
mysql_set_charset('utf8',$conexao);
CRUD com PHP
18.43 Exercício com CRUD
O código anterior testa se foi efectuado um POST, efectua o
require das configurações da ligação à base de dados, e termina
o script se a ligação não for efectuada, é feita também a selecção
da base de dados e definido o charset da ligação.
CRUD com PHP
18.44 Exercício com CRUD
Efectuar insert ou update?
O próximo bloco de código vai permitir efectuar um insert ou
update, dependendo de uma condição. Vejamos o código
seguinte, que deve ser inserido logo após a última instrucção do
código anterior.
CRUD com PHP18.45 Exercício com CRUD
if (array_key_exists("actualizar", $_POST))
{
session_start();
$idPais = mysql_real_escape_string($_SESSION["idpais"]);
$nomepais = mysql_real_escape_string($_POST["nomepais"]);
$moedapais = mysql_real_escape_string($_POST["moedapais"]);
$populacaopais = mysql_real_escape_string($_POST["populacaopais"]);
$sql = "UPDATE paises SET nome_pais = '" . $nomepais . "', moeda_pais = " .
$moedapais . " , populacao_pais = " . $populacaopais . "
WHERE id_pais = " . $idPais;
$update = mysql_query($sql);
if (!$update)
{
echo $sql;
echo 'Erro ao actualizar o registo: ' . mysql_error();
}
}
CRUD com PHP18.46 Exercício com CRUD
else
{
$nomePais = mysql_real_escape_string($_POST["nomepais"]);
$moedaPais = mysql_real_escape_string($_POST["moedapais"]);
$populacaoPais = mysql_real_escape_string($_POST["populacaopais"]);
$sql = "INSERT INTO paises (nome_pais, moeda_pais, populacao_pais)" .
" VALUES ('" . $nomePais . "', '" . $moedaPais . "', "
. $populacaoPais . ")";
$insert = mysql_query($sql);
if (!$insert)
{
echo $sql;
echo 'Erro ao inserir o registo: ' . mysql_error();
}
}
CRUD com PHP18.47 Exercício com CRUD
Este código que introduzimos é responsável pelo seguinte:
Testar de onde vem o POSTTesta se no array superglobal $_POST existe uma chave com o nome “actualizar”. Isto é efectuado com a função array_key_exists(). Se existir esta chave, significa que o POST foi efectuado do form no script editarpais.php. O código HTML responsável por esta acção é seguinte:<input type="submit" name="actualizar" value="Actualizar" />
O POST contém a chave “actualizar”Se o POST contém a chave actualizar, devemos recuperar os dados submetidos pelo form do array $_POST, e recuperar também da sessão o ID do registo que desejamos alterar, que foi guardado préviamente no script editarpais.php.O código responsável por estas acções é o exposto abaixo:
session_start();
$idPais = mysql_real_escape_string($_SESSION["idpais"]);
$nomepais = mysql_real_escape_string($_POST["nomepais"]);
$moedapais = mysql_real_escape_string($_POST["moedapais"]);
$populacaopais = mysql_real_escape_string($_POST["populacaopais"]);
CRUD com PHP
18.48 Exercício com CRUD
Construir o query SQL e efectuar o UPDATENo código abaixo, vamos construir o nosso query SQL e executá-lo:
$sql = "UPDATE paises SET nome_pais = '" . $nomepais . "', moeda_pais = " . $moedapais . " , populacao_pais = " . $populacaopais . “ WHERE id_pais = " . $idPais;
$update = mysql_query($sql);
if (!$update)
{
echo 'Erro ao actualizar o registo: ' . mysql_error();
}
}E assim conclui a parte do código para editar um registo. Seguidamente vamos verificar como podemos inserir um novo registo.
CRUD com PHP
18.49 Exercício com CRUD
Inserir um novo registoA inserção de um novo registo será efectuada sempre como alternativa à condição. Resumidamente o que será efectuado será uma edição de um registo, caso no array $_POST exista a chave “actualizar”, se não existir, será efectuado uma inserção de um novo registo.
if (array_key_exists("actualizar", $_POST))
{
// Editar o registo
}
else
{
// inserir o registo
}
CRUD com PHP18.50 Exercício com CRUD
Devemos introduzir o código abaixo no “else” da condição:
$nomePais = mysql_real_escape_string($_POST["nomepais"]);
$moedaPais = mysql_real_escape_string($_POST["moedapais"]);
$populacaoPais = mysql_real_escape_string($_POST["populacaopais"]);
$sql = "INSERT INTO paises (nome_pais, moeda_pais, populacao_pais)" .
" VALUES ('" . $nomePais . "', '" . $moedaPais . "', "
. $populacaoPais . ")";
$insert = mysql_query($sql);
if (!$insert)
{
echo 'Erro ao inserir o registo: ' . mysql_error();
}
}
Este pedaço de código é semelhante ao anterior, sendo que a principal diferença situa-se no facto de ser efectuado um INSERT em vez de um UPDATE.
CRUD com PHP18.51 Exercício com CRUD
Devemos introduzir o código abaixo no “else” da condição:
$nomePais = mysql_real_escape_string($_POST["nomepais"]);
$moedaPais = mysql_real_escape_string($_POST["moedapais"]);
$populacaoPais = mysql_real_escape_string($_POST["populacaopais"]);
$sql = "INSERT INTO paises (nome_pais, moeda_pais, populacao_pais)" .
" VALUES ('" . $nomePais . "', '" . $moedaPais . "', "
. $populacaoPais . ")";
$insert = mysql_query($sql);
if (!$insert)
{
echo 'Erro ao inserir o registo: ' . mysql_error();
}
}
Este pedaço de código é semelhante ao anterior, sendo que a principal diferença situa-se no facto de ser efectuado um INSERT em vez de um UPDATE.
Top Related