ugrás a tartalomhoz

PHP Captcha segítség

krisee · 2011. Szep. 29. (Cs), 18.25
PHP captcha, mely a regisztrációnál folyamatosan rossz karakterkombinációnak érzékeli a beírt kódot, még akkor is ha a képen látható karakterekkel megegyezik, a beírt karakterkombináció.

Üdv mindenkinek !

Lenne egy kis problémám, írtam egy regisztrációs php-t amely sql adatbázisba menti az adatokat.
Ez eddig működik is, de megpróbáltam a regisztrációt kicsit "nehezíteni" a "botok" számára, így létrehoztam egy php captchát mely így néz ki :



<?php
  session_start();
  header("Content-type: image/jpeg");
 
  // többi kód...
  $im=imagecreatetruecolor(150,40);
 
$feher=imagecolorallocate($im,255,255,255);
$fekete=imagecolorallocate($im,0,0,0);
$szurke=imagecolorallocate($im,125,125,125);

$chars="abcdefghijklmnopqrstuvwxyz23456789?!";
$str="";
for ($i=0;$i<6;$i++){
$rand=rand(0,strlen($chars)-1);
$str.=$chars[$rand];

$_SESSION["captcha"]=$str;
 imagefill($im,0,0,$feher);
  imagettftext($im,20,0,12,32,$szurke,"font.ttf",$str);
  imagettftext($im,20,0,10,30,$fekete,"font.ttf",$str);
 
  imagejpeg($im);
  imagedestroy($im);
?>


Maga a captcha kép kódja :



<?php
session_start();

function random($lenght){
$chars = "abcdefghijklmnopqrstuvwxyz23456789?!";
$str = "";
$size = strlen($chars);
for($i=0;$i<$lenght;$i++){
$str .= $chars[rand(0, $size-1)];
}
return $str;
}

$cap = random(7);
$_SESSION['real'] = $cap;

$image = imagecreate(100, 20);
$background = imagecolorallocate($image, 0,0,0);
$foreground = imagecolorallocate($image, 255,255,255);

imagestring($image, 5,5,1,$cap,$foreground);
header("Content-type: image/jpeg");
imagejpeg($image);

?>


És maga a regisztrációs php :


(A feketével keretezett részek a captcha kódok)

<?php
echo '<h1>Regisztráció</h1>';

$submit = $_POST['submit'];

//form data
$fullname = strip_tags($_POST['fullname']);
$username = strip_tags($_POST['username']);
$password = strip_tags($_POST['password']);
$repeatpassword = strip_tags($_POST['repeatpassword']);
$email = strip_tags($_POST['email']);
$repeatemail = strip_tags($_POST['repeatemail']);
$captcha = strip_tags($_POST['captcha']);
$real = $_SESSION['real'];
$guess = $_POST['captcha'];
$name = $_POST['name'];
$date = date("y-m-d");

if ($submit)
{
 // if ($captcha == $_SESSION['captcha'])
if ($captcha == $_SESSION['captcha'] && $real == $guess)

{
 //check for existance
 if ($fullname&&$username&&$password&&$repeatpassword&&$email&&$repeatemail)

{
$connect = mysql_connect("localhost","root","slipknot456");
mysql_select_db("tisimuvek");//select database

$namecheck = mysql_query("SELECT username FROM users WHERE username='$username'");
$count = mysql_num_rows($namecheck);

if ($count!=0)
{
die("Ilyen nevű felhasználó már létezik!");
}

   if ($password==$repeatpassword)
   {
if ($email==$repeatemail)
{
   //check char lenght of username and fullname
   if (strlen($username)>32||strlen($fullname)>64)
   {
     echo "Túl hosszú>Teljes</b>, vagy <b>Felhasznánálónév</b>!";
   }
   else
   {
     //check password lenght
     if (strlen($password)>64||strlen($password)<6)
     {
       echo "A jelszónak minimum 6, maximum 64 karakterbőell kell hogy álljonn!";
     }
else
{
//register the user!
// encrypt password
$password = $password;
$repeatpassword = $repeatpassword;

//open database
$con = mysql_connect("localhost","root","slipknot456");
if (!$con)
{
die("Nem lehet felkapcsolódni a szerverre, próbálja prár percel késobb ! <a href='index.html'></a> " . mysql_error());
}
else
{

$db = mysql_select_db("tisimuvek", $con);
if (!$db)
{
die('Nincs ilyen nevű adatbázis: ' . mysql_error());
}
else
{
$ins = mysql_query("

INSERT INTO users (fullname, username, password, email, date)
VALUES ('$fullname', '$username', '$password', '$email', '$date')

");
if (!$ins)
{
die('Nincs ilyen nevű tábla, vagy mező: ' . mysql_error());
}
}
}
mysql_close($con);

die ("Siker!! <a href='index.html'> Vissza a főoldalra.</a>");

}
   }
   }
   else
echo "Az email-címek nem egyeznek!";
   }
   else
       echo "A jelszavak nem egyeznek!";

 }
 else
echo "Kérlek töltsd ki az <b>Összes</b> mezőt!";

}
else
echo "A beírt kód helytelen !";
}
?>

<html>
<p>
<form action='register.php' method='POST'>
<table>
<tr>
<td>
Teljes neve :
</td>
<td>
<input type='text' name='fullname' value='<?php echo $fullname; ?>'>
</td>
</tr>
<tr>
<td>
Felhasználó neve :
</td>
<td>
<input type='text' name='username' value='<?php echo $username; ?>'>
</td>
</tr>
<tr>
<td>
Jelszava :
</td>
<td>
<input type='password' name='password'>
</td>
</tr>
<tr>
<td>
Ismételje meg jelszavát :
</td>
<td>
<input type='password' name='repeatpassword'>
</td>
</tr>
<tr>
<td>
Email-címe :
</td>
<td>
<input type='text' name='email' value='<?php echo $email; ?>'>
</td>
</tr>
<tr>
<td>
Ismételje meg email-címét :
</td>
<td>
<input type='text' name='repeatemail' value='<?php echo $repeatemail; ?>'>
</td>
</tr>
<tr>
<td>
Kérlek írd be a képen látható kódot !<br></br>
</td>
<td>
<img src='image.php'> <br> <input type='text' name='captcha'/> </br>
</td>
</tr>
</table>
<p>
<input type='submit' name='submit' value='Register'>
</form>
</html>


Nos térjünk is ki a problémára. A regisztráció, az ellenőrzéssel együtt tökéletesen működik, míg el nem jutunk a captchához. A probléma a captchával pedig az, hogy a felhasználó a regisztrációnál hiába írja be a képen látható helyes kódot, a captcha nem fogja elfogadni.

Ezt szeretném megoldani, nem kérem hogy oldjátok meg helyettem, sőt inkább csak példákkal dobálózzatok, vagy célozgatással, mert zseretném megtanulni, hogy mégis hogyan kell ezt "működőképesre" megírni :D

Előre is köszönöm !
 
1

Kód

Poetro · 2011. Szep. 29. (Cs), 20.01
Kódot kérünk, mi nem vagyunk gépék, hogy képről olvassunk.
2

Nem értem

krisee · 2011. Szep. 29. (Cs), 20.10
Hogy érted, hogy kódot nem képet, mind a 3 php fentvan 3 külön képen, így a képek tartalmazzák a phpk-ban megírt összes kódot.
3

Szöveget küldj. Képben nem

kuka · 2011. Szep. 29. (Cs), 20.14
Szöveget küldj. Képben nem lehet keresni és képről nem lehet véleményt kérni a PHP értelmezőtől.

(Ha pedig mindenképpen kép, akkor vagy ne legyen BMP, vagy ne legyen összesen 17Mb, vagy ne modemes sebességgel kelljen kivárjuk a saját gépedről. Ez így mind egybe a kegyetlenség határát súrolja.)
4

BMP-JPG

krisee · 2011. Szep. 29. (Cs), 20.38
Átraktam jpg-re remélem jobb lett, és bocsi nem figyeltem hogy bmp volt :S
Felraktam a 2 kisebb php-t kódban is, de a nagyobbal inkább nem csinálom meg, mert :
- 1 túl hosszú lenne
- 2 ha rövidíteném, nem tudom hogy mi lenne hasznos számodra
5

biztos vagy benne, hogy a

szabo.b.gabor · 2011. Szep. 29. (Cs), 20.41
biztos vagy benne, hogy a register.php-ban elindul rendesen a session?

azért szar amúgy a kép, mert nem bírod belőle könnyen kimásolni a kódot és tesztelni saját gépen, hogy mi nem működik.. no de mindegy.

amúgy mi történik, ha a regisztrációkor azt írod a felhasználónévbe, hogy
';delete * from users; --
6

Nem tudom

krisee · 2011. Szep. 29. (Cs), 20.46
A register.php-ban elindul rendesen a session, avval elvileg nincsen gond.
fellöktem a kódokat a két kisebb képről, de ha akarod fellököm a "nagyobbról" is.

És nem tudom, még nem próbáltam.
Mire gondolsz, mi történne?
7

akkor így mondom. nincs

szabo.b.gabor · 2011. Szep. 30. (P), 08.46
akkor így mondom. nincs

session_start();

hívás a register.php-ban.

a másikat meg próbáld ki :)
8

Nem történik semmi, mert a

H.Z. v2 · 2011. Szep. 30. (P), 09.14
Nem történik semmi, mert a delete-nek nincs "from" előtti paramétere! ;-)
(ettől persze igazad van)
9

tudtam, hogy valamit be fogok

szabo.b.gabor · 2011. Szep. 30. (P), 14.00
tudtam, hogy valamit be fogok nézni :)