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

18 - Crud Com Php

Embed Size (px)

Citation preview

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.4 Exercício com CRUD

Fazemos refresh e verificamos as alterações efectuadas.

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.11 Exercício com CRUD

</form>

<a href="index.php">Voltar</a>

</body>

</html>

CRUD com PHP

18.12 Exercício com CRUD

A nossa página ficará como o exemplo abaixo:

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.

CRUD com PHP

18.52 Exercício com CRUD

O script eliminarpais.php

Para completar o nosso exercício, falta implementar uma forma

de eliminar registos. A implementação desta funcionalidade

ficará a cargo dos formandos.

Nota: a solução será fornecida com o material deste curso.