labmm4 (t21 - 12/13) - insert, delete e update

13
PHP + MySQL: insert, update e delete Carlos Santos LabMM 4 - NTC - DeCA - UA Aula 21, 15-05-2013

Upload: carlos-santos

Post on 17-Dec-2014

1.078 views

Category:

Education


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: LabMM4 (T21 - 12/13) - insert, delete e update

PHP + MySQL: insert, update e delete

Carlos SantosLabMM 4 - NTC - DeCA - UAAula 21, 15-05-2013

Page 2: LabMM4 (T21 - 12/13) - insert, delete e update

Inserção complexa

Como inserir um novo CD na seguinte BD?

Page 3: LabMM4 (T21 - 12/13) - insert, delete e update

Formulário de inserção

Possível estrutura para o formulário:

• campo de texto: título CD• drop down menu: editora• drop down menu: interprete• drop down menu: classificação

E os estilos a associar ao CD?

• relação de muitos para muitos• na introdução o utilizador pode querer introduzir vários estilos

Page 4: LabMM4 (T21 - 12/13) - insert, delete e update

Formulário de inserção

Possível estrutura para o formulário:

• campo de texto: título CD• drop down menu: editora• drop down menu: interprete• drop down menu: classificação• check boxes: estilos

Page 5: LabMM4 (T21 - 12/13) - insert, delete e update

Formulário de inserção (HTML)

drop down menus (select ... option)

• value = valor da chave primária (id) do elemento• label text = descrição do elemento

check boxes

• <input type=”checkbox” name=”campo[ ]” value=”idvalue1” />label1<input type=”checkbox” name=”campo[ ]” value=”idvalue2” />label2

• nos resultados do post:• $_POST[“campo”] é um array com todos os valores selecionados nas

checkboxes do formulário• mais info: http://www.html-form-guide.com/php-form/php-form-

checkbox.html

Page 6: LabMM4 (T21 - 12/13) - insert, delete e update

Na inserção em PHP

Para cada instrução só é possível inserir um registo e numa única tabela!

• Inserir novo registo na tabela “cd”• “titulo”, “editora_id”, “interprete_id” e “classificacao_id”• obter chave primária do novo CD e guardar!

• mysqli->insert_id; // chamar logo a seguir ao insert

• Para cada estilo escolhido:• inserir um novo registo na tabela “cd_estilo”• utilizar sempre o id do CD introduzido anteriormente e o id de cada

uma das checkboxes selecionadas pelo utilizador no formulário

Page 7: LabMM4 (T21 - 12/13) - insert, delete e update

Remover registos

A remoção de um registo não pode violar as regras de integridade referencial da BD

• se adequado, substituir a remoção pela colocação do registo num estado inativo (através dum campo booleano na tabela)

• é necessário adequar todas as queries para terem em conta o estado dos registos (para os mostrar ou não…)

Page 8: LabMM4 (T21 - 12/13) - insert, delete e update

Remover registos

Remoção de registos com a passagem de parâmetro/valor na Query String

• id do registo a remover (apagar_familia.php?id=3)• confirmar previamente a remoção por JS (client-side) -> “Quer mesmo

apagar a família X?”

Para uma maior segurança na remoção de registos da BD

• verificar sempre se o utilizador possui as necessárias permissões -> perfis utilizadores

• não expor na Query String o parâmetro/valor que possibilita a edição -> variáveis sessão ($_SESSION[“parametro”] = valor)• qual a diferença entre uma variável “normal” e uma variável de sessão?

Page 9: LabMM4 (T21 - 12/13) - insert, delete e update

Remover registos

apagar_familia.php?id=3

• verificar a passagem do parâmetro/valor na Query String• validar se é possível apagar (existe alguma chave estrangeira que tenha

uma referência a este valor?)• apagar o registo• dar feedback ao utilizador sobre o sucesso (ou não) da remoção!!

$idFam = $_GET["id"];//Validações!$query = "DELETE FROM Familia WHERE idFamilia =".$idFam;$rsFami = mysqli->query($query);//Feedback final

Page 10: LabMM4 (T21 - 12/13) - insert, delete e update

Editar registos

Edição de registos com a passagem de parâmetro/valor na Query String

• id do registo a editar (editar_familia.php?id=5)• o id é obtido através do URL que se constrói na interface de escolha para

edição

Para uma maior segurança na edição de registos da BD

• Verificar sempre se o utilizador possui as necessárias permissões -> perfis utilizadores

• Não expor na Query String o parâmetro/valor que possibilita a edição -> variáveis sessão

Page 11: LabMM4 (T21 - 12/13) - insert, delete e update

Editar registos

O que é que tem de mudar entre um formulário para adicionar um registo e um formulário para editar um registo?

• num formulário para adicionar• não há um campo para a chave primária porque esse valor não existe e

não é escolhido pelo utilizador (auto incremento)• por defeito, os campos devem estar vazios

• num formulário para editar• o valor da chave primária é essencial para atualizar o registo correto na

BD!• pode optar-se por ter um campo do tipo hidden no formulário para

armazenar o valor da chave primária• os campos devem aparecer pré-preenchidos com os valores atuais do

registo

Page 12: LabMM4 (T21 - 12/13) - insert, delete e update

Formulário

Passos para construir um formulário de edição:

• construir um recordset com os valores do registo em edição• adicionar todos os elementos como no formulário de inserção (drop down

menus)• inicializar todos os campos com os valores do registo em edição• adicionar um hidden field com o valor da chave primária do registo

$query = "UPDATE tabela SET campo1 = "valor1", campo2 = valor2 WHERE chavePrimária = valorChavePrimária;;$rsUpdate = mysqli->query($query);

Page 13: LabMM4 (T21 - 12/13) - insert, delete e update

Inserções em múltiplas tabelas

No formulário para adicionar um CD queremos permitir escolher um interprete já existente ou adicionar um novo

• no formulário:manter o drop down para escolher um interpreteadicionar um campo de texto para indicar um novo interprete

• no script de inserçãoverificar se foi introduzido algo no campo do novo interprete se foi -> verificar se esse interprete já existe na BD se existir -> usar o ID (PK) do interprete já existente se não existir -> inserir novo interprete na tabela “interprete” obter o ID (PK) dessa inserção se não foi -> utilizar a opção selecionada no dropdown menuinserir o novo CD na tabela “cd”