PHP + MySQL: insert Carlos Santos LabMM 4 - NTC - DeCA - UA Aula PHP+MySQL 03, 09-05-2012
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
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
base para exemplos
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.
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? }
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
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
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?
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!
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!
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
inserir um novo mariachi - formMariachi.php <?php $qFami = "SELECT * FROM Familia"; $rsFami = mysql_query($qFami , $connection); ?> <form action="insert_mariachi.php" method="post"> Família: <select name="Familia_idFamilia”> <?php while ($row_rsFami = mysql_fetch_assoc($rsFami)){ $option = ‘<option value=”‘ . $row_rsFami[“idFamilia"] . ’”>’ . $row_rsFami[“nomeFamilia"] . ‘</option>’; echo $option } ?> </select>
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!
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? }
problemas com encoding? na inserção na BD • utf8_encode($_POST['...']) na visualização na página • utf8_decode($row_rs['...'])
E para inserir um novo relacionamento?
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
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

PHP MySQL Aula 03

  • 1.
    PHP + MySQL:insert Carlos Santos LabMM 4 - NTC - DeCA - UA Aula PHP+MySQL 03, 09-05-2012
  • 2.
    inserção simples numatabela 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 Parainserir um novo registo numa tabela: • $qFami = "INSERT INTO Tabela (campo1, campo2, campo3) VALUES ('valor1', 'valor2', valor3)"; POST querystring(?) form.php insert.php result.php
  • 4.
  • 5.
    inserir uma novafamí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 novafamí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 napá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 Estasoperaçõ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 novomariachi - 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 novomariachi - 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 novomariachi - 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 Paraadicionar 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
  • 13.
    inserir um novomariachi - formMariachi.php <?php $qFami = "SELECT * FROM Familia"; $rsFami = mysql_query($qFami , $connection); ?> <form action="insert_mariachi.php" method="post"> Família: <select name="Familia_idFamilia”> <?php while ($row_rsFami = mysql_fetch_assoc($rsFami)){ $option = ‘<option value=”‘ . $row_rsFami[“idFamilia"] . ’”>’ . $row_rsFami[“nomeFamilia"] . ‘</option>’; echo $option } ?> </select>
  • 14.
    inserir um novomariachi - 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 novomariachi $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? nainserção na BD • utf8_encode($_POST['...']) na visualização na página • utf8_decode($row_rs['...'])
  • 17.
    E para inserirum novo relacionamento?
  • 18.
    Inserção em tabelasde 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