Bom, aqui vai tutorial para ajudar a reduzir esse tipo de problema. Bom, chega de enrolação e vamos aos passos.
- Crie a seguinte estrutura:
- seusite
- fontes
- captcha.php
- contato.php
- Digite o seguinte código no arquivo captcha.php:
<?php
session_start();
$string = '';
for ($i = 0; $i < 5; $i++) {
$string .= chr(rand(97, 122));
}
$_SESSION['cod_rand'] = $string;
$dir = 'fontes/';
$imagem = imagecreatetruecolor(170, 60);
$preto = imagecolorallocate($image, 0, 0, 0);
$cor = imagecolorallocate($image, 0, 255, 0); // verde
$branco = imagecolorallocate($image, 255, 255, 255);
imagefilledrectangle($image,0,0,399,99,$branco);
imagettftext ($image, 30, 0, 10, 40, $cor, $dir."arial.ttf", $_SESSION['cod_rand']);
header("Content-type: image/png");
imagepng($imagem);
?>
Agora vamos entender o código acima. Primeiro eu iniciei uma sessão, criei uma variavel vazia e através da funçãofor gerei 5 caracteres para colocar na variavel e criei uma variavel de sessão contendo esses 5 caracteres. Veja abaixo:
session_start(); // inicia a sessao
$string = ''; // variavel vazia
for ($i = 0; $i < 5; $i++) { //enquanto a variavel $i for menor que 5, $i+1
$string .= chr(rand(97, 122)); //caracteres que sao colocados na variavel string de forma aleatoria, atraves do codigo ascii (97 a 122, letras minusculas)
}
$_SESSION['cod_rand'] = $string; //criei uma variavel de sessao chamada cod_rand que terá o valor da variavel $string
Na segunda parte do código, define em qual pasta está armazenada a fonte e gerei a imagem. Veja abaixo:
$dir = 'fontes/'; // diretorio onde está a fonte a ser utilizada
$imagem = imagecreatetruecolor(170, 60); //cria uma imagem com o tamanho de 170 x 60 (L x A)
$preto = imagecolorallocate($imagem, 0, 0, 0);
$cor = imagecolorallocate($imagem, 0, 255, 0); // verde
$branco = imagecolorallocate($imagem, 255, 255, 255);
imagefilledrectangle($imagem,0,0,200,100,$branco); //preencho o fundo do retagulo (imagem) de branco
imagettftext ($imagem, 30, 0, 10, 40, $cor, $dir."arial.ttf", $_SESSION['cod_rand']); // gero o texto da imagem na cor verde com a fonte arial.
header("Content-type: image/png");
imagepng($imagem); //gero a imagem em png
Por usar comandos pouco utilizados, muitos acham que é dificil, mas na verdade nao é. Como podem ver, é um código até simples. Mas o código acima apenas gera a imagem e mais nada. Precisamos do formulário de contato, colocar o captcha gerado nele e fazer a validação. Vamos lá. Abra o arquivo contato.php e digite o seguinte código:
- session_start();
- if(isset($_POST['submit'])) { // se o formulário já tiver sido enviado
- if(!empty($_POST['nome']) && !empty($_POST['email']) && !empty($_POST['mensagem']) && !empty($_POST['captcha'])) { //se os campos não estiverem vazios
- if($_POST['captcha'] == $_SESSION['cod_rand']) { // se o digitado no campo captcha for igual a variavel de sessao cod_rand
- $aceito = "Obrigado por entrar em contato.";
- $nome = $_POST['nome'];
- $email = $_POST['email'];
- mail("destino@seusite.com.br","Assunto",$_POST['mensagem'],"From: $nome<$email>");
- } else { // caso o digitado no campo captcha seja diferente da variavel de sessao cod_rand
- $erro = "O código de verificação está incorreto.";
- }
- } else { // caso algum campo não esteja preenchido
- mail("destino@seusite.com.br","Assunto",$_POST['mensagem'],"From: $nome<$email>");
- $erro = "Preencha todos os campos do formulário.";
- }
- }
- ?>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Contato</title>
- <style type="text/css">
- form {
- margin:0;
- padding:0;
- }
- input {
- padding:2px;
- width:200px;
- }
- textarea {
- padding:2px;
- width:200px;
- height:100px;
- }
- .button {
- width:60px;
- }
- p {
- margin:0 0 5px 0;
- padding:0;
- }
- .error {
- color:#FF0000;
- margin:0 0 10px 0;
- }
- .accept {
- color:#339966;
- margin:0 0 10px 0;
- }
- </style>
- </head>
- <body>
- <?php if(!empty($erro)) echo '<div class="error">'.$erro.'</div>'; ?>
- <?php if(!empty($aceito)) echo '<div class="accept">'.$aceito.'</div>'; ?>
- <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
- <p><input type="text" name="nome" /> Nome</p>
- <p><input type="text" name="email" /> Email</p>
- <p><textarea name="mensagem"></textarea></p>
- <img src="/captcha.php"/>
- <p><input type="text" name="captcha" /> Digite o código ao lado</p>
- <p><input type="submit" name="submit" value="Enviar" class="button" /></p>
- </form>
- </body>
- </html>
Embora o formulário não envie nada por email, basta implementar essa função e o formulário estará pronto para uso. Tutorial sobre envio de email: aqui e aqui.
Nenhum comentário:
Postar um comentário