Проста captcha

katsar0v

Registered
Някой знае ли някоя работеща проста captcha :(
Възможно ли е без бисквитки ?
 
katsar0v каза:
Някой знае ли някоя работеща проста captcha :(
Възможно ли е без бисквитки ?

Captcha.php
<?php
session_start();
header("Content-type: image/png");
$color = "313131";
$textcolor = "FFFFFF";
$rand = rand(10000, 99999);
$code = substr($rand, 0, 5);
$_SESSION['code'] = $code;
$R = hexdec(substr($color, 0, 2));
$G = hexdec(substr($color, 2, 2));
$B = hexdec(substr($color, 4, 2));
$Rt = hexdec(substr($textcolor, 0, 2));
$Gt = hexdec(substr($textcolor, 2, 2));
$Bt = hexdec(substr($textcolor, 4, 2));
$im = imagecreate(50, 25);
$background_color = imagecolorallocate($im, $R, $G, $B);
$textcolor = imagecolorallocate($im, $Rt, $Gt, $Bt);
imagestring($im, 4, 4, 4, $code, $textcolor);
imagepng($im);
imagedestroy($im);
?>

Index.php
<?php
require_once "captcha.php";

echo $_SESSION['code'];
?>
 
<?php
if(isset($_SESSION['user']))
{
header('location:index.php');
}
else
{
echo'<table border=0 width=300px height=50px style="margin-top:50px;">
<tr >
<form action="register.php" method="post"><td valign="top">Username<font size="2px" color="red">*</font>:</td><td>
<input type="text" name="user" /><br/><br/></td></tr><tr><td valign="top">Password<font size="2px" color="red">*</font>:</td><td>
<input type="password" name="pass"/><br/><br/></td></tr><tr><td valign="top">Skype:</td><td>
<input type="text" name="skype" /></td></tr>
</table><br/><br?
<input type="submit" value="Регистрирай се!"/></form><br/>
';
}
$username = htmlspecialchars(mysql_real_escape_string($_POST['user']));
$password = htmlspecialchars(mysql_real_escape_string($_POST['pass']));
$skype = htmlspecialchars(mysql_real_escape_string($_POST['skype']));
if($username)
{
$result=mysql_query("SELECT * FROM users WHERE users='$username'") or die (mysql_error());
$sha=mysql_fetch_assoc($result);
if($sha['users']== $username)
{
echo'Вече има такъв потребител';
}
else
{
if(strlen($password)<6)
{
echo'Паролата трябва да е минимум 6 символа';
}
else
{$go=mysql_query("INSERT INTO users (`id`,`users`,`pass`,`skype`) VALUES ('','".$username."','".$password."','".$skype."')") or die (mysql_error());
echo'Вие се регистрирахте успешно';
}
}
}
echo'<br/><div class="nfo"><font size="2px" color="red">*</font>-Задължителни полета<br/></div>';
?>

можеш ли да я свържеш , така че да иска код при регистрацията
 
katsar0v каза:
<?php
if(isset($_SESSION['user']))
{
header('location:index.php');
}
else
{
include "captcha.php";
echo'<table border=0 width=300px height=50px style="margin-top:50px;">
<tr >
<form action="register.php" method="post"><td valign="top">Username<font size="2px" color="red">*</font>:</td><td>
<input type="text" name="user" /><br/><br/></td></tr><tr><td valign="top">Password<font size="2px" color="red">*</font>:</td><td>
<input type="password" name="pass"/><br/><br/></td></tr><tr><td valign="top">Skype:</td><td>
<input type="text" name="skype" /></td></tr>
<tr><td valign="top">Captcha:</td><td>
<img src="captcha.php" border="0" />
<input type="text" name="kod" /></td></tr>

</table><br/><br />
<input type="submit" value="Регистрирай се!"/></form><br/>
';
}
$username = htmlspecialchars(mysql_real_escape_string($_POST['user']));
$password = htmlspecialchars(mysql_real_escape_string($_POST['pass']));
$skype = htmlspecialchars(mysql_real_escape_string($_POST['skype']));
$kod = $_POST['kod'];
if($username)
{
$result=mysql_query("SELECT * FROM users WHERE users='$username'") or die (mysql_error());
$sha=mysql_fetch_assoc($result);
if($sha['users']== $username)
{
echo'Вече има такъв потребител';
}
else
{
if(strlen($password)<6)
{
echo'Паролата трябва да е минимум 6 символа';
}
else
{
if($kod != $_SESSION['code']) {
echo 'Кода не съвпада с този от картинката';
}

else
{$go=mysql_query("INSERT INTO users (`id`,`users`,`pass`,`skype`) VALUES ('','".$username."','".$password."','".$skype."')") or die (mysql_error());
echo'Вие се регистрирахте успешно';
}
}
}
echo'<br/><div class="nfo"><font size="2px" color="red">*</font>-Задължителни полета<br/></div>';
?>

можеш ли да я свържеш , така че да иска код при регистрацията
 
Parse error: syntax error, unexpected $end in /var/www/virtual/katsarov.info/htdocs/asd/core_files/register.php on line 52
 
Извинявам се:
<?php
if(isset($_SESSION['user']))
{
header('location:index.php');
}
else
{
include "captcha.php";
echo'<table border=0 width=300px height=50px style="margin-top:50px;">
<tr >
<form action="register.php" method="post"><td valign="top">Username<font size="2px" color="red">*</font>:</td><td>
<input type="text" name="user" /><br/><br/></td></tr><tr><td valign="top">Password<font size="2px" color="red">*</font>:</td><td>
<input type="password" name="pass"/><br/><br/></td></tr><tr><td valign="top">Skype:</td><td>
<input type="text" name="skype" /></td></tr>
<tr><td valign="top">Captcha:</td><td>
<img src="captcha.php" border="0" />
<input type="text" name="kod" /></td></tr>
</table><br/><br />
<input type="submit" value="Регистрирай се!"/></form><br/>
';
}
$username = htmlspecialchars(mysql_real_escape_string($_POST['user']));
$password = htmlspecialchars(mysql_real_escape_string($_POST['pass']));
$skype = htmlspecialchars(mysql_real_escape_string($_POST['skype']));
$kod = $_POST['kod'];
if($username)
{
$result=mysql_query("SELECT * FROM users WHERE users='$username'") or die (mysql_error());
$sha=mysql_fetch_assoc($result);
if($sha['users']== $username)
{
echo'Вече има такъв потребител';
}
else
{
if(strlen($password)<6)
{
echo'Паролата трябва да е минимум 6 символа';
}
else
{
if($kod != $_SESSION['code']) {
echo 'Кода не съвпада с този от картинката';
}
else
{
{$go=mysql_query("INSERT INTO users (`id`,`users`,`pass`,`skype`) VALUES ('','".$username."','".$password."','".$skype."')") or die (mysql_error());
echo'Вие се регистрирахте успешно';
}
}
}
echo'<br/><div class="nfo"><font size="2px" color="red">*</font>-Задължителни полета<br/></div>';
?>
 
Това ти е captcha.php

Код:
<?php
	$size_x = 200;
	$size_y = 75;
	
	$code = rand(10000,99999);
	
	$_SESSION['captcha_code'] = $code;
	
	$code = substr($code,0,5);
	
	$space_per_char = $size_x / (strlen($code)+1);
	
	$img = imagecreatetruecolor($size_x, $size_y);
	
	$background = imagecolorallocate($img,255,255,255);
	
	$border = imagecolorallocate($img,128,128,128);
	
	$colors[] = imagecolorallocate($img,128,64,192);
	$colors[] = imagecolorallocate($img,192,64,128);
	$colors[] = imagecolorallocate($img,108,192,64);
	
	imagefilledrectangle($img,1,1,$size_x - 2, $size_y - 2, $background);
	imagerectangle($img, 0, 0, $size_x - 1, $size_y - 1, $border);
	
	for($i = 0; $i < strlen($code); $i++)
	{
	
		$color = $colors[$i % count($colors)];
		imagettftext(
			$img,
			28 + rand(0,8),
			-20 + rand(0,40),
			
			($i + 0.3) * $space_per_char,
			
			50 + rand(0,10),
			$color,
			'arial.ttf',
			$code{$i}
			
		);
	}
	
	imageantialias($img,true);
	
	for($i = 0; $i < 1000; $i++)
	{
	
		$x1 =  rand(5, $size_x - 5);
		$y1 =  rand(5, $size_y - 5);
	
		$x2 = $x1 - 4 + rand(0,8);
		$y2 = $y1 - 4 + rand(0,8);
	
			imageline
			(
	
				$img, $x1, $y1, $x2, $y2,
				$colors[rand(0, count($colors)-1)]

			);
	
	}
	
	header('Content-type:image/png');
	imagepng($img);
	imagedestroy($img);
?>


Ето ти и проверката при формуляра:


Код:
if($_POST['code'] != $_SESSION['captcha_code'])
{
echo 'Не сте въвели правилно кода от картинката!';
}

Вкарваш картинката във даден формуляр с:

Код:
<img src="captcha.php" title="captcha" alt="captcha" />
 
bancov96 каза:
Това ти е captcha.php

Код:
<?php
	$size_x = 200;
	$size_y = 75;
	
	$code = rand(10000,99999);
	
	$_SESSION['captcha_code'] = $code;
	
	$code = substr($code,0,5);
	
	$space_per_char = $size_x / (strlen($code)+1);
	
	$img = imagecreatetruecolor($size_x, $size_y);
	
	$background = imagecolorallocate($img,255,255,255);
	
	$border = imagecolorallocate($img,128,128,128);
	
	$colors[] = imagecolorallocate($img,128,64,192);
	$colors[] = imagecolorallocate($img,192,64,128);
	$colors[] = imagecolorallocate($img,108,192,64);
	
	imagefilledrectangle($img,1,1,$size_x - 2, $size_y - 2, $background);
	imagerectangle($img, 0, 0, $size_x - 1, $size_y - 1, $border);
	
	for($i = 0; $i < strlen($code); $i++)
	{
	
		$color = $colors[$i % count($colors)];
		imagettftext(
			$img,
			28 + rand(0,8),
			-20 + rand(0,40),
			
			($i + 0.3) * $space_per_char,
			
			50 + rand(0,10),
			$color,
			'arial.ttf',
			$code{$i}
			
		);
	}
	
	imageantialias($img,true);
	
	for($i = 0; $i < 1000; $i++)
	{
	
		$x1 =  rand(5, $size_x - 5);
		$y1 =  rand(5, $size_y - 5);
	
		$x2 = $x1 - 4 + rand(0,8);
		$y2 = $y1 - 4 + rand(0,8);
	
			imageline
			(
	
				$img, $x1, $y1, $x2, $y2,
				$colors[rand(0, count($colors)-1)]

			);
	
	}
	
	header('Content-type:image/png');
	imagepng($img);
	imagedestroy($img);
?>


Ето ти и проверката при формуляра:


Код:
if($_POST['code'] != $_SESSION['captcha_code'])
{
echo 'Не сте въвели правилно кода от картинката!';
}

Вкарваш картинката във даден формуляр с:

Код:
<img src="captcha.php" title="captcha" alt="captcha" />

Той иска упростена, а не усложнена мислиш ли, че знае какво правят половината променливи в captcha.php ако иска да го подифицира ;]
 
Има ли нужда да се намесваш, където не ти е работа. Това е проста captcha, не е чак толкова сложна. Генерира случайно петцифрено число и наслагва черти за по-трудно четене.
 
Можеш да опиташ и друг подход, за да спреш ботовете :) Например въпрос, на който верния отговор може да го знае само човек.

Един изключително прост пример

Код:
<?php
$options = array
(
    'blank' => NULL,
    'black' => 'Черен',
    'orange' => 'Оранжев',
    'red' => 'Червен',
    'blue' => 'Син',
    'yellow' => 'Жълт',
    'green' => 'Зелен'
);

$answer = 'red';

echo '<form action="" method="POST">
Какъв е този цвят? <span style="background-color: #FF0000">          </span>

<select name="antibot">';

foreach($options as $key => $value)
{
    echo '
    <option value="' . $key . '">' . $value . '</option>';
}

echo '
</select>
<input type="submit" name="submit" value="Продължи" />
</form>';

if(isset($_POST['submit']))
{
    if($_POST['antibot'] != $answer)
        die('Регистрацията не може да продължи..');
    else
        echo 'Верен отговор :P';
}
?>
 

Back
Горе