آموزش ساخت سیستم لایسنس برای اسکریپت

adnan magic

تازه وارد
درود بر همه شما دوستان عزیز!

براتون امروز آموزش گذاشتن کپچا ریاضی رو میزرام که با بقیه کپچا فرق می کنه

معمولا همه کپچا ها یه کد میارن میگن وارد کن ولی من براتون کپچا جمع اعداد رو آوردم

فقط دوستان تو این کد های php اینجا یکمی در به داغون نشون میده به بزرگی خودتون ببخشید :D

خوب اول یه صفحه html بسازید

مانند کد های زیر:


کد:
<html dir="rtl"><head><title>کپچای عددی</title></head><body>
<div align="center"><fieldset style="width: 40%; border-radius: 15px; border: 2px solid #333333;"><legend>فرم</legend>
<form action="captchacheck.php" method="POST"><img src="captcha.php" alt="captcha"></img><br><input type="text" placeholder="جواب سوال بالا را به صورت عددی وارد کنید" name="captcha" /><br><input type="submit" value="ثبت" /></form>
</fieldset></div>
</body></html>
خوب می بینید که یه صفحه ساده به علاوه یه فرم هستش ولی برای اینکه قشنگتر بشه یکمی روش کار کردم ولی زیاد نه :-"

خوب می بینید که یه تصویر هستش که آدرسش captcha.php هستش!

خوب باید بریم سراغ این صفحه

حالا هر جایی که اون صفحه html رو ساختید یه فایل دیگه به نام captcha.php بسازید

و کد های زیر روی توش بریزید:


کد:
<?phpsession_start();header("Content-Type: image/png" ) ;$a = rand(10, 99);$b = rand(1, 9);$c = $a + $b;$d = $a . '+' . $b;$im = @imagecreate(190, 20)    or die("Cannot Initialize new GD image stream" );$background_color = imagecolorallocatealpha($im,255,5,255,127);$text_color = imagecolorallocate($im, 233, 14, 91);imagestring($im, 10, 1, 1,  "$d", $text_color);imagepng($im);imagedestroy($im);$_SESSION['cap'] = $c;?>
خوب بریم سر توضیحات این کد ها

در خط اول پی اچ پی رو شروع کردیم

بعدش سیشن رو شروع کردیم

در پاراگراف زیر:


کد:
$a = rand(10, 99);$b = rand(1, 9);$c = $a + $b;$d = $a . '+' . $b;
در خط اول یه عدد راندوم ( تصادفی ) از 10 تا 99 را در متغییر $a ذخیره کردیم

و در خط دوم یک عدد راندوم از 1 تا 9 را دز متغییر $b ذخیره کریدم

در حقیقت متغییر $a همیشه یک عدد دو رقمی و متغییر $b همیشه یک عدد یک رقمی خواهد بود. البته می تونید به سلیقه خودتون افزایش یا کاهش بدید ولی اینجوری بهتره چون کاربر هم گیج نمیشه. :D

خوب در خط سوم متغییر های $a و $b رو جمع کردیم ولی اینو به کاربر نشون نمی دیم!

و در خط چهارم شکل ظاهری $a به علاوه $b رو ذخیره کردیم!

حالا شاید بگید این دو تا چه فرقی باهم دارن؟ یه مثال میزنم

فرض کنیم $a مساوی 15 باشه و $b مساوی 2 باشه

ما در متغییر $c وقتی این دو تا رو جمع می کنیم در حقیقت متغییر $c مساوی 17 میشه.

ولی در متغییر $d این دو تا رو جمع نمی کنیم بلکه فقط حالتشون رو نشون میدیم که میشه 15+2 و این شکل ظاهری هستش و در حقیقت جمع نشده.

خوب حالا بریم پاراگراف بعدی


کد:
$im = @imagecreate(190, 20)    or die("Cannot Initialize new GD image stream" );$background_color = imagecolorallocatealpha($im,255,5,255,127);$text_color = imagecolorallocate($im, 233, 14, 91);imagestring($im, 10, 1, 1,  "$d", $text_color);imagepng($im);imagedestroy($im);
خوب در این پاراگراف از کتابخانه GD استفاده می کنیم

که من خودم هم زیاد بلد نیستم :-"

ولی یکی چندتا نکته رو بگم

در خط دوم می گه اگه کتابخانه GD روی سرور نصب نبود این پیغام رو نشون بده

در خط بعدی پس زمینه تصویر رو انتخاب می کنیم که اینجا ترنسپرت هستش

در خط بعدی رنگ نوشته رو انتخاب می کنیم که قرمز هستش

تمامی این رنگ ها به صورت RGB هستن

در خط بعدی تصویر رو میسازیم که اندازه ها شو تعریف کردیم و در وسطش از متغییر $d استفاده کردیم که متغییر $d رو چاپ می کنه!

متغییر دی همان حالتش هست نه جواب جمع خوب خط های بعدی رو نمی دونم چیه :D

و در خط زیر


کد:
$_SESSION['cap'] = $c;
متغییر $c که جواب جمع هستش رو در سیشن $_SESSION['cap'] ذخیره می کنیم

و پی اچ پی رو می بندیم

خوب اگه توجه داشتید تو صفحه اول فرم ما به صورت POST به صفحه captchacheck.php ارسال میشد

کد این صفحه:


کد:
<?phpsession_start();$captcha = $_POST['captcha'];if($_SESSION['cap']=="$captcha"){echo "yes";}else {echo "no";}?>
در خط اول پی اچ پی رو شروع می کنیم

در خط دوم فیلد ارسالی که به نام captcha هستش و به صورت POST ارسال شده رو در متغییر $captcha ذخیره می کنیم

و در پاراگراف زیر:


کد:
if($_SESSION['cap']=="$captcha"){echo "yes";}
می گیم اگه اون سیشنی که تو صفحه captcha.php ذخیره کردیم با متغییر $captcha که همون فیلد ارسالی کاربر هستش که کد رو توش زده برابر باشه پیغام yes رو نشون بده

و در پاراگراف زیر:


کد:
else {echo "no";}
می گیم اگه غیر از شرط بالا چیزی بود پیغام no رو نشون بده

و در پایان پی اچ پی رو می بندیم

شما می تونید این صفحه چک کردن رو به سلیقه خودتون ویرایش کنید و هر جوری می خواهید استفاده کنید

در ضمن از زیر همین پست می تونید سورس این پروژه رو دانلود کنید

امید وارم که به درد همتون خورده باشه

در ضمن می خوام در نسخه بعدی + یا - یا × یا / ( تقسیم ) رو به صورت راندوم انتخاب کنم یعنی همیشه + نباشه

و اگه دوستان یاری کنن می خوام یه سیستم کپچا قدرتمند و قوی و تا حدی غیر قابل نفوذ رو طراحی کنیم

هر کسی آماده هستش همکار کنه تو همین تاپیک اعلام کنه

در ضمن نظر هم یادتون نره



 

پیوست‌ها

  • index.zip
    1 کیلوبایت · بازدیدها: 13
آخرین ویرایش توسط مدیر:

alihesari

کاربر عضو
یه دمو یا اسکرین شات قرار بیدین ازش بهتر میشه...

 

adnan magic

تازه وارد
دوستان به خاطر عنوان معذرت می خوام

یه اشتباهی شده

در ضمن من فایل دانلودی گذاشتم

 

farsadf

کاربر عضو
کمک میکنم اما تاحدی که بشه و خوب منابع خارجی رو نباید فراموش کرد در اون موردی که گفتید نمیدونم یه توضیح مختصری بدهم.


کد:
imagepng($im);
imagedestroy($im);
در مورد خط اول - نوع تصویر خروجی تعریف میشه

در مورد خط دوم - تصویر خروجی رو از بین میبره تا تصویر بعدی برای سری بعد ساخته بشه

 
بالا