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)

DESCRIPTION

CRUD com php

Citation preview

Page 1: 18 - CRUD com php

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

Fazemos refresh e verificamos as alterações efectuadas.

Page 6: 18 - CRUD com php

CRUD com PHP18.5 Exercício com CRUD

Criação do ficheiro index.phpEste 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 PHP18.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 PHP18.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 PHP18.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 PHP18.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 PHP18.11 Exercício com CRUD

</form>

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

</body>

</html>

Page 13: 18 - CRUD com php

CRUD com PHP18.12 Exercício com CRUD

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

Page 14: 18 - CRUD com php

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

Recolher os dados do array $_POSTNeste 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 PHP18.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 PHP18.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 PHP18.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 PHP18.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 PHP18.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 PHP18.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 PHP18.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 PHP18.26 Exercício com CRUD

Definir o comando SQL a executarO 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 PHP18.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 PHP18.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 PHP18.31 Exercício com CRUDColocamos 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 PHP18.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 PHP18.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 PHP18.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 PHP18.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 PHP18.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 PHP18.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 PHP18.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 PHP18.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 PHP18.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 POSTComo 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 PHP18.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 PHP18.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 PHP18.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 PHP18.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 PHP18.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 PHP18.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.