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

18 - Crud Com Php

Jan 03, 2016

Download

Documents

Luis Osorio
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 18 - Crud Com Php

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.

Page 2: 18 - Crud Com Php

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.

Page 3: 18 - Crud Com Php

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

Page 4: 18 - Crud Com Php

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.

Page 5: 18 - Crud Com Php

CRUD com PHP

18.4 Exercício com CRUD

Fazemos refresh e verificamos as alterações efectuadas.

Page 6: 18 - Crud Com Php

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

Page 7: 18 - Crud Com 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>

Page 8: 18 - Crud Com Php

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.

Page 9: 18 - Crud Com Php

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:

Page 10: 18 - Crud Com Php

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

Page 11: 18 - Crud Com Php

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" />

Page 12: 18 - Crud Com Php

CRUD com PHP

18.11 Exercício com CRUD

</form>

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

</body>

</html>

Page 13: 18 - Crud Com Php

CRUD com PHP

18.12 Exercício com CRUD

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

Page 14: 18 - Crud Com Php

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);

Page 15: 18 - Crud Com Php

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());

}

?>

Page 16: 18 - Crud Com Php

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.

Page 17: 18 - Crud Com Php

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

Page 18: 18 - Crud Com Php

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());

}

Page 19: 18 - Crud Com Php

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"]);

Page 20: 18 - Crud Com Php

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();

}

Page 21: 18 - Crud Com Php

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.

Page 22: 18 - Crud Com Php

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.

Page 23: 18 - Crud Com Php

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>

Page 24: 18 - Crud Com Php

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>

Page 25: 18 - Crud Com Php

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());

}

Page 26: 18 - Crud Com Php

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);

Page 27: 18 - Crud Com Php

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);

Page 28: 18 - Crud Com Php

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>

Page 29: 18 - Crud Com Php

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>

Page 30: 18 - Crud Com Php

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";

Page 31: 18 - Crud Com Php

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";

}

?>

Page 32: 18 - Crud Com Php

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.

Page 33: 18 - Crud Com Php

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.

Page 34: 18 - Crud Com Php

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

Page 35: 18 - Crud Com Php

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>

Page 36: 18 - Crud Com Php

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;

Page 37: 18 - Crud Com Php

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.

Page 38: 18 - Crud Com Php

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());

}

Page 39: 18 - Crud Com Php

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"];

Page 40: 18 - Crud Com Php

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.

Page 41: 18 - Crud Com Php

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; ?>" />

Page 42: 18 - Crud Com Php

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:

Page 43: 18 - Crud Com 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);

Page 44: 18 - Crud Com Php

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.

Page 45: 18 - Crud Com Php

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.

Page 46: 18 - Crud Com Php

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();

}

}

Page 47: 18 - Crud Com Php

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();

}

}

Page 48: 18 - Crud Com Php

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"]);

Page 49: 18 - Crud Com Php

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.

Page 50: 18 - Crud Com Php

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

}

Page 51: 18 - Crud Com Php

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.

Page 52: 18 - Crud Com Php

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.

Page 53: 18 - Crud Com Php

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.