تابع موضوعات المنتدى الانتساب تعليمات س - ج قائمة الأعضاء المفكرة بحث مواضيع اليوم إشارة الأقسام مقروءة

مواقع صديقة: تعلم البي اتش بي - تصميم نت - أفضل استضافة


عودة   منتدى بي اتش بي PHP > قسم لغة بي اتش بي PHP LANGUAGE > دروس بي اتش بي PHP Lessons > دروس متقدمة

دروس متقدمة دروس وأكواد متقدمة لتعليم (بي اتش بي) PHP مستوى متقدم


إضافة رد
 
LinkBack أدوات الموضوع طريقة العرض
قديم 25-03-2008, 07:28 PM   #1 (permalink)
مبرمج محترف
 
الصورة الرمزية لـ anas
 
تاريخ الانتساب: 27-02-2008
المكان: العراق - بغداد
السن: 23
مشاركات: 151
مستوى السمعة : 1
anas على طريق التميز و النجاح
افتراضي كلاس "التحقق بالصورة " لحماية الفورمز

بسم الله الرحمن الرحيم


السلام عليكم ورحمة الله وبركاته موضوع اليوم عبارة عن كلاس لانشاء ماتعرف بصورة التأكيد او التحقق بالصورة : وهي صورة تظهر لنا عند التسجيل او تسجيل الدخول في المواقع او المنتديات وفوقها كتابة غير مفهومة تقريبا مكونة من ارقام او احرف او كلاهما ......
فائدة هذه البرمجة للحماية من ما يعرف بالفلودنك او اغراق قاعدة البيانات بفيض من الاوامر والتي تسبب مشاكل بالموقع ....

الان مع الشرح :
اولا صفحة الكلاس كامل مع شرح تفصيلي ....
كود PHP:
<?php
session_start
();
/**
 *    SecurityImage.php
 *
 *    Class to implement Captcha security Images
 *    to combat Spam, using PHP/GD
 * 
 *    @author            A.D.Surrey. (www.surneo.com)
 *     @version        1.3
 */

class SecurityImage
{
    
//المتغيرات المستخدمة
    
public $bg$image$font//fonts الخطوط موجودة بفولدر 
        
$fontsize$colour// لون وحجم الخط
        
$strLength,
        
$text ""$num_dots// النص وعدد النقاط العشوائية
        
$chars = 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""1""2""3""4""5""6""7""8""9");

// مؤسس الكلاس : ينشيء القيم الاولية
    
function SecurityImage()
    {
        
$this->num_dots 300// عدد النقاط المضافة
        
$this->strLength 5;// طول النص
        
$this->fontsize 18;// حجم الخط

        
$this->selectFont(); // اختيار الخط

        
$bg "images/" mt_rand(17) . ".png"// الصورة المستخدمة كخلفية
        
$this->image imagecreatefrompng($bg);// انشاء صورة على خلفية صورة اخرى
        
$this->colour ImageColorAllocate($this->image000); // لون النقاط , هنا استخدمنا الاسود

        // عرض الصورة تلقائيا عند استدعاء الكلاس
        
$this->show();

        
// اضافة الكود الى سيشن لمقارنته مع الكود المدخل من الفورم
        
$_SESSION['SECURITY_CODE'] = $this->text;
    }
    
// عرض الصورة
    
function show()
    {
        
Header("Content-type: image/png");

        
$this->text $this->genString();

        
// كتابة حرف او مز تلو الاخر على الصورة
        
for ($i 0$i $this->strLength$i++) {
            
$this->writeLetter($this->text[$i], (20 $i 25));
        }

        
$this->addNoise();

        
imagepng($this->image);
        
imagedestroy($this->image);
    }

    
// توليد نص بحروف وارقام عشوائية من المصفوفة اعلاه
    
function genString()
    {
        for (
$i 0$i $this->strLength$i++) {
            
$this->text .= $this->chars[mt_rand(0count($this->chars) - 1)];
        }

        return 
$this->text;
    }

    
// كتابة نص على الصورة بتغيير الخط واللون
    
function writeLetter($letter$xvalue)
    {
        
$yvalue 30 mt_rand(010); // Randomly adjust y position.
        
$angle mt_rand(-3030); // Give text a slight random angle.
        // دالة لكتابة نص على الصورة باستخدام نوع الخط والزاوية والاحداثيات واللون والنص
        
imagettftext($this->image$this->fontsize$angle$xvalue$yvalue$this->
            
colour$this->font$letter);
    }

    
// للمقارنة بين النص المدخل والنص الذي على الصورة
    
function isMatch($t)
    {
        if (
$t == $this->text) {
            return 
true;
        } else
            return 
false;
    }
    
// دالة لاضافة نقاط عشوائية على الصورة
    
function addNoise()
    {
        
$width imagesx($this->image); // الحصول على عرض الصورة ووضعه بمتغير
        
$height imagesy($this->image); //الحصول على ارتفاع الصورة ووضعه بمتغير

        //نقاط عشوائية
        
for ($i 0$i $this->num_dots$i++) {
            
//هذه الدالة لرسم القطع الناقص وتعتمد على 4 معطيات
            
imagefilledellipse($this->imagemt_rand(0$width), mt_rand(0$height), 11,
                
$this->colour);
        }
    }
    
// (تغيير الخط)دالة لاختيار خط عشوائي لاستخدامه في الكتابة على الصورة
    
function selectFont()
    {
        
//دالة للحصول على قيمة عشوائية  mt_rand
        
switch (mt_rand(13)) {
            case 
1:
                
$this->font "fonts/Acidic.TTF";
                break;
            case 
2:
                
$this->font "fonts/arial.ttf";
                break;
            case 
3:
                
$this->font "fonts/frizzed.ttf";
                break;
                
//case 4 : $this->font = "fonts/STACKZ.TTF"; break;
        
}
    }
}

// انشاء الكائن الخاص بالصورة 
$secim = new SecurityImage();
?>
ثانيا طريقة الاستخدام :
قم باضافة حقل خاص للكود السري في الفورم الخاص بك الذي سيقارن مع الكود المكتوب فوق الصورة : مثال :
كود هتمل:
 <td><label for="txtSecurityCode">Security Code</label>: </td>
              	<td colspan="2"><input type="text" name="txtSecurityCode" size="30" /></td>
<tr><td><img name="captchaimg" alt="Security Code" src="SecurityImage.php" /></td>
               <td><a href="javascript:location.reload();"><img src="images/arrow_refresh.png" alt="Refresh Code" border="0" /></a></td>
             </tr> 
بالنسبة ل SecurityImage.php فهي صفحة كود الكلاس وبالنسبة ل images/arrow_refresh.png فأنها صورة صغيرة قرب صورة الكود عند الضغط عليها تقوم برمجة جافا بالكود السابق بتغيير الصورة في حال عدم وضوحها جدا..

الان بعد ضغط زر الارسال الخاص بنموذجك وارسال البيانات لصفحة اخرى (او نفس الصفحة ) ضع الكود التالي للتحقق
من ادخال المستخدم للكود ومطابقته بكود الصورة :

كود PHP:
session_start();
if (
$_POST['txtSecurityCode'] == $_SESSION['SECURITY_CODE']) {
    
// استمرار بتنفيذ كود معين
} else {
    
header('location: form.php?msg=error'); // عرض رسالة خطأ -الكود مثال فقط

السيشن طبعا مهمة في عمل هذا الكلاس .....
الى هنا انتهى الشرح ...ارجو ان يكون شرح واضح .....

بالنسبة للمرفقات قم بوضع الصور في مجلد images والخطوط في مجلد fonts ضمن مسار سكريبتك ......




تحياتي
الملفات المرفقة
نوع الملف : rar images.rar (46.1 كيلو بايت, 151 قراءة)
نوع الملف : rar fonts.rar (373.9 كيلو بايت, 239 قراءة)

قام بآخر تعديل anas يوم 25-03-2008 في 07:40 PM
anas غير متصل   رد مع اقتباس
قديم 25-03-2008, 09:52 PM   #2 (permalink)
عضو فعال
 
تاريخ الانتساب: 08-06-2007
المكان: السعودية
مشاركات: 231
مستوى السمعة : 2
ff5006 على طريق التميز و النجاح
افتراضي رد : كلاس "التحقق بالصورة " لحماية الفورمز

السلام عليكم
جزاك الله خير وجعله في ميزان حسناتك ...
كلاس مهم جداً...
شكراً لـك.
__________________
:: php(); ::
ff5006 غير متصل   رد مع اقتباس
قديم 25-03-2008, 10:40 PM   #3 (permalink)
عضو فعال
 
تاريخ الانتساب: 08-06-2007
المكان: السعودية
مشاركات: 231
مستوى السمعة : 2
ff5006 على طريق التميز و النجاح
افتراضي رد : كلاس "التحقق بالصورة " لحماية الفورمز

اخي قمت بعمل كل شئ , لكن الكلاس لايُظهر الصوره لي ,...
هذا كود القالب :
كود PHP:

    
<td><label for="txtSecurityCode">الرقم الأمني </label>: </td>
                  <
td colspan="2"><input type="text" name="txtSecurityCode" size="30" /></td>
<
tr><td><img name="captchaimg" alt="Security Code" src="include/SecurityImage.php" /></td>
               <
td><a href="javascript:location.reload();"><img src="style/index/images/Security/arrow_refresh.png" alt="تحديث الصورة" border="0" /></a></td>
             </
tr
وهذا تعديلي للكلاس :
كود PHP:
<?php 
session_start
(); 
/** 
 *    SecurityImage.php 
 * 
 *    Class to implement Captcha security Images 
 *    to combat Spam, using PHP/GD 
 *  
 *    @author            A.D.Surrey. (www.surneo.com) 
 *     @version        1.3 
 */ 

class SecurityImage 

    
//المتغيرات المستخدمة 
    
public $bg$image$font//fonts الخطوط موجودة بفولدر  
        
$fontsize$colour// لون وحجم الخط 
        
$strLength
        
$text ""$num_dots// النص وعدد النقاط العشوائية 
        
$chars = 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""1""2""3""4""5""6""7""8""9"); 

// مؤسس الكلاس : ينشيء القيم الاولية 
    
function SecurityImage() 
    { 
        
$this->num_dots 300// عدد النقاط المضافة 
        
$this->strLength 5;// طول النص 
        
$this->fontsize 18;// حجم الخط 

        
$this->selectFont(); // اختيار الخط 

        
$bg "style/index/images/Security/" mt_rand(17) . ".png"// الصورة المستخدمة كخلفية 
        
$this->image imagecreatefrompng($bg);// انشاء صورة على خلفية صورة اخرى 
        
$this->colour ImageColorAllocate($this->image000); // لون النقاط , هنا استخدمنا الاسود 

        // عرض الصورة تلقائيا عند استدعاء الكلاس 
        
$this->show(); 

        
// اضافة الكود الى سيشن لمقارنته مع الكود المدخل من الفورم 
        
$_SESSION['SECURITY_CODE'] = $this->text
    } 
    
// عرض الصورة 
    
function show() 
    { 
        
Header("Content-type: image/png"); 

        
$this->text $this->genString(); 

        
// كتابة حرف او مز تلو الاخر على الصورة 
        
for ($i 0$i $this->strLength$i++) { 
            
$this->writeLetter($this->text[$i], (20 $i 25)); 
        } 

        
$this->addNoise(); 

        
imagepng($this->image); 
        
imagedestroy($this->image); 
    } 

    
// توليد نص بحروف وارقام عشوائية من المصفوفة اعلاه 
    
function genString() 
    { 
        for (
$i 0$i $this->strLength$i++) { 
            
$this->text .= $this->chars[mt_rand(0count($this->chars) - 1)]; 
        } 

        return 
$this->text
    } 

    
// كتابة نص على الصورة بتغيير الخط واللون 
    
function writeLetter($letter$xvalue
    { 
        
$yvalue 30 mt_rand(010); // Randomly adjust y position. 
        
$angle mt_rand(-3030); // Give text a slight random angle. 
        // دالة لكتابة نص على الصورة باستخدام نوع الخط والزاوية والاحداثيات واللون والنص 
        
imagettftext($this->image$this->fontsize$angle$xvalue$yvalue$this-> 
            
colour$this->font$letter); 
    } 

    
// للمقارنة بين النص المدخل والنص الذي على الصورة 
    
function isMatch($t
    { 
        if (
$t == $this->text) { 
            return 
true
        } else 
            return 
false
    } 
    
// دالة لاضافة نقاط عشوائية على الصورة 
    
function addNoise() 
    { 
        
$width imagesx($this->image); // الحصول على عرض الصورة ووضعه بمتغير 
        
$height imagesy($this->image); //الحصول على ارتفاع الصورة ووضعه بمتغير 

        //نقاط عشوائية 
        
for ($i 0$i $this->num_dots$i++) { 
            
//هذه الدالة لرسم القطع الناقص وتعتمد على 4 معطيات 
            
imagefilledellipse($this->imagemt_rand(0$width), mt_rand(0$height), 11
                
$this->colour); 
        } 
    } 
    
// (تغيير الخط)دالة لاختيار خط عشوائي لاستخدامه في الكتابة على الصورة 
    
function selectFont() 
    { 
        
//دالة للحصول على قيمة عشوائية  mt_rand 
        
switch (mt_rand(13)) { 
            case 
1
                
$this->font "include/fonts/Acidic.TTF"
                break; 
            case 
2
                
$this->font "include/fonts/arial.ttf"
                break; 
            case 
3
                
$this->font "include/fonts/frizzed.ttf"
                break; 
                
//case 4 : $this->font = "include/fonts/STACKZ.TTF"; break; 
        

    } 


// انشاء الكائن الخاص بالصورة  
$secim = new SecurityImage(); 
?>
طبعاً لم أقم بتضمين الكلاس في أي صفحات من السكربت

وشكراً.
__________________
:: php(); ::
ff5006 غير متصل   رد مع اقتباس
قديم 26-03-2008, 05:22 PM   #4 (permalink)
مبرمج محترف
 
الصورة الرمزية لـ anas
 
تاريخ الانتساب: 27-02-2008
المكان: العراق - بغداد
السن: 23
مشاركات: 151
مستوى السمعة : 1
anas على طريق التميز و النجاح
افتراضي رد : كلاس "التحقق بالصورة " لحماية الفورمز

الكلاس شغال عندي ..
جرب التالي وانا متأكد بأذن الله ستنجح .....
اعمل صفحة سمها display.php وضع بها الكود :
كود PHP:
<?php
include("SecurityImage.php");
$secim = new SecurityImage();
$secim->show();
?>
ثم في قالبك غير هذا فقط :

كود هتمل:
src="include/SecurityImage.php"

الى 

src="include/display.php"
ولا تنسى ;() session_start في اعلى صفحة الفورم ......


anas غير متصل   رد مع اقتباس
قديم 26-03-2008, 06:12 PM   #5 (permalink)
مطور منتديات mysmartbb
 
تاريخ الانتساب: 22-05-2007
المكان: Syria
مشاركات: 280
مستوى السمعة : 2
ايهاب الغزال على طريق التميز و النجاح
إرسال خطاب MSN إلى ايهاب الغزال إرسال خطاب Yahoo إلى ايهاب الغزال مخاطبة ايهاب الغزال بواسطة برنامج المحادثة سكايب ( Skype )
افتراضي رد : كلاس "التحقق بالصورة " لحماية الفورمز

ماشاء الله عمل جميل تشكر عليه اخي الكريم

اخوك

ايهاب الغزال
__________________

AJAX with PHP Soon
ايهاب الغزال غير متصل   رد مع اقتباس
قديم 26-03-2008, 08:51 PM   #6 (permalink)
مبرمج محترف
 
الصورة الرمزية لـ anas
 
تاريخ الانتساب: 27-02-2008
المكان: العراق - بغداد
السن: 23
مشاركات: 151
مستوى السمعة : 1
anas على طريق التميز و النجاح
افتراضي رد : كلاس "التحقق بالصورة " لحماية الفورمز

اقتباس:
الكاتب : ايهاب الغزال عرض المشاركة
ماشاء الله عمل جميل تشكر عليه اخي الكريم

اخوك

ايهاب الغزال
العفو اخي انا قمت بالشرح فقط ...
شكرا للمرور الطيب .. تحياتي لك
anas غير متصل   رد مع اقتباس
قديم 26-03-2008, 11:14 PM   #7 (permalink)
عضو فعال
 
تاريخ الانتساب: 08-06-2007
المكان: السعودية
مشاركات: 231
مستوى السمعة : 2
ff5006 على طريق التميز و النجاح
افتراضي رد : كلاس "التحقق بالصورة " لحماية الفورمز

للأسف لم يعمل...
على العموم شكراً لك أخي , وجزاك الله خير راح احاول فيه ...
__________________
:: php(); ::
ff5006 غير متصل   رد مع اقتباس
قديم 27-03-2008, 05:13 PM   #8 (permalink)
مبرمج محترف
 
الصورة الرمزية لـ anas
 
تاريخ الانتساب: 27-02-2008
المكان: العراق - بغداد
السن: 23
مشاركات: 151
مستوى السمعة : 1
anas على طريق التميز و النجاح
افتراضي رد : كلاس "التحقق بالصورة " لحماية الفورمز

فقط ملاحظة : يعمل على لغة php الاصدار 5 فما فوق ...
anas غير متصل   رد مع اقتباس
قديم 28-03-2008, 10:40 PM   #9 (permalink)
عضو جديد
 
الصورة الرمزية لـ mohammed.kh
 
تاريخ الانتساب: 25-12-2007
المكان: سوريا
السن: 16
مشاركات: 15
مستوى السمعة : 0
mohammed.kh على طريق التميز و النجاح
إرسال خطاب MSN إلى mohammed.kh
Red face رد : كلاس "التحقق بالصورة " لحماية الفورمز

يعطيك ألف عافية أخي على الكلاس

لكن هل يوجد نفس الكلاس لكن لا يستخدم ال session

؟؟؟؟؟؟؟
mohammed.kh غير متصل   رد مع اقتباس
قديم 28-03-2008, 11:04 PM   #10 (permalink)
مبرمج محترف
 
الصورة الرمزية لـ anas
 
تاريخ الانتساب: 27-02-2008
المكان: العراق - بغداد
السن: 23
مشاركات: 151
مستوى السمعة : 1
anas على طريق التميز و النجاح
افتراضي رد : كلاس "التحقق بالصورة " لحماية الفورمز

اقتباس:
الكاتب : mohammed.kh عرض المشاركة
يعطيك ألف عافية أخي على الكلاس

لكن هل يوجد نفس الكلاس لكن لا يستخدم ال session

؟؟؟؟؟؟؟
الله يعافيك اخي ...
تستطيع استخدامة نفسه بدون سيشن وبتغييرات بسيطة :
كود PHP:
$_SESSION['SECURITY_CODE']
غيرها الى 
$_POST
['SECURITY_CODE']
اينما وجدت 
واحذف session_start 
تحياتي
anas غير متصل   رد مع اقتباس