Palavra:   

Revista PHP / PHP

Rafael Gonçalves Martins

Inserindo dados no MySQL facilmente a partir de um formulario

Olá,

neste artigo darei um exemplo de como criar uma função para salvar dados no banco de dados MySQL facilmente a partir de um formulário. Os dois únicos parâmetros que a função pede são: a variável $_POST completa, e o nome da tabela a inserir os dados. Não é necessário informar os nomes dos campos. Apenas crie o formulário com os seus campos tendo o mesmo nome do respectivo campo no banco de dados. Vamos ao exemplo:

1º - Crie a seguinte tabela no seu banco de dados:

Tabela do MySQL (apenas como exemplo):
SQL
  1. CREATE TABLE `teste` (
  2. `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  3. `campo1` TEXT NOT NULL ,
  4. `campo2` TEXT NOT NULL ,
  5. `campo3` TEXT NOT NULL
  6. ) ENGINE = MYISAM ;
www.revistaphp.com.br
2º - Função para receber os dados e salva-los no banco de dados (insertdb.php):
PHP
  1. <?
  2. /*****************************************************************/
  3. /* Script desenvolvido por Rafael G. Martins
  4. /*
  5. /* Data: 15/10/2007
  6. /*
  7. /* Versão: 1.0
  8. /*
  9. /* Funçao: Recebe uma variavel "$_POST" de um formulario,
  10. /* e insere os dados numa tabela do MySQL
  11. /*
  12. /* Caso hajam erros envie email para: rafael@rafaelmartins.com
  13. /*****************************************************************/
  14.  
  15. /*
  16. Função insertDB
  17.  
  18. Entrada: $info: Variavel de formulario
  19. (Ex: $_POST)
  20. $table: Nome da tabela do Mysql que receberá os dados.
  21. (Ex: "teste")
  22. Retorno: formato BOOL:
  23. Valores:
  24. true: se os dados foram inseridos com sucesso.
  25. false: se ocorreu alguma falha ao inserir os dados
  26. */
  27.  
  28. function insertDb($info,$table){
  29. $count = 1; //Contador para auxiliar na colocação das virgula
  30. foreach($info as $key=>$value){
  31. $fields .= $key; //Montagem da query
  32. $values .= "'".$value."'"; //Montagem da query
  33. if($count < sizeof($info)){
  34. $fields .= ","; //Inserção das virgulas
  35. $values .= ","; //Inserção das virgulas
  36. }
  37. $count++;
  38. }
  39. mysql_query("INSERT INTO $table($fields) VALUES($values)"); //Realização da query
  40. return (mysql_affected_rows() == 1) ? true : false; //Testa se a linha foi inserida no BD
  41. }
  42. ?>
www.revistaphp.com.br
3º Arquivo de testes (form.php):
PHP
  1. <?
  2. /*****************************************************************/
  3. /* Script desenvolvido por Rafael G. Martins
  4. /*
  5. /* Data: 15/10/2007
  6. /*
  7. /* Versão: 1.0
  8. /*
  9. /* Funçao: Recebe uma variavel "$_POST" de um formulario,
  10. /* e insere os dados numa tabela do MySQL
  11. /*
  12. /* Caso hajam erros envie email para: rafael@rafaelmartins.com
  13. /*****************************************************************/
  14.  
  15. require_once("insertdb.php"); //inclusao do arquivo com a funcao
  16.  
  17. mysql_connect("localhost","root",""); //conexão com o banco de dados(coloque os seus valores!)
  18. mysql_select_db("teste"); //Definição do banco de dados a ser usado(escolha o seu!)
  19.  
  20. if(isset($_POST[campo1])){ //Testa se o form foi postado
  21. if(insertDb($_POST,"teste")){ //Chama a função
  22. echo "Dados inseridos com sucesso!";
  23. }
  24. else{
  25. echo "Falha ao inserir os dados!";
  26. }
  27. }
  28. else{ //se não foi postado imprime o form
  29. ?>
  30. <html>
  31. <body>
  32. <form method="post" action="<?=$PHP_SELF;?>">
  33. <!-- Form de exemplo(Note que os campos tem o mesmo nome no banco de dados) -->
  34. Campo 1:<input type="text" name="campo1"><br>
  35. Campo 2:<input type="text" name="campo2"><br>
  36. Campo 3:<input type="text" name="campo3"><br>
  37. <input type="submit" value="Enviar"><br>
  38. <!-- Importante: O submit nao pode ter a propriedade "name", senão dará errado!)-->
  39. </form>
  40. </body>
  41. </html>
  42. <?
  43. }
  44. ?>
www.revistaphp.com.br
Observe que isto é apenas um exemplo!
Nenhum cuidado foi tomado com relação a SQL injection ou a qualquer outra ameaça, cabe ao usuário do código fazer as devidas modificações.

Espero ter ajudado.

Rafael Gonçalves Martins

Opções de Interação

Comentários

mysqli
Por: Luís, 19/10/2007   10:32:12
Estamos em outrubro de 2007 e raramente vejo um artigo mostrando o uso de biblioteca mysqli em detrimento da mysql para conectar com MySQL. Ela é mais moderna, suporta recursos mais modernos do MySQL, como uso de stored procedures e queries múltiplas. Não seria a hora de se pensar em criar um artigo assim, pessoal?