Neste artigo, vou abordar um tema comum, e que muitos desenvolvedores necessitam em seus sistemas: validação de formulários através de uma imagem de segurança, que gera valores aleatórios.
Você precisa ter a biblioteca GD instalada no servidor, e para tanto, leia mais sobre ela aqui: http://www.php.net/manual/pt_BR/ref.image.php
form.php
Tenho um formulário simples, que já chama a imagem de validação<?php // abro uma sessão cujo nome será utilizado pelo GD na hora de
// formatar uma imagem única para esta sessão
session_start();
// o rand siginfica que entre o primeiro e o segundo valor,
// ele deve gerar um numero qualquer com esta quantidade de caracteres.
// neste caso, usei 8 caracteres
$_SESSION["autenticagd"]=rand(10000000,99999999);
?>
<html>
<body>
<!-- aqui temos um formulário simples, que enviará o nome do usuário
e a confirmação do código de segurança mostrado pela imagem -->
<form action="form2.php" method="POST">
Seu nome:
<input type="text" name="nome">
<br>
Número de segurança:
<input type="text" name="confirmacao"> <img src="gd.php">
<br><br><input type="submit" value="Enviar">
</form>
</body>
</html>
Como funciona isso: note que a imagem, é o arquivo gd.php. Isso se deve ao fato de que este arquivo será quem irá gerar a imagem de segurança, então, ele sendo chamado, fará o trabalho de colocar a imagem pra você, no local especificado.
form2.php
Ao clicar em enviar, o que acontece:<?php // ´mantendo a sessão aberta
session_start(); // resgatando os valores enviados pelo formulário: nome e numero de segurança digitados
$NOME=$_POST['nome']; $conf1=$_POST['confirmacao'];
// resgatando a sessão anterior, aberta no form.php
$conf2=$_SESSION['autenticagd']; // verificando: Se o campo onde o usuário digitou o número de segurança, for igual
// aos valores dentro da imagem gerada pelo GD, informa ao usuário.
// caso não seja, retorna o erro
if ($conf1==$conf2) {
echo $NOME . ", o número de segurança digitado está correto!";
} else {
echo $NOME . ", o número de segurança digitado está incorreto!";
}
?>
Sendo assim, o arquivo gd.php, está fazendo a verificação do que foi digitado no campo e comparando com o valor que ele gerou dinamicamente. Se igual, informa isso, senão, retorna o erro.
Você pode implementar o que quiser utilizando este código, bastando para tanto utilizar-se da parte onde trabalha o GD, e colocar o que mais você necessitar.
Você também poderá gerar várias imagens de validação em uma única página: bata criar vários arquivos como o arquivo gd.php, que vamos ver a seguir.
gd.php
<?php // mais uma vez, mantendo a sessão aberta
session_start(); // função do gd, para criar uma imagem, com o tamanho definido
// largura, altura
$imagem = imagecreate(70, 15); // função que define a cor de fundo da imagem gerada pelo gd
// em meu caso, amarelo
$fundo = imagecolorallocate($imagem, 255, 255, 0); // função que define a cor da fonte, em meu caso, preto.
$fonte = imagecolorallocate($imagem, 0, 0, 0); // desenhando a imagem, baseada nos padrões informados acima
// verificando a sessão aberta, para informar ao formulário o que foi digitado
imagestring($imagem, 4, 0, 0, $_SESSION['autenticagd'], $fonte); // header, necessário
header("Content-type: image/png"); // formato da imagem, no meu caso utilizei PNG.
// vc pode usar imagejpeg, imagegif, etc. Veja as referências no manual do php
imagepng($imagem);
?>
O que temos então, é um arquivo simples, que gera imagens baseado em informações resgatadas de valores previamente informados.
Lembrando que você pode usar letras e números, somente letras, ou somente números como mostrado aqui. Basta adequar a sua necessidade.