Enviando dados de um formulário HTML para o MySQL via Shell Script. (LOAD DATA INFILE)

Este mini artigo demonstra o envio dos cambos de um formulário HTML para um banco de dados (Mysql) via Shell Script. Existem outras formas de fazer este POST dos dados, inclusive utilizando outras linguagens de programação, PHP por exemplo. O nosso foco no entanto, é mostrar didaticamente a coisa louca do negócio e tal. Para que os seguintes passos sejam realizados, você precisará ter: O SGDB MySQL instalado, Apache webserver instalado e com suporte a cgi/sh (Leia este artigo).

Funcionamento:

Os dados informados/preenchidos no formulário (form.html) são enviados para o script acao.sh, o script pega as informações, faz um decoder simples com expressões regulares e envia os campos para um arquivo chamado saida.log, separados por ponto e vírgula. Logo em seguida, via linha de comando, o acao.sh executa o cliente mysql que faz um procedimento do tipo LOAD DATA INFILE, que fica em um arquivo chamado insert.sql. Injetando os dados no banco. Ufa…

Preparando o banco:


Bem, não vamos entrar em detalhes de instalação, apenas de criação do banco, tabela e credenciais.

mysql> create database exemplo;
Query OK, 1 row affected (0.02 sec)

mysql> CREATE TABLE `exemplo`.`tabela` (
-> `hostname` VARCHAR( 30 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL ,
-> `ip` VARCHAR( 30 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
-> ) ENGINE = MYISAM ;
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON exemplo.* TO exemplo@localhost     IDENTIFIED BY ‘exemplo’;Query OK, 0 rows affected (0.01 sec)

Agora temos o banco “exemplo”, com uma tabela de nome “tabela” e o user “exemplo” com senha “exemplo”.

Preparando o formulário HTML:

Arquivo form.html

<html>
<head>
<title> Exemplo </title>
<meta http-equiv=”Content-Type” content=”text/html;charset=utf-8″>
</head>
<body>
<form name=”exemplo” method=”post” action=”acao.sh”>
Hotsname:<br>   <input type=”text” name=””><br>
IP:<br>         <input type=”text” name=””><br>
<br>
<input type=”Submit” value=”Enviar”><br>
</form>
</body>
</html>

Vamos ter este resultado:

Um detalhe que não podemos deixar passar, é que o campo “name” dos itens do formulário estão vazios, sem identificador. Exemplo: Hotsname:<br>   <input type=”text” name=””><br>. Neste caso é o seguinte, temos 2 cenários. Se eu omitir o campo “name”, teremos que fazer o tratamento no script acao.sh. Exemplo, testar se hostname e ou ip não foram informados (Se optar por nomear os campos, faça os teste com java script). De contra partida, a saída do submit fica um pouco mais simples.

Exemplo:  =computador&=123.123.0.32

Usamos uma expressão regular (o nosso decoder genérico) para retirar o “=” e substituir o “&” por ponto e vírgula. Repetindo, isso é bem pessoal.

Preparando o acao.sh:

arquivo acao.sh

#!/bin/bash
#
#
banco=exemplo
user=exemplo
senha=’exemplo’
#
#
echo Content-type: text/html
echo
#Ler as infomacoes do form.html
read entrada
#
#Faz o decoder da entrada, joga em var e depois envia para saida.log
#
var=$(echo “$entrada” | sed ‘s/+/ /g;s/%(..)/\x1/g;s/\x3A/:/g;s/&/;/g;s/=//g’)
echo $var > saida.log
#
#Exemplo de teste de um campo, no caso, hostname
#
hostname=$(cat saida.log | cut -d’;’ -f1)
if test -z “$hostname”
then
echo “hostname eh obrigatorio”
else
mysql -u “$user” -p”$senha” “$banco” < insert.sql
echo “cadastrado”
fi

Arquivo insert.sql

LOAD DATA LOCAL INFILE “saida.log” REPLACE INTO TABLE tabela
FIELDS TERMINATED BY ‘;’ (`hostname`, `ip`);

Em resumo, pegue o contéudo de saida.log que tem como separador “;” e mande para row hostname e ip da tabela “tabela”.

O resultado:

mysql -u exemplo -pexemplo exemplo -e ‘select * from tabela;’
+————+————–+
| hostname   | ip           |
+————+————–+
| computador | 123.123.0.32 |
+————+————–+

Bem, tem como fazer tudo isso em poucas linhas, poucos passos ? Sim, tem, claro. E a consulta ? Deixe de preguiça e faça 😛

Advertisements

4 thoughts on “Enviando dados de um formulário HTML para o MySQL via Shell Script. (LOAD DATA INFILE)

  1. Pingback: Tweets that mention Enviando dados de um formulário HTML para o MySQL via Shell Script. (LOAD DATA INFILE) | Noilson Caio T de Araújo -- Topsy.com

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s