3. 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
4. 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
5. 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
6. 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
7. 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…)
8. 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?
9. 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
10. 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
11. 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
12. 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);
13. 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 interprete
adicionar um campo de texto para indicar um novo interprete
• no script de inserção
verificar 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 menu
inserir o novo CD na tabela “cd”