?php
/*
Olá a todos, bem vou tentar ajudar aqui a malta, já passou algum tempo desde do pedido por isso penso que seja uma boa altura. 1º Não entendo porque que as vezes alguém se propõe ajudar outro quando não tem os conhecimentos necessários, penso que aqui fica uma lição de que para se fazer algo é necessário se saber o que se faz, ou seja um pouco de estudo e investigação nunca fez mal a alguém. Depois peço a malta para entender que o Sena é um rio em Paris, e não calão juvenil, esse é a "CENA", :) Bem agora vamos ao que interessa, para resolver este problema é necessário possuirmos uma tabela numa base de dados MySQL para armazenar os registos. Por exemplo iremos ter uma tabela utilizadores com os seguintes campos
empresa -> varchar(250) Not Null
morada -> text Not Null
email -> varchar(250) Not Null
localidade -> varchar(100) Not Null
codPostal4 -> Int Not Null
codPostal3 -> Int Not Null
telefone -> Int Not Null
fax -> Int Not Null
contrib -> Int Not Null
Para dizer a verdade não pensei muito acerca dos campos, por isso francamente poderão ser do tipo que pretenderem, isto não importa para nada de momento.
Agora vamos pensar como organizar o nosso código;
1º conectamos a base de dados, procuramos saber se ela existe.
2º verificamos se o formulário foi submetido
3º validamos os campos submetidos
3º - 1º Se os campos obrigatórios foram preenchidos
3º - 2º Se os campos foram correctamente preenchidos
4º Inserimos os dados na BD
4º-1º se sucesso avançamos para o 5º passo senão retornamos um erro e vamos para o 2º passo
5º fechamos a ligação a BD
e prontos acho que é mais ou menos isso, então vamos lá.
Primeiro conectamos a Base de dados, para isso usamos o Objecto Mysqli do PHP, este veio subsituir o conjunto de funções MySql do PHP, fornecendo uma sintaxe Orientada a objecto e melhorando um conjunto de funções, permite também usar transações e outros goodies do mysql 5 .
Instanciamos o Objecto mysqli na variavel conexao, não me vou debruçar a explicar o que são objectos, esta parte ficar´para a pesquisa pessoal de cada um de nós (sim porque também eu tou sempre a aprender, faz me sempre bem).
Aqui o construtor do objecto mysqli recebe 4 atributos,
1º host -> servidor
2º nome utilizador
3º palavra-chave
4º nome da base de dados por exemplo "registos"
*/
$conexao = new mysqli("localhost", "user", "password", "registos");
/*
verificamos a conexão através do método connect_error, se este retornar true então o bloco é executado, será imprimido no ecrã a mensagem "Connexão falhada: e o erro", o script é de seguida terminado imediatamente com a função exit()
*/
if ($mysqli->connect_error) {
printf("Connexão falhada: %sn", mysqli_connect_error());
exit();
}
/*
no formulário sugiro usar um campo do tipo hidden, esse campo podemos lhe dar um nome e um id, por exemplo "go" e um value por exemplo "ok" é também necessário declarar na tag do formulário o atributo method="post", ou sejá os valores submetidos no formulário serão enviados por superglobais POST, o PHP irá reconhecer estes valores num array especial, o array terá por identificador de cada valor o nome do campo do formulário, ou seja, um array é uma lista de valores neste caso, teremos uma lista que possui os nomes dos campos do formulário e associado a cada nome terá o valor que lhe foi inserido pelo utilizador quando esse preencheu o formulário, assim teremos os seguinte:
$_POST -> nossa superGlobal do tipo POST
$_POST[\'empresa\'], $_POST[\'morada\'], $_POST[\'localidade\'] etc... esse são 3 dos exemplos que irão popular a nossa variável POST se imprimirmos por exemplo o $_POST[\'empresa\'] iremos então ver o valor que o utilizador inseriu no formulário, assim esse é o valor que queremos inserir na BD
Para verificar se o formulário foi inserido iremos verificar se o $_POST[\'go\'] existe, lembram-se que este se refere ao campo hidden do formulário e se $_POST[\'go\'] é igual a "ok" que era o seu valor fixo.
a função isset() verifica se determinada variável existe, os símbolos && significam AND ou seja E, por fim comparamos se o POST go é igual a string "ok" atraves do operador == (operador de igualdade)
*/
if((isset($_POST[\'go\'])) && ($_POST[\'go\'] == "ok")){
/*
Agora temos que validar cada campo e determinar um conjunto de regras, por exemplo, todos os campos são de preenchimento obrigatório. Podemos dizer que o campo email tem que ter a seguinte estrutura abc@abx.pt ou seja um conjunto de caracteres seguidos por um @ mais um conjunto de caracteres seguidos por um ponto e a extensão do pais, para tal podemos usar expressões regulares, essas formam um conjunto de regras, se as mesmas não são seguidas irá ocorrer um erro. Podemos comparar uma string com uma expressão regular através da função eregi() do PHP
primeiro confirmamos que nenhum campo esteja vazio, caso seja composto por um espaço removemos os espaços vazios. criamos um array (lista) chamado camposVazios que irá ser populado caso um campo esteja vazio, depois iniciamos um ciclo foreach, este ciclo percorre todos os indices de uma lista (array) neste caso ele irá percorrer o $_POST a variavel $key irá representar o índice do array e a variável var os valores do array a cada ciclo. depois verificamos através da função empty se a variável está vazia, se for verdade o índice dessa variável é inserido na lista que criamos. A função trim remove os espaços brancos, por exemplo caso alguém premiu e preencheu um campo com apenas um space.
*/
$camposVazios = array();
foreach($_POST as $key => $var){
$var = trim($var);
if(empty($var)){
$camposVazios = array_push($key);
}
}
$camposErrados = array();
/*
verificamos agora o email com a função eregi e a nossa expressão regular, podem saber mais acerca de expressões regulares na internet através do google Aqui se a função eregi retornar falso significa que o valor introduzido pelo utilizador não respeita as regras de um email válido, assim armazenamos noutra lista um erro que poderemos imprimir depois no ecrã a avisar o utilizador
*/
$expressaoEmail = \'^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+.[a-zA-Z.]{2,6}$\';
if(!eregi($expressaoEmail, $_POST[\'email\'])){
$camposErrados[\'email\'] = "O e-mail parece inválido!";
}
/*Agora podemos fazer o mesmo para os restantes campos, o telefone, fax, contrib e ambos codigos postais, tem em comum que
apenas aceitam valores numéricos, então iremos aproveitar para criar uma função que faça as validações automaticamente.*/
function validarCamposNumericos($campo, $limite){
$resultado = true;
$expressaoRegular = \'^[0-9]{1,\'.$limite.\'}$\';
if(!eregi($expressaoRegular, $campo)){
$resultado = false;
}
return $resultado;
}
/*esta função recebe dois atributos, o campo e o limite de numeros, processa ambos atributos, se o valor é correcto retorna
verdadeiro, se o valor é incorrecto retorna falso. Então se for falso criamos o nosso erro.*/
validarCamposNumericos($_POST[\'telefone\'], 9) or $camposErrados[\'telefone\'] = "O telefone parece incorrecto";
validarCamposNumericos($_POST[\'fax\'], 9) or $camposErrados[\'fax\'] = "O fax parece incorrecto";
validarCamposNumericos($_POST[\'codPostal4\'], 9) or $camposErrados[\'codPostal4\'] = "O código postal parece incorrecto";
validarCamposNumericos($_POST[\'codPostal3\'], 9) or $camposErrados[\'codPostal3\'] = "O código postal parece incorrecto";
validarCamposNumericos($_POST[\'contrib\'], 9) or $camposErrados[\'contrib\'] = "O contribuinte parece incorrecto";
/*Agora verificamos se tudo está bem então iremos inserir na bd os valores
se as nossas lista de erros estão vazias é porque tudo esteve ok*/
if(empty($camposVazios) && empty($camposErrados)){
//inicializamos o que será a nossa declaração
$stmt = $conexao->stmt_init();
//aqui com o metodo prepare preparamos a declaração da query, os valores sao substituidos por ?
if($stmt->prepare("INSER INTO
utilizadores(empresa, morada, email, localidade, codigoPostal4, codigoPostal3, telefone,
fax, contrib) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)")){
//o metodo bin_param permite ligar os nossos valores aos pontos de interrogação, aqui temos no primeiro atributo
//declarar o tipo de cada valore, neste caso o s para srings e o d para inteiros
$stmt->bind_param("ssssddddd",
$_POST[\'empresa\'],
$_POST[\'morada\'],
$_POST[\'email\'],
$_POST[\'localidade\'],
$_POST[\'codPostal4\'],
$_POST[\'codPostal3\'],
$_POST[\'telefone\'],
$_POST[\'fax\'],
$_POST[\'contrib\']);
//Por fim executamos a nossa query
if(!$stmt->execute()){
printf("Não foi possível executar a query, ocorreu um erro");
exit();
}
//terminamos a nossa declaração
$stmt->close();
}
}
}
//Por fim terminamos a nossa ligação a base de dados.
$conexao->close();
/*
Para concluir, este exemplo é muito bruto, muito aqui há por fazer, e tudo isto poderia ser feito de uma outra forma mais inteligente, poderíamosmelhorar por exemplo a função de validar campos por expressões regulares de forma a executar também a validação do e-mail mas enfim aqui era apenas para dar a conhecer alguns conceitos, repare que caso ocorreram erros os mesmos poderão ser imprimidos no ecrã no meio do nosso formulário.
*/
?>