جهِّز نفسك لسوالف كاست، واحصل على Macbook Air
ويكيمانيا 2008. الإسكندرية، من 17 وحتى 19 يوليو

 

العودة   سوالف سوفت > قسم تطوير وبرمجة المواقع للمتقدمين > PHP
المدوّنات البحث مشاركات اليوم اجعل كافة المشاركات مقروءة

رد
 
LinkBack أدوات الموضوع
عضو نشيط
تاريخ التسجيل: May 2007-
#1 (permalink)  
طريقة عمل رمز التحقق captcha


باسم الله الرحمان الرحيم
وَلَوْ أَرَادُواْ الْخُرُوجَ لأَعَدُّواْ لَهُ عُدَّةً وَلَكِن كَرِهَ اللَّهُ انبِعَاثَهُمْ فَثَبَّطَهُمْ وَقِيلَ اقْعُدُواْ مَعَ الْقَاعِدِينَ
سورة التوبة الآية 46
السلام عليكم و رحمة الله و بركاته

قصد حماية الموقع من الأوامر المزعجة و الــ spam تلجأ الكثير من المواقع إلى نظام captcha أو ما يطلق عليه باللغة العربية : رمز التحقق
ودلك للتأكد من أن المستخدم الذي ادخل البيانات إنسان و ليس برنامج
لاحظ التالي
1
نموذج تسجيل عضوية جديدة في Hotmail يفرض هده العملية



2
نموذج التسجيل في سكربت LayeredPanel كذلك







3
في مجلة يستطيع المشرف العام منع الزائر من تسجيل الدخول إلا بعد كتابة كود التحقق







سأحاول شرح إنجاز هده العملية الهامة على الموقع حسب خبرتي المتواضعة
ودلك بالاستناد إلى مثال بسط جدا لا يسمح لك بمشاهدة محتوى صفحة معينة إلا بعد إدخال رمز التحقق

فعلى بركة الله نبدأ
1 انشاء صورة الكود
أنشء ملفا جديدا و ابدأ البرمجة بفتح الجلسة و تخزين رقم عشوائي في متغير


كود PHP:
<?php
 
 
 session_start
();




قم بتخزين قيمة المتغير $azizsoft_ca في جلسة و لتكن على سبيل المثال

كود PHP:
$_SESSION['azizsoft_ca'] = $azizsoft_ca


نحتاج لبرمجة صورة التحقق التي سيظهر داخلها الكود


1 تحديد اسم و نوع الملف عن طريق دالة header


كود PHP:
header('Content-Disposition: filename="azizsoft.jpg"'); 
كود PHP:
 header('(anti-spam-content-type:) image/jpeg'); 

2 إنشاء إطار الصورة استنادا إلى متغيري الطول و الارتفاع


كود PHP:
$height 25
$width 62
$image_p imagecreate($width$height); 

3 تحديد لون الكتابة و لون الخلفية

كود PHP:
$black imagecolorallocate($image_p000); 
$white imagecolorallocate($image_p255255255); 


4 تحديد حجم الخط


كود PHP:
$font_size 28

5 إنشاء الصورة و كتابة الرقم العشوائي داخلها

كود PHP:
imagestring($image_p$font_size55$azizsoft_ca$white); 


6 تحديد الجودة

كود PHP:
imagejpeg($image_pnull20); 
سنحصل على نتيجة مثل






الكود كاملا
كود PHP:
<?php
session_start
();
$azizsoft_ca rand(100000999999);
$_SESSION['azizsoft_ca'] = $azizsoft_ca;
 
header('Content-Disposition: filename="azizsoft.jpg"'); 
header('(anti-spam-content-type:) image/jpeg'); 
 
 
$height 25
$width 62
$image_p imagecreate($width$height); 
$black imagecolorallocate($image_p000); 
$white imagecolorallocate($image_p255255255); 
$font_size 28
imagestring($image_p$font_size55$azizsoft_ca$white); 
imagejpeg($image_pnull20);
 
 
?>


2 تصميم النموذج
الآن لننتقل إلى برنامج front page لتصميم نموذج إدخال كود التحقق
لا أضن أنني في حاجة لشرح خطوات تصميم نموذج بهده البساطة فكل شخص لديه طريقته الخاصة في العمل على front page أو أي برنامج بديل
النموذج سيكون افتراضيا بهذا الشكل








كما تلاحظون فالنموذج مجرد مثال مبسط :
  1. حقل الإدخال
  2. صورة الكود
  3. رز الإدخال
3 تصميم صفحة الاستقبال

أولا لابد من فتح الجلسة



كود PHP:
<?

كود PHP:
 session_start(); 

إنشاء الشرط الذي يتمحور حوله الموضوع

هل توجد جلسة؟
هل القيمة القادمة من النموذج لا تطابق قيمة متغير الجلسة $azizsoft_ca
و النص البرمجي للشرط سيكون افتراضيا بهدا الشكل



كود PHP:
if(!$_SESSION['azizsoft_ca'] || $_SESSION['azizsoft_ca'] != $_POST['azizsoft_ca']) 

هدا باعتبار أن azizsoft_ca هو اسم حقل إدخال الكود
ادا كانت الشروط الموجودة داخل الدالة الشرطية غير متوفرة فالنتيجة هي



كود PHP:
{
die(
"عفوا ! <br> كود التحقق الدي أدخلته غير صحيح");


بهدا سيتوقف الزائر عند هده العبارة
يمكن جلب صفحة النموذج داخل الشرط عن طريق دالة include و دلك حتى يتمكن الزائر من مشاهدة النموذج دون الحاجة للعودة للصفحة السابقة




كود PHP:
{
echo 
"عفوا ! <br> كود التحقق الدي أدخلته غير صحيح";
include(
"ca.html");
die();



هدا باعتبار أن ca.html هو اسم صفحة النمودج
أسفل هده المنطقة يمكنك برمجة ما تريد أن يشاهده الزائر عند ادخال الكود بشكل صحيح
المتال كاملا



كود PHP:
<?
session_start
();
if(!
$_SESSION['azizsoft_ca'] || $_SESSION['azizsoft_ca'] != $_POST['azizsoft_ca'])
{
 
die(
"ere");
 
}
echo 
"ok<br>";
 
?>


المتال الكامل للدرس مرفق مع الموضوع
التحية للجميع
azizsoft






الملفات المرفقة
نوع الملف: zip ca.zip‏ (968 بايت, المشاهدات 93)
__________________
a000a.uni.cc
Maximum file size : 2 mb
جميع الامتدادات متاحة بدون استتناء
--------------------
[نقاش] : أساسيات برمجة منتدى
azizsoft غير متواجد حالياً   قديم 08-04-2008, 11:06 PM
رد مع اقتباس
عضو نشيط جدا
تاريخ التسجيل: Jan 2008-
#2 (permalink)  

مشكور على الموضوع المهم

لدي اضافة فقط


هذا فانكشن جاهز يعمل لك الصورة الخاصة بالتحقق

كود PHP:
// دالة كتابة رقم الكود الأمني على الصورة
  
function Imagen($codigo)
  {
    
$codigo base64_decode($codigo);
    
$imagen imagecreatefromjpeg("images/codigo.jpg");
    
$color_texto imagecolorallocate($imagen808080);
    
header("(anti-spam-content-type:) image/jpeg");
    
imagestring ($imagen5122$codigo$color_texto);
    
imagejpeg($imagen''75);
    
imagedestroy($imagen);
      die();
  }
// #############################################################################
// أمر بدأ الكتابة
  
$op $_GET["op"];
  switch (
$op)
  {
    case 
"Imagen":
      
$codigo $_GET["codigo"];
      
Imagen($codigo);
    break;
  } 
وهذا الكود الذي يوضع في النموذج :



كود PHP:
<td>Image Code</td>
            <td>
              <img src="<? $codigo rand(100000999999); $codigo base64_encode($codigo); echo "$PHP_SELF?op=Imagen&codigo=$codigo"?>" alt="Secure Code">
              <input type="hidden" name="codigo" value="<?= $codigo ?>">
              <input type="hidden" name="enviado" value="<?= rand(1111111,9999999?>">
            </td>


وهذه الجملة الخاصة في التحقق من ان الرقم نفس الصورة
كود PHP:
  if( base64_decode($_POST["codigo"])== $_POST["codigouser"] ) 



فقط !!






__________________
الإن حرق أسعار الإستضافة!!
5 جيجا مساحة - 25 جيجا باندوث - كل الخصائص غير محدودة
فقط ب 200 ريال سعودي لمدة محدودة
للمراسلة
admin@al-nahhat.com
BrushZ.net للبيع مع السكربت الخاص به [مزاد]
النحات غير متواجد حالياً   قديم 09-04-2008, 12:07 AM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: May 2006-
#3 (permalink)  

شكرا اخي الكريم على هذا الدرس

وجعله الله في موازين اعمالك ..






__________________
للبيع دومين (واحة)
w7a.net
للاستفسار أرجو مراسلتي

::::::::::::::::::: لمراسلتي :::::::::::::::::::
:::::::::::: abdvvv (at) gmail.com ::::::::::::

بطاقات إسلامية
الحارث غير متواجد حالياً   قديم 09-04-2008, 12:24 AM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: Jun 2005-
#4 (permalink)  

اكثر من رائع ... شكرا لك عزيز سوفت و بارك الله فيك






__________________
Keepondev | مدونه شديد التخصص فى الجافاسكربت
Dezology غير متواجد حالياً   قديم 09-04-2008, 04:26 PM
رد مع اقتباس
عضو جديد
تاريخ التسجيل: Apr 2008-
#5 (permalink)  

ما شاء الله
بارك الله فيك أخي الكريم






mas123 غير متواجد حالياً   قديم 09-04-2008, 04:40 PM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: Jan 2008-
#6 (permalink)  

شكرأ كثير






__________________
دليل شرق اوسطي مصنف حسب الدول العربية
بأمكانك اضافة رابطك تحت اسم دولتك

بيج رانك 3

http://www.middleastpost.org/

samehzone غير متواجد حالياً   قديم 09-04-2008, 08:57 PM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: May 2007-
#7 (permalink)  

مشكورين كتير على مروركم و الحمد لله أن الدرس نال اعجابكم






__________________
a000a.uni.cc
Maximum file size : 2 mb
جميع الامتدادات متاحة بدون استتناء
--------------------
[نقاش] : أساسيات برمجة منتدى
azizsoft غير متواجد حالياً   قديم 09-04-2008, 11:35 PM
رد مع اقتباس
عضو نشيط جدا
تاريخ التسجيل: Jan 2008-
#8 (permalink)  

العفو يا شباب ...






__________________
الإن حرق أسعار الإستضافة!!
5 جيجا مساحة - 25 جيجا باندوث - كل الخصائص غير محدودة
فقط ب 200 ريال سعودي لمدة محدودة
للمراسلة
admin@al-nahhat.com
BrushZ.net للبيع مع السكربت الخاص به [مزاد]
النحات غير متواجد حالياً   قديم 10-04-2008, 03:53 PM
رد مع اقتباس
عضو نشيط جدا
تاريخ التسجيل: May 2007-
#9 (permalink)  

جميل جداً ..

لجعل الصورة حروف وأرقام نعمل الآتي ..
كود PHP:
$azizsoft_ca substr(md5(time()), 06); 
لاحظ اننا استخدمنا time() بدلاً من rand() وبذلك نضمن وجود كود جديد مختلف عن غيره في كل عمليه أو بالاحرى في كل ثانية ..






asaamas غير متواجد حالياً   قديم 14-04-2008, 02:28 PM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: May 2007-
#10 (permalink)  

أعتقد أن الاكتفاء بالأرقام أفضل حتى لا يضطر المستخدم في كل مرة الى تغير لغة الكتابة
أما ادا كنت تريد استخدام الحروف الى جانب الأرقام فمن الأفضل استخدام هده الدالة

كود PHP:
function rand_string($length

    
$set = array("-","_","a","A","b","B","c","C","d","D","e","E","f","F","g","G","h","H","i","I","j","J","k","K","l","L","m","M","n","N","o","O","p","P","q","Q","r","R","s","S","t","T","u","U","v","V","w","W","x","X","y","Y","z","Z"); 
    
$str
    for(
$i 1$i <= $length$i++) 
    { 
        
$ch rand(0count($set)-1); 
        
$str .= $set[$ch]; 
    } 
    return 
$str

يمكنك تغيير عناصر المصفوفة $set حسب رغبتك

طريقة الاستخدام
كود PHP:
$azizsoft_ca rand_string(4); 
مع استبدال الرقم 4 بعدد الحروف التي تريد أن يتكون منها الرقم العشوائي

و شكرا لاغنائك الموضوع






__________________
a000a.uni.cc
Maximum file size : 2 mb
جميع الامتدادات متاحة بدون استتناء
--------------------
[نقاش] : أساسيات برمجة منتدى
azizsoft غير متواجد حالياً   قديم 14-04-2008, 11:42 PM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: Jan 2008-
#11 (permalink)  

جزاكم الله ألف خير

هذا ماكنت أبحث عنه






__________________
AboRa3d
~][أبـورعــد][~
AboRa3d غير متواجد حالياً   قديم 16-04-2008, 04:08 PM
رد مع اقتباس
عضو سوبر نشيط
تاريخ التسجيل: Apr 2006-
#12 (permalink)  

درس جميل ومفيد

يمكن وضع تشويش تحت اﻷرقام والحروف

الكود
كود PHP:

<?php
$img
=imagecreatetruecolor(120,40);
$bg=imagecolorallocate($img,250,50,80);
$color=imagecolorallocate($img,154,251,23);
$color2=imagecolorallocate($img,250,20,0);
$char=array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","s","t","u","v","w","x","y","z"
,"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","S","R","T","U","V","X","Y","Z",1,2,3,4,5,6,7,8,9,0);
for(
$i=0;$i<6;$i++)
  {
$txt=$char[rand(0,count($char)-1)];
$txt2.=$char[rand(0,count($char)-1)];
imagestring($img,20,rand(5,80),rand(5,20),$txt,$color);
}
imagestring($img,20,40,15,$txt2,$color2);
header("(anti-spam-content-type:) image/png");
imagepng($img);

?>
طبعا المتغير هو $txt2
يمكن حفظه في جلسة ﻻستخدامه التحقق كما في الدرس ...






عبد الواحد البشيري غير متواجد حالياً   قديم 17-04-2008, 01:59 AM
رد مع اقتباس
عضو جديد
تاريخ التسجيل: Apr 2008-
#13 (permalink)  

جزاك الله خيرا أخي عبد الواحد
ولكن أيهما الأساسي ؟!
الأحمر أم الأخضر







التعديل الأخير تم بواسطة : mas123 بتاريخ 17-04-2008 الساعة 03:28 PM.
mas123 غير متواجد حالياً   قديم 17-04-2008, 03:24 PM
رد مع اقتباس
عضو سوبر نشيط
تاريخ التسجيل: Apr 2006-
#14 (permalink)  

اﻷحمر






عبد الواحد البشيري غير متواجد حالياً   قديم 17-04-2008, 10:21 PM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: May 2007-
#15 (permalink)  

الأخ عبد الواحد
شكرا لك على الاضافة الرائعة و شكرا لكل من تفاعل مع الموضوع

بالنسبة للكود الدي طرحته أخي عبد الواحد فاني أرى أنه من الأفضل أن يكون لون التشويش قريب من لون الخلفية

و قد قمت بمحاولة أخرى لخلق صورة أكتر تطورا تعتمد على خلفية صورة بدل أرقام انطلاقا من الكود الدي طرحته
خلفية الصورة تتغير مع كل تحديت و توجد 6 صور مختلفة و يمكن أضافة المزيد

كود الصورة في المرفقات






الملفات المرفقة
نوع الملف: zip code.zip‏ (12.3 كيلوبايت, المشاهدات 11)
__________________
a000a.uni.cc
Maximum file size : 2 mb
جميع الامتدادات متاحة بدون استتناء
--------------------
[نقاش] : أساسيات برمجة منتدى
azizsoft غير متواجد حالياً   قديم 18-04-2008, 11:29 PM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: May 2007-
#16 (permalink)  

متال
http://azizsoft.uni.cc/cod.php






__________________
a000a.uni.cc
Maximum file size : 2 mb
جميع الامتدادات متاحة بدون استتناء
--------------------
[نقاش] : أساسيات برمجة منتدى
azizsoft غير متواجد حالياً   قديم 18-04-2008, 11:32 PM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: Apr 2008-
#17 (permalink)  

جزاك الله خير


تحياتي
نوكيا الشرق الاوسط






menokia غير متواجد حالياً   قديم 20-04-2008, 05:47 AM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: Sep 2006-
#18 (permalink)  

اقتباس:
المشاركة الأصلية كتبت بواسطة azizsoft مشاهدة المشاركة
الأخ عبد الواحد
شكرا لك على الاضافة الرائعة و شكرا لكل من تفاعل مع الموضوع

بالنسبة للكود الدي طرحته أخي عبد الواحد فاني أرى أنه من الأفضل أن يكون لون التشويش قريب من لون الخلفية

و قد قمت بمحاولة أخرى لخلق صورة أكتر تطورا تعتمد على خلفية صورة بدل أرقام انطلاقا من الكود الدي طرحته
خلفية الصورة تتغير مع كل تحديت و توجد 6 صور مختلفة و يمكن أضافة المزيد

كود الصورة في المرفقات

شكرا لك اخي الكريم على الشرح الوافي

ولدي عميل من عملاء السيرفرات يشكو من عدم ظهور رمز التحقق بموقعه

هل بالامكان مساعدته؟

موقعه من هنا:

صراع الحضارات :: أول لعبة عربية حربية استراتيجية أونلاين

بالتوفيق لكما






__________________
جيجا فور مي لتسكين وتمويل وإدارة المواقع
(الاستضافة، الريسيلرات، تمويل المواقع ماليا ، النطاقات ، التعريب ، المساعدة في شراء منتجات ببطاقات الائتمان او الـPayPal ، الإعلان)
http://www.giga4me.com
Giga4Me.com غير متواجد حالياً   قديم 20-04-2008, 02:24 PM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: May 2007-
#19 (permalink)  

Giga4Me.com
هلا بيك و نورت الموضوع

اقتباس:
ولدي عميل من عملاء السيرفرات يشكو من عدم ظهور رمز التحقق بموقعه
هل بالامكان مساعدته؟
ضع ملف الصورة في المرفقات و سأحاول البحت عن المشكلة






__________________
a000a.uni.cc
Maximum file size : 2 mb
جميع الامتدادات متاحة بدون استتناء
--------------------
[نقاش] : أساسيات برمجة منتدى
azizsoft غير متواجد حالياً   قديم 20-04-2008, 06:13 PM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: Sep 2006-
#20 (permalink)  

هلا اخوي شكرا لك

المشكلة ان الصورة غير ظاهرة ، تجد الرابط هنا :

صراع الحضارات :: التجنيد

ستجد ان الصورة غير ظاهرة ( X ) وبالأسفل عدة ارقام للتحقق من الصورة الظاهرة بأي رقم

بالتوفيق






__________________
جيجا فور مي لتسكين وتمويل وإدارة المواقع
(الاستضافة، الريسيلرات، تمويل المواقع ماليا ، النطاقات ، التعريب ، المساعدة في شراء منتجات ببطاقات الائتمان او الـPayPal ، الإعلان)
http://www.giga4me.com
Giga4Me.com غير متواجد حالياً   قديم 20-04-2008, 09:11 PM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: May 2007-
#21 (permalink)  

http://www.7adharat.com/imageclick.php
الخطأ كما هو واضح من دالة imagecreatetruecolor()
هل من الممكن أن أعرف الكود المصدري لهده الصفحة؟






__________________
a000a.uni.cc
Maximum file size : 2 mb
جميع الامتدادات متاحة بدون استتناء
--------------------
[نقاش] : أساسيات برمجة منتدى
azizsoft غير متواجد حالياً   قديم 20-04-2008, 10:21 PM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: Sep 2007-
#22 (permalink)  

الله يحفظك اخي عزيز
أتمنى من إضافتي






__________________
شكراً لتحديثك ملفك الشخصي, abdellahjawal.
إذا كان متصفحك لا يدعم الانتقال التلقائي اضغط هنا.


www.chariha.com/vb
عالم من الهواتف يناديكم

chariha@msn.com


abdellahjawal غير متواجد حالياً   قديم 20-04-2008, 10:28 PM
رد مع اقتباس
عضو نشيط
تاريخ التسجيل: Sep 2006-
#23 (permalink)  

اقتباس: