O documento descreve o processo de inserção de dados em uma tabela de banco de dados usando PHP e MySQL. Ele explica como: 1) criar um formulário HTML para coletar dados do usuário; 2) validar os dados no lado do servidor usando PHP; 3) executar uma query SQL INSERT para adicionar um novo registro à tabela.
1. PHP + MySQL: insert
Carlos Santos
LabMM 4 - NTC - DeCA - UA
Aula PHP+MySQL 03, 09-05-2012
2. inserção simples numa tabela
Para inserir um novo registo numa tabela:
• criar um formulário com os campos necessários
• se necessário, validar dados por javascript
• submeter dados por POST
• receber dados e, se necessário, voltar a validar
• inserir dados na tabela da BD
3. php -> bd
Para inserir um novo registo numa tabela:
• $qFami = "INSERT INTO Tabela (campo1, campo2, campo3)
VALUES ('valor1', 'valor2', valor3)";
POST querystring(?)
form.php insert.php result.php
5. inserir uma nova família - formFamilia.php
<html>
<body>
<form action="insert_familia.php" method="post">
Nome Família: <input type="text" name="nomeFamilia" />
<input type="submit" />
</form>
</body>
</html>
As chaves primárias com auto-incremento não são pedidas e não
precisam de um campo no formulário.
6. inserir uma nova família - insert_familia.php
$nomeFamilia = $_POST[“nomeFamilia”];
//Validação de dados de entrada em falta
$query="INSERT INTO Familia (nomeFamilia) VALUES
('$nomeFamilia')";
if (!mysql_query($query,$connection)) {
// tratar condição de erro
} else {
// o que fazer se correr bem?
}
7. feedback
Mostrar feedback na página de inserção
• a utilizar com moderação na estrutura indicada anteriormente
• tende a criar situações com um passo extra de navegação
Redirecionar para outra página automaticamente
• página do próprio sítio web onde o utilizador pode continuar a navegar
“normalmente”
• header('Location: proxPagina.php');
• a própria página do formulário de inserção permitindo adicionar mais
elementos de um modo muito simples
• feedback pode ser passado por querystring
8. php -> bd
Estas operações podem ser todas realizadas na mesma página!
• no início testa se há dados por post: isset(...) (+ verificações de segurança)
• se há dados faz a inserção e dá feedback
• se não há dados mostra o formulário
POST
form.php
9. inserir um novo mariachi - formMariachi.php
<html>
<body>
<form action="insert_mariachi.php" method="post">
Nome: <input type="text" name="nome" />
Alcunha: <input type="text" name="alcunha" />
Família: <input type="text" name="Familia_idFamilia" />
<input type="submit" />
</form>
</body>
</html>
Isto tem sentido?
10. inserir um novo mariachi - formMariachi.php
<html>
<body>
<form action="insert_mariachi.php" method="post">
Nome: <input type="text" name="nome" />
Alcunha: <input type="text" name="alcunha" />
Família: <input type="text" name="Familia_idFamilia" />
<input type="submit" />
</form>
</body>
</html>
Nunca se pede ao utilizador para inserir valores de
chaves!
Nos formulários, para as chaves estrangeiras de uma
tabela, têm que ser criados elementos de interação
adequados!
11. inserir um novo mariachi - formMariachi.php
<html>
<body>
<form action="insert_mariachi.php" method="post">
Nome: <input type="text" name="nome" />
Alcunha: <input type="text" name="alcunha" />
Família:
<select name="Familia_idFamilia”>
<option value="1">Menezes</option>
<option value="2">Rodriguez</option>
<option value="3">Costa</option>
</select>
<input type="submit" />
</form>
</body>
</html> E os elementos de interação têm que ser
dinâmicos porque a informação pode
mudar na BD!
12. drop down menu
Para adicionar um drop down menu num formulário é necessário:
• criar um recordset com os valores das chave primária e respetivos labels
para o drop down menu
• num ciclo, adicionar todas as opção ao elemento do tipo select, sendo:
• o value é o valor da chave primária
• o texto é o label extraído da BD
14. inserir um novo mariachi - formMariachi.php
<form action="insert_mariachi.php" method="post">
Família:
<select name="Familia_idFamilia”>
<option value="0" selected>Escolha uma família</option>
<?php
while ($row_rsFami = mysql_fetch_assoc($rsFami)){
$option = ‘<option value=”‘
. $row_rsFami[“idFamilia"]
. ’”>’
. $row_rsFami[“nomeFamilia"]
. ‘</option>’;
echo $option
}
</select>
?> Neste caso é obrigatório validar se o
utilizador escolheu uma opção e nunca
tentar inserir se isso não aconteceu!
15. inserir um novo mariachi
$nome = $_POST[“nome”];
$alcunha = $_POST[“alcunha”];
$Familia_idFamilia = $_POST[“Familia_idFamilia”];
//Validação de dados de entrada em falta
$query="INSERT
INTO Mariachi (nome, alcunha, Familia_ifFamilia)
VALUES ('$nome', '$alcunha', $Familia_idFamilia)";
if (!mysql_query($query,$connection)) {
// tratar condição de erro
} else {
// o que fazer se correr bem?
}
16. problemas com encoding?
na inserção na BD
• utf8_encode($_POST['...'])
na visualização na página
• utf8_decode($row_rs['...'])
18. Inserção em tabelas de M:N
Regras a seguir
• criar um recordset com elementos do lado M
• criar um recordset com elementos do lado N
• no formulário
• utilizar esses recordsets para construir os drop down menus para cada
uma das chaves estrageiras da tabela
19. Erros em PHP
Não é tão fácil de ver...
• http://www.php.net/manual/en/function.error-reporting.php
• error_reporting(E_ALL); //em desenvolvimento