• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

REVISTAPHP

[PHP]imagem de segurança para formulario

2 mensagens neste tópico

<?php
session_start();
$vogais = 'aeiou';
	// A variável $consoante recebendo valor
	$consoante = 'bcdfghjklmnpqrstvwxyzbcdfghjklmnpqrstvwxyz';
	// A variável $numeros recebendo valor
	$numeros = '1234567890';
        // A variável $resultado vazia no momento
	$resultado = '';

	// strlen conta o nº de caracteres da variável $vogais
	$a = strlen($vogais)-1;
	// strlen conta o nº de caracteres da variável $consoante
	$b = strlen($consoante)-1;
	// strlen conta o nº de caracteres da variável $numeros
	$c = strlen($numeros)-1;

 for($x=0;$x<=1;$x++)
	{	// A função rand() tem objetivo de gerar um valor aleatório
		$aux1 = rand(0,$a);
		$aux2 = rand(0,$b);
		$aux3 = rand(0,$c);
		// A função substr() tem objetivo de retornar parte da string
		// Caso queira números com mais digitos mude de 1 para 2 e teste
		$str1 = substr($consoante,$aux1,2);
		$str2 = substr($vogais,$aux2,2);
		$str3 = substr($numeros,$aux3,2);

		$resultado .= $str1.$str2.$str3;
		// Trim remove os espaços a direita e esquerda
		$resultado = trim($resultado);
	} // fecha o for

               // Recebe o valor gerado podenso ser senha ou numero de verifição
	$valorgerado = $resultado;


// Pegamos o valor gerado criamos um md5 32 caracteres e pegamos os 6 primeiros
$cod = strtoupper(substr(md5($valorgerado),0,6));

// Defininos nosso header
header("Content-Type: image/png");
// Defininos a largura da imagem
$xx = 70;
// Defininos a altura da imagem
$yy = 20;

$im = imagecreate($xx, $yy) or die('Image create error!');
$bgcolor = imagecolorallocate($im, 255, 255, 255);
$bordercolor = imagecolorallocate($im, 0, 0, 0);
$linecolor = imagecolorallocate($im, 200, 110, 255);
$fontcolor = imagecolorallocate($im, 0, 0, 0);
// Criamos linhas na imagem
for($x=7; $x < $xx-7; $x+=5) {
   imageline($im, $x+7, 0, $x-7, $yy-1, $linecolor);
   imageline($im, $x-7, 0, $x+7, $yy-1, $linecolor);
} // for
for($y=3; $y < $yy; $y+=3) imageline($im, 0, $y, $xx-1, $y, $linecolor);
// Escrevemos na imagem o conteúdo da variavel $cod
imagestring($im, 5, 8, 1, $cod, $fontcolor);
imageline($im, 0, 0, 0, $yy-1, $bordercolor);
imageline($im, 0, 0, $xx-1, 0, $bordercolor);
imageline($im, 0, $yy-1, $xx-1, $yy-1, $bordercolor);
imageline($im, $xx-1, 0, $xx-1, $yy-1, $bordercolor);

imagepng($im);
imagedestroy($im);
?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Usei este código juntamente com um outro código que fazia a mesma coisa e um login criado por mim.

está tudo a funcionar, penso eu, a unica coisa mal é que a imagem nao aparece. (a imagem esta a ser bem criada).

Deve estar a faltar qualquer coisa, se alguem souber e quiser ajudar fica aqui o código:

register.php

<?php
session_start();

$_SESSION['image_code'] = strtolower(substr(md5(time()), 0, 6));

$errors = FALSE;

if (isset($_POST['submit'])) {
if(!$_POST['nick']){
	$errors = TRUE;
	echo "You need to introduce a nickname.";?><BR>
<?php
} 
elseif ($_POST['nick'][0] == ' ' | $_POST['nick'][strlen($_POST['nick'])-1] == ' '){
	$errors = TRUE;
	echo "Your nickname can't start or end with a space.";?><BR>
<?php
} 
else {
	$nick = strtolower($_POST['nick']);
}

if(!$_POST['pass']){
	$errors = TRUE;
	echo "You need to introduce a password.";?><BR>
<?php
} elseif(strtolower($_POST['pass']) != strtolower($_POST['cpass'])){
	$errors = TRUE;
	echo "The Confirm password isn't equal to the password.";?><BR>
<?php
} else {
	$pass = strtolower($_POST['pass']);
}

if(!$_POST['email']){
	$errors = TRUE;
	echo "You need to introduce an e-mail.";?><BR>
<?php
} elseif(strtolower($_POST['email']) != strtolower($_POST['cemail'])){
	$errors = TRUE;
	echo "The Confirm e-mail isn't equal to the e-mail.";?><BR>
<?php
} else {
	$email = strtolower($_POST['email']);
}

if(strtolower($_POST['image_code']) != $_SESSION['image_code']){
	$error = TRUE;
	$_SESSION['image_code'] = strtolower(substr(md5(time()), 0, 6));
	echo "Invalid securety code.";?><BR>
<?php
}
if($errors == FALSE){
	include "config.php";
	$bd_connection = mysql_connect(BD_SERVER, BD_ADMIN, BD_PASS) or die(mysql_error());
	mysql_select_db(BD_LOGIN) or die(mysql_error());

	$result = mysql_query("SELECT id FROM login WHERE nick = '$nick'") or die(mysql_error());
	$num_rows_result = mysql_num_rows($result);

	if ($num_rows_result != 0) {
		echo "$nick is already in use.";?><BR>
<?php
	} else {
		$result = mysql_query("SELECT id FROM login WHERE email = '$email'") or die(mysql_error());
		$num_rows_result = mysql_num_rows($result);

		if($num_rows_result != 0) {
			echo "$email is already in use.";?><BR>
<?php
		} else {
			$pass = md5($pass);
			$add_member = mysql_query("INSERT INTO login (nick, pass, email)
VALUES ('$nick', '$pass', '$email')");
			$code =  md5(uniqid( time() . $_SERVER['REMOTE_ADDR'] . rand(0, 9) ));
			$result = mysql_query("SELECT id FROM login WHERE nick = '$nick'") or die(mysql_error());
			$line = mysql_fetch_array($result);
			$id = $line['id'];
			mysql_query("INSERT INTO activation (id, code) VALUES ('$id', '$code')");	

			mysql_close($bd_connection);

			$email_mesage = '<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Bem-vindo ao SoccerPlayer!<p><p>
			Os seus dados são os seguintes:<p>
			Nickname: '.$nick.'<p>
			Password: '.$pass.'<p><strong>
			Código de activação: <a href="http://jarsantos.007ihost.com/activation.php?code='.$code.'">http://jarsantos.007ihost.com/activation.php?code='.$code.'</a></strong></p>
			<p>
			Tem uma semana para activar a sua conta.<p><p>
			Atenciosamente,<p>
			SoccerPlayer\'s Admins.';

			$headers  = "MIME-Version: 1.0\r\n";
			$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
			$headers .= "From: \"João Santos\" <jarsantos@gmail.com>\r\n";
			mail($email, "[soccerPlayer] Activação", $email_message, $headers);
			header("Location: login.php");
		}
	}
	mysql_close($bd_connection);
}
}
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<table border="0">
<tr><td>Username:</td><td>
<input type="text" name="nick" maxlength="32">
</td></tr>
<tr><td>Password:</td><td>
<input type="password" name="pass" maxlength="10">
</td></tr>
<tr><td>Confirm Password:</td><td>
<input type="password" name="cpass" maxlength="10">
</td></tr>
<tr><td>E-mail:</td><td>
<input type="text" name="email" maxlength="64">
</td></tr>
<tr><td>Confirm E-mail:</td><td>
<input type="text" name="cemail" maxlength="64">
</td></tr>
<tr><th colspan=2><img src="img.php" /></th></tr>
<tr><th colspan=2><input type="text" name="image_code" maxlength="6" /></th></tr>
<tr><th colspan=2><input type="submit" name="submit" value="Register"></th></tr> </table>
</form>

image.php

<?php
session_start();

if ($_SESSION['image_code']) { 
$code = $_SESSION['image_code'];
header("Content-Type: image/png");

$width = 70;
$heigth = 20;

$image = imagecreate($width, $heigth) or die('Image create error!');

$bgcolor = imagecolorallocate($image, 255, 255, 255);
$bordercolor = imagecolorallocate($image, 0, 0, 0);
$linecolor = imagecolorallocate($image, 200, 110, 255);
$fontcolor = imagecolorallocate($image, 0, 0, 0);
// Criamos linhas na imagem
for($x=7; $x < $width-7; $x+=5) {
    imageline($image, $x+7, 0, $x-7, $heigth-1, $linecolor);
    imageline($image, $x-7, 0, $x+7, $heigth-1, $linecolor);
} // for
for($y=3; $y < $heigth; $y+=3) imageline($image, 0, $y, $width-1, $y, $linecolor);
// Escrevemos na imagem o conteúdo da variavel $cod
imagestring($image, 5, 8, 1, $code, $fontcolor);
imageline($image, 0, 0, 0, $heigth-1, $bordercolor);
imageline($image, 0, 0, $width-1, 0, $bordercolor);
imageline($image, 0, $heigth-1, $width-1, $heigth-1, $bordercolor);
imageline($image, $width-1, 0, $width-1, $heigth-1, $bordercolor);

imagepng($image);
imagedestroy($image);
}
?>

Já agora agradeço ao criador deste tópico porque ajudou-me bastante a perceber a lógica por trás da programação.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora