• 0
ahmedsaoud31

الدرس السادس: تنسيق JSON لتخزين وجلب البيانات وكمثال عملية تسجيل الدخول

سؤال

الحمد لله والصلاة والسلام على رسول الله

 

السلام عليكم ورحمة الله وبركاته

 

* إستخدام النمط JSON لتخزين وجلب البيانات :

 

هذا الدرس ضمن سلسة دروس الدورة التالية لتعلم لغة php !

 

تخزين البيانات :
- تتم عملية تخزين البيانات إما بإستخدام قواعد البيانات أو إستخدام الملفات , واليوم بإذن الله سنتعرف على كيفية حفظ البيانات بواسطة الملفات ولن نتطرق كثيراً لدوال التعامل مع الملفات إلا فتح الملف لحفظ سلسة نصية أو إستيرادها وسيأتي الحديث عن التعامل مع الملفات بشئ من التفصيل فيما بعد , وربما لا تحتاج لها بعد تناولنا الدرس التالي  
- ولكن قبل أن نتعرف على تنسيق الـ JSON لحفظ البيانات سأذكر موضوع مدى المتغيرات

* مدى المتغيرات :
- يقصد بمدى المتغيرات هي الفترة من لحظة تعريف المتغير إلى أن يصبح غير مُعَرَف ولا تستطيع إستخدامه والوصول للقيمة التي يحملها .
- عند تعريف متغير فهو متاح لكل العناصر تحته - أي بعد تعريفه - وحتى إذا تم تضمين ملف بعد تعريف المتغير يكون هذا المتغير متاح للإستخدام داخل أكواد الملف , ولكن لا يكون المتغير معرف داخل الدوال مثال لتتضح الصورة :

<?php$var1 = 'ahmed';function test(){    echo $var1;}test();?>


- هذا الكود سيعطي خطأ لأنها عملية وصول لمتغير غير معرف بالنسبة للدالة

- المتغيرات داخل الدوال أو وسائط الدالة تعتبر متغيرات محلية تنتهي بإنتهاء الدالة ولا نستطيع إستخدام هذه المتغيرات وهذا مثال على ذلك :

<?phpfunction test(){    $var1 = 'ahmed';}echo $var1;?>

- فالكود السابق أيضاً يعطينا خطأ عند تنفيذه لمحاولة الوصول لمتغير محلي خاص بالدالة

- إذاً على هذا يمكن لنا إستخدام نفس اسماء المتغيرات خارج الدالة وداخلها لأنها تعتبر متغيرات منفصلة عن بعضها البعض كالمثال التالي :

<?php$var1 = 'ahmed';function test(){    $var1 = 'Mohammed <br>';    echo $var1;}test();echo $var1;?>

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

- إذا أردنا إستخدام نفس المتغير داخل الدالة وإجراء تعديلات عليه فعلينا - كما تعلمنا من الدرس الثالث - تمرير عنوان المتغير كوسيط للدالة بإستخدام العلامة & قبل اسم المتغير كالتالي :

<?php$var1 = 'ahmed';function test(&$var1){    $var1 = 'Mohammed <br>';    echo $var1;}test($var1);echo $var1;?>

أو استخدام الكلمة المحجوزة gobal لتعريف الدالة على أن هذا المتغير هو متغير عام وليس خاص بالدالة كالتالي :

<?php$var1 = 'ahmed';function test(){    global $var1;    $var1 = 'Mohammed <br>';    echo $var1;}test();echo $var1;?>

- وعلى هذا تتعامل الدالة مع المتغير العام وأي تعديل على قيمة هذا المتغير تتم على المتغير العام , نعود لموضوعنا ...

التنسيق JSON :
- JSON وهي إختصار لـ javaScript Object Notation وهي طريقة في لغة javaScript للتعامل مع البيانات , وتم إنتشارها ودعمها في أغلب لغات البرمجة الأخرى لسهولة وديناميكية التعامل مع هذه الطريقة ويمكن لنا إستخدام هذه الصيغة كبديل أمثل لنقل البيانات بدلاً من إستخدام ملفات XML .
وأيضاً تستخدم هذه التقنية في جلب البيانات من مواقع شهيرة كموقع twitter من خلالـ twitter json api وحالة الطقس من موقع yahoo من خلالـ yahoo json weather api
هذه كانت مقدمة لموضوع كنت قد كتبته عن هذه التقنية في قسم لغة java على هذا الرابط .

الموضوع بسيط سأوضحه هنا بشكل سريع :
- يتم حفظ البيانات في تنسيق JSON على شكل كائن وتوضع العناصر بين الأقواس {} أو على شكل مصفوفة وتوضع عناصر المصفوفة بين الأقواس []
- القيم التي يتم حفظها داخل الكائن أو المصفوفة هي أعداد صحيحة وأعداد كسرية وسلاسل نصية وقيم منطقية وكائنات أخرى أو مصفوفات أخرى ويمكن الجمع بين جميع هذه الأنواع داخل كائن واحد أو مصفوفة واحدة ويتم إسناد القيم للعناصر بإستخدام الرمز : ويتم الفصل بين العناصر بإستخدام الفاصلة ,
 

* أمثلة للقيم داخل الكائن :

{"var1":10,"var2":true,"var3":null,"var4":"Ahmed","var5":12.55}

ملاحظة : يجب أن يكون اسم العنصر بين علامتي إقتباس لأن بعض لغات البرمجة لا تقبل اسم العنصر بدونها , وأيضاً يجب وضع السلسة النصية بين علامتي إقتباس .

 

* أمثلة للعناصر داخل المصفوفة :

[10,20.25,"Ahmed",null,true]

كما يمكن الجمع بين الإثنين معاً كأن يحتوي الكائن على مصفوفات أو تحتوي المصفوفات على كائنات

 

* كائن يحتوي على مصفوفة :

{"var1":10,"var2":[10,20,30]}

مصفوفة تحتوي على كائن :

[10,20,{"var1":"ahmed","var2":900},"Khaled"]

وهكذا يتم إحتواء الكائنات والمصفوفات داخل بعضها البعض وهكذا ...

وما سبق هو كيفية هيكلة البيانات بإستخدام أسلوب الـ JSON والتالي الدوال التي تتعامل مع هذا التنسيق في لغة php :

- دالة json_encode للتحويل إلى تنسيق الـ JSON
- دالة json_ decode لتحويل تنسيق JSON إلى كائنات ومصفوفات يمكن التعامل معها من خلال لغة php

ملاحظة : المصفوفات الترابطية hash table في لغة php يتم تحويلها إلى كائن في تنسيق JSON

- أولاً : تحويل البيانات إلى صيغة JSON بإستخدام دالة json_encode

 

* أمثلة :

 

1- لدينا مصفوفة ترابطية بها قيم مختلفة سيتم تحويلها لتنسيق JSON كالتالي :

<?php    $data['var1'] = 10;    $data['var2'] = 20.13;    $data['var3'] = null;    $data['var4'] = true;    $data['var5'] = 'Ahmed';    echo json_encode($data);?>

* المخرجات :

{"var1":10,"var2":20.13,"var3":null,"var4":true,"var5":"Ahmed"}



2- لدينا مصفوفة عادية -أي معرفاتها عبارة عن أرقام- وتحتوي على قيم مختلفة لاحظ شكل المصفوفة في المخرجات :

<?php    $data[] = 10;    $data[] = 20.13;    $data[] = null;    $data[] = true;    $data[] = 'Ahmed';    echo json_encode($data);?>

* المخرجات :

[10,20.13,null,true,"Ahmed"]

 

 

3- مصفوفة عادية تحتوي على قيم وعلى مصفوفة ترابطية وعلى مصوفة عادية أخرى كالتالي :

<?php    $data[] = 300;    $data[] = array(10,20,30);    $data[] = array("var1"=>12.3,12.8,"var2"=>"Ahmed",9000,"var3"=>array(true,false));    echo json_encode($data);?>

* المخرجات :

[300,[10,20,30],{"var1":12.3,"0":12.8,"var2":"Ahmed","1":9000,"var3":[true,false]}]

 

4- مصفوفة ترابطية تحتوي على قيم وعلى مصفوفة عادية كالتالي :

<?php    $data = array("var1"=>12.3,12.8,"var2"=>array("Ahmed","Jamal","Mostafa"),9000);    echo json_encode($data);?>

* المخرجات :

{"var1":12.3,"0":12.8,"var2":["Ahmed","Jamal","Mostafa"],"1":9000}


- ثانياً : تحويل صيغة JSON إلى كائنا ومصفوفات يمكن التعامل معها من خلال لغة php بإستخدام دالة json_encode


ملاحظة : بما أننا لم نتطرق للتعامل مع الكائنات حتى الآن فدالة json_encode تأخذ وسيط ثاني في حالة إعطائه القيمة true يتم تحويل كائنات الـ JSON إلى مصفوفات ترابطية hash table وإن أردت إستخدام الكائن بدون تحويله لمصفوفة يمكنك الوصول للعناصر بإستخدام الرمز ->

* أمثلة :

 

1- جلب كائن في تنسيق JSON وتحويله إلى مصفوفة ترابطية في لغة PHP وبه الشكلان إما إستخدام الكائن مباشراً أو تحويله لمصفوفة ترابطية واستخدامه كالتالي :

<?php    $json = '{"var1":10,"var2":true,"var3":null,"var4":"Ahmed","var5":12.55}';    $data1 = json_decode($json);    $data2 = json_decode($json,true);    // الوصول للعناصر من خلال الكائن    echo $data1->var4;    echo "<br>";    // الوصول للعناصر عن طريق مصفوفة ترابطية    echo $data2['var4'];?>

* المخرجات :

AhmedAhmed

 

 

2- هنا تنسيق JSON لمصفوفة تحتوي على قيم ومصفوفات وكائنات تحتوي أيضاً بداخلها على قيم ومصفوفات وهكذا يمكن العملية أن تتابع والكود التالي تم استخدام وسم العناصر ul لترتيب المخرجات وتوضيح العملية كالتالي :

<?php    $json = '[300,[10,20,30],{"var1":12.3,"0":12.8,"var2":"Ahmed","1":9000,"var3":[true,false]}]';    $data = json_decode($json,true);    $HTML = "<ul>";    foreach($data as $key=>$value)    {                if(is_array($value))        {            $HTML .= "<li>$key=>Array<ul>";            foreach($value as $key2=>$value2)            {                                if(is_array($value2))                {                    $HTML .= "<li>$key2=>Array<ul>";                    foreach($value2 as $key3=>$value3)                    {                        $HTML .= "<li>$key3=>$value3</li>";                    }                    $HTML .= "</ul></li>";                }                else                {                    $HTML .= "<li>$key2=>$value2</li>";                }            }            $HTML .= "</ul></li>";        }        else        {            $HTML .= "<li>$key=>$value</li>";        }    }    $HTML .= "</ul>";        echo $HTML;?>

* المخرجات :

0=>3001=>Array    0=>10    1=>20    2=>302=>Array    var1=>12.3    0=>12.8    var2=>Ahmed    1=>9000    var3=>Array        0=>1        1=>

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

تعلمنا كيفية التعامل مع التعابير القيايسية والدوال المستخدمة معها في لغة php .

 

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

 

- سنقوم بإنشاء نموذج لعملية التسجيل كما تعلمنا سابقاً ونضعه في ملف وليكن باسم signup.php وسيكون ملف معالجة البيانات هو نفسه ملف النموذج أي سنضع للخاصية الـ action للنموذج اسم الملف ذاته والكود التالي كود هذا الملف :

<!doctype html><html dir="rtl">    <head>        <meta charset="utf-8">        <title>            تسجيل مستخدم جديد        </title>        <link href="style.css" rel="stylesheet" type="text/css" />    </head>    <body>        <div class="mainLayout">            <div class="header">                <a href="#"> الرئيسية </a>                <a href="login.php"> تسجيل الدخول </a>                <a href="signup.php"> تسجيل مستخدم جديد </a>            </div>            <div class="content">                <form action="signup.php?action=submit" method="POST">                    <table>                        <tr>                            <td><label> اسم المستخدم : </label></td>                            <td><input type="text" name="username" value="<?php echo isset($_POST['username'])?$_POST['username']:''; ?>"></td>                        </tr>                        <tr>                            <td><label>البريد الإلكتروني : </label>                            <td><input type="text" name="email" value="<?php echo isset($_POST['email'])?$_POST['email']:''; ?>"><br>                        </tr>                        <tr>                            <td><label>تأكيد البريد الإلكتروني :</label>                            <td><input type="text" name="email2" value="<?php echo isset($_POST['email2'])?$_POST['email2']:''; ?>"><br>                        </tr>                        <tr>                            <td><label> كلمة المرور : </label>                            <td><input type="password" name="password"><br>                        </tr>                        <tr>                            <td><label>تأكيد كلمة المرور :</label>                            <td><input type="password" name="password2"><br>                        </tr>                        <tr>                            <td colspan="2"><input type="submit" name="submit" value="  تسجيل  "></td>                        </tr>                    </table>                </form>            </div>            <div class="footer">                <span > حقوق كذا وكذا محفوظة لشركة كذا وكذا :) </span><br />            </div>        </div>    </body></html>

- لاحظ أنني في خاصية القيمة لكل عنصر وضعت كود php وهو عبارة عن حالة if المختصر , ففي حالة الضغط على زر الإرسال سيتم إرسال البيانات للملف نفسه وبهذا يمكن لنا إستخدامها ووضعها كقيم للحقول حتي لا يتم إعادة كتابة هذه القيم في كل مرة يتم الضغط فيه على زر الإرسال , فالشرط هو في حالة كون العنصر معرف يتم طباعة قيمته وإلا تكون قيمة الحقل فارغة .

 

والآن سنقوم بكتابة دوال للتحقق من قيم النموذج , وسنقوم بتعريف متغير عام لنضع به صيغة الخطأ وليكن $error

 

* دالة التحقق من اسم المستخدم username_v وهي لا تأخذ وسائط كالتالي :

function username_v(){    global $error;        if(isset($_POST['username']) and $_POST['username'] != null)    {        if(preg_match('/^([a-zA-Z0-9._-]){6,30}$/',$_POST['username']))        {            return true;        }        else        {            $error = "يجب أن يكون اسم المستخدم مكون من الحروف الإنجليزية الكبيرة أو الصغيرة أو الأرقام أو العلامات الخاصة . و _ و - أو خليط منهم فقط ويكون طول اسم المستخدم من 6 إلى 30 عنصر";            return false;        }    }    else    {        $error = "يرجى ملئ حقل اسم المستخدم";        return false;    }}

- تم إخبار الدالة باسم المتغير العام لإستخدامه داخلها

- الشرط في حالة أن اسم المستخدم username معرف داخل المصفوفة  $_POST ويحمل قيمة بخلاف القيمة الفارغة يتم يتم تنفيذ الشرط التالي وإلا يتم حفظ نص الخطأ في المتغير $error وتعود الدالة بالقيمة الخطأ false .

- في حالة تحقق الشرط الأول يتم الإنتقال للشرط التالي وهو التحقق من اسم المستخدم باستخدام دالة preg_match والتعابير القياسية , فهنا جعلنا اسم المستخدم يجب أن يتكون من الحروف الإنجليزية الكبيرة أو الصغيرة أو الأرقام أو العلامات الخاصة . و _ و -  وأن لا يقل اسم المستخدم عن 6 عناصر ولا يزيد عن 30 ففي حالة تحقق هذا الشرط تعود الدالة بالقيمة الصحيحة true وإذا لم يتحقق الشرط يتم حفظ نص الخطأ في المتغير $error والعودة بالقيمة الخطأ false .

 

* دالة pass_v للتحقق من كلمة المرور  ومطابقتها بحقل تكرار كلمة المرور :

function pass_v(){    global $error;        if((isset($_POST['password']) and $_POST['password'] != null)        and (isset($_POST['password2']) and $_POST['password2'] != null))    {        if(preg_match('/^([a-zA-Z0-9]){6,20}$/',$_POST['password']))        {            if($_POST['password'] != $_POST['password2'])            {                $error = "كلمة المرور غير متطابقة";                return false;            }            else            {                return true;            }        }        else        {            $error = "يرجى كتابة كلمة مرور تحتوي على حروف إنجليزية كبيرة أو ضغيرة أو أرقام أو خليط منهم فقط وأن يكون طول كلمة المرور من 6 إلى 20 عنصر";            return false;        }    }    else    {        $error = "يرجى ملئ حقول كلمة المرور";        return false;    }}

- الشرط في حالة أن حقل كلمة المرور password وحقل تكرار كلمة المرور password2 معرفين وبهما قيم بخلاف القيم الفارغة يتم تنفيذ الشرط التالي وإلا يتم حفظ نص الخطأ والعودة بالقيمة الخطأ .

- الشرط التالي هو شرط التحقق من كلمة السر فيجب أن تكون مكونة من الحروف الإنجليزية الكبيرة والصغيرة والأرقام فقط بحد أدنى 6 عناصر وحد أقصى 20 عنصر , في حالة تحقق الشرط يتم الإنتقال للشرط التالي وإلا يتم حفظ نص الخطأ والعودة بالقيمة الخطأ .

- الشرط التالي يتم مطابقة كلمة المرور مع تأكيد كلمة المرور في حالة تحقق الشرط تعود الدالة بالقيمة الصحيحة true وإلا تقوم بحفظ نص الخطأ والعودة بالقيمة الخطأ .

 

* دالة email_v للتحقق من البريد الإلكتروني ومطابقته كالتالي :

function email_v(){    global $error;        if((isset($_POST['email']) and $_POST['email'] != null)        and (isset($_POST['email2']) and $_POST['email2'] != null))    {        if(preg_match('/^([a-zA-Z])([a-zA-Z0-9._-]){2,30}@([a-zA-Z0-9.-])+\.([a-zA-Z0-9]){2,5}$/',$_POST['email']))        {            if($_POST['email'] != $_POST['email2'])            {                $error = "البريد الإلكتروني غير متطابق";                return false;            }            else            {                return true;            }        }        else        {            $error = "يرجى كتابة بريد إلكتروني صحيح";            return false;        }    }    else    {        $error = "يرجى ملئ حقول البريد الإلكتروني";        return false;    }}

- بنفس مبدأ عمل الدوال السابقة لعملية التحقق والمطابقة بخلاف تغير التعبير القياسي لللتحقق من صحة البريد الإلكتروني .

 

* سنقوم بحفظ بيانات المستخدمين على شكل مصفوفة بتنسيق JSON وهذه المصفوفة تحتوي على مصفوفات أخرى بعدد المستخدمين كل مصفوفة تحتوي على اسم المستخدم وكلمة المرور والبريد الإلكتروني ويتم حفظ هذا الكود في ملف وليكن باسم login.json كما في الشكل التالي :

[{"username":"ahmed","password":"123456","email":"[email protected]"},{"username":"mohammed","password":"333666999","email":"[email protected]"}]

* دالة checkUser للتحقق من وجود هذا المستخدم في الملف login.json أم لا , كما سنقوم بتعريف متغير عام باسم $data لحفظ البيانات التي سيتم جلبها من الملف كالتالي :

    function checkUser()    {        global $data;        $jsonData = file_get_contents('login.json');        if($jsonData == false ) return false;        $data = json_decode($jsonData,true);        foreach($data as $value)        {            if($value['username'] === $_POST['username']) return true;        }        return false;    }

- قمنا بإخبار الدالة باسم المتغير العام

- وقمنا بتعريف متغير محلي باسم $jsonData لحفظ البيانات يتم جلبها من الملف بإستخدام الدالة file_get_contents وتأخذ وسيط هو مسار الملف .

- في حالة عدم جلب محتوى من الملف تعود الدالة file_get_contents بالقيمة false وعلى هذا ستعود هذه الدالة بالقيمة false وتعني أن الملف فارغ .

- في حالة لم يكن الملف فارغ وبه بيانات نقوم بتحويل تنسيق JSON إلى مصفوفة ترابطية بإستخدام الدالة json_decode  وإعطائها الوسيط الأول محتوى الملف والوسيط الثاني القيمة الصحيحة true وحفظ الناتج في المتغير العام $data

- الآن لدينا مصفوفة ترابطية نقوم بالمرور على محتوياتها بإستخدام حلقة الدوران foreach وفي حالة وجود مستخدم بهذا الاسم يتم العودة بالقيمة الصحيحة true وإلا تتم العودة بالقيمة الخطأ false

 

* دالة signUp لتسجيل مستخدم جديد وحفظ البيانات في ملف signup.json كالتالي :

function signUp(){    global $data;    $data[] = array('username'=>$_POST['username'],                    'password'=>$_POST['password'],                    'email'=>$_POST['email']);    $FH = fopen("login.json", 'w') or die("خطأ في فتح الملف للقراءة");    fwrite($FH, json_encode($data));    fclose($FH);}

- سنستخدم المتغير العام $data في بإضافة مستخدم جديد للمصفوفة $data وسيتم جلب اسم المستخدم وكلمة المرور والبريد الإلكتروني من النموذج وإدخال مستخدم جديد في المصفوفة $data
- الآن سنقوم بفتح الملف بإستخدام fopen الوسيط الأول مسار الملف والثاني نوع العملية سنختار w أي عملية الكتابة على الملف , ودالة die للخروج من الكود في حالة حدوث خطأ في عملية فتح الملف وطباعة ما بداخلها على المتصفح , والدالة die  تستخدم بشكل عام للخروج من الكود كالدالة exit .

- وتعود الدالة fopen في حالة نجاحها في فتح الملف بما يعرف بمقبض الملف ويتم حفظه في متغير أو إعطائه لدالة الكتابة مباشراً.

- دالة الكتابة على الملف fwrite تقوم بالكتابة على الملف الوسيط الأول هو مقبض الملف الذي تم فتحه والوسيط الثاني البيانات التي سيتم كتابتها في الملف .

- دالة fclose لإغلاق مقبض الملف .

 

وبعد أن إنتهينا من شرح الدوال المستخدمة سنقوم بكتابة الكود الأساسي لعملية تسجيل مستخدم جديد , وهذا الكود سيكون اسفل النموذج وهو كالتالي :

<?php        // متغير لحفظ البيانات التي يتم جلبها من الملف    $data;        // متغير لحفظ نصوص الأخطاء    $error;        if(isset($_GET['action']) and $_GET['action'] == 'submit')    {        if( username_v() and email_v() and pass_v() )        {            if(checkUser())            {                echo ("<h4 style='color:#FF0;'>هذا المستخدم موجود بالفعل !</h4>");            }            else            {                signUp();                echo ("<h4 style='color:#0F0;'>تم التسجيل بنجاح !</h4>");            }            }        else        {            echo "<h4 style='color:#F53;'>$error</h4>";        }    }?>

- تعريف المتغيرات العامة $error و $data والدوال سيتم وضعها اسفل الوثيقة .

- لو لاحظنا أن الـ action للنموذج هو signup.php?action=submit  أي هناك متغير يضاف للرابط عند الضغط على زر التسجيل وهذا الأمر حتي لا يتم طباعة جملة الخطأ بوجود حقول فارغة عند الدخول لأول مرة للنموذج , ومن خلال هذا يمكن لي أن أقوم بتنفيذ أكثر من كود في نفس الصفحة كالتسجيل وتسجيل الدخول ولكن هنا سنكتفي بأن يكون كل ملف مختص بشئ .

- الشرط يتم التحقق من تعريف المتغير action وإحتوائه على القيمة submit وإلا لا يتم تنفيذ الكود .

- الشرط التالي هو إستدعاء دالة التحقق من اسم المستخدم وكلمة المرور والبريد الإلكتروني وأن جميعهم يجب أن يعودوا بالقيمة الصحيحية true وإلا يتم طباعة رسالة الخطأ للمستخدم المخزنة في المتغير العام $error .

- في حالة تحقق الشرط يتم إستدعاء دالة التحقق من وجود مستخدم بهذا الاسم مخزن من قبل في الملف , فهي تعود بالقيمة الصحيحة True في حالة وجود مستخدم بنفس الاسم أو تعود بالقيمة false إذا كان الملف فارغ أو ليس هناك مستخدم بهذا الاسم وعلى هذا يتم تسجيل مستخدم جديد وطباعة رسالة تفيد بذلك أو إظهار رسالة بأن هذا الاسم مستخدم من قبل .

 

وبهذا إنتهينا من عملية تسجيل الدخول ولكن هذه الطريقة لا تصلح للمواقع التي يكون بها عدد مستخدمين كبير , فهنا علينا إستخدام قواعد البيانات أو تطوير بنية هذا النظام لمزيد من سرعة البحث والمعالجة .

 

والتالي رابط تنزيل نموذج التسجيل كامل

json.zip

 

* ثانياً : عملية تسجيل الدخول :

- في البداية سنحتاج نموذج لتسجيل الدخول كالتالي :

<form action="login.php?action=submit" method="POST">    <table>        <tr>            <td><label> اسم المستخدم : </label></td>            <td><input type="text" name="username"></td>        </tr>        <tr>            <td><label> كلمة المرور : </label>            <td><input type="text" name="password"><br>        </tr>        <tr>            <td colspan="2"><input type="submit" name="submit" value="تسجيل الدخول"></td>        </tr>    </table></form>

وسنحتاج لدالة لعملية تسجيل الدخول وهي

 

* دالة login لعملية تسجيل الدخول :

function login($username,$password){    $jsonData = file_get_contents('login.json') or die("لم يتم جلب محتوى الملف");    $data = json_decode($jsonData,true);    foreach($data as $value)    {        if($value['username'] == $username and $value['password'] == $password) return true;    }    return false;}

- تأخذ هذه الدالة وسيطين هما اسم المستخدم وكلمة المرور -يمكن لنا تفيذ هذه الدالة كالدوال السابقة بدون وسائط ولكن أردت التنويع فقط -

- نقوم بجلب محتوى الملف كما تم شرحه في الأعلى

- نقوم بالمرور على عناصر المصفوفة للتحقق من وجود المستخدم , ففي حالة مطابقة اسم المستخدم وكلمة المرور يقوم الدالة بالعودة بالقيمة الصحيحة true وإلا تعود بالقيمة الخطأ false

 

والآن مع الكود الأساسي للصفحة :

<?php    if(isset($_GET['action']) and $_GET['action'] == 'submit')    {        if(isset($_POST['username']) and $_POST['username'] != null and isset($_POST['password']) and $_POST['password'] != null)        {            $username = preg_replace('/[^a-zA-Z0-9._-]/','',$_POST['username']);            $password = preg_replace('/[^a-zA-Z0-9]/','',$_POST['password']);            if(login($username,$password))            {                echo "<h3 style='color:#0F0;'> تم تسجيل الدخول مرحباً بك <h3>";            }            else            {                echo "<h3 style='color:#F33;'> لم تتم عملية تسجيل الدخول حاول مجدداً <h3>";            }        }        else        {            echo "<h3 style='color:#F33;'>يرجى ملئ جميع الحقول<h3>";        }    }?>

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

- الشرط في حالة تعريف اسم المستخدم وكلمة المرور وإحتوائهم على قيم غير القيمة الفارغة يتم تنفيذ الشرط التالي وإلا طباعة رسالة بالخطأ .

- يتم إزالة أي رموز غير الحرورف الإنجليزية والأرقام والرموز المسموح بها -وهذه العملية تعتبر عملية أمنية لحماية الموقع من الإختراق- فمن خلالها يمكن إختراق قاعدة البيانات وتعرف بـ sql injection

-ونفس الشئ لكلمة المرور مع إختلاف التعبير القياسي فهنا يزيل كل شي بخلاف الحرورف الإنجليزية والأرقام

- بعد هذه العملية يتم إستدعاء دالة تسجيل الدخول للتحقق من وجود المستخدم من عدمة وطباعة رسالة تفيد بذلك

 

رابط تنزيل الملف

json2.zip

 

التمرين :

- أكتب تطبيق لملئ إستمارة لأحد المصالح الحكومية بها بيانات التسجيل التي تحتاجها وقم بحفظها في ملف بتنسيق JSON , وعمل صفحة لعرض وتنسيق محتويات الملف .

 

وإلى هنا والسلام عليكم ورحمة الله وبركاته , نلقاكم على خير بإذن الله تعالى


 

الدرس السابق | الإنتقال للموضوع الأساسي

تم تعديل بواسطه ahmedsaoud31
3

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

4 إجابة على هذا السؤال .

  • 0

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم أخي أحمد 
جزاكم الله خيراً على هذه الدورة القيمة 
منذ أن أبلغني أخي مصطفى بها و لم أتركها إلى أن وصلت إلى هذا الدرس (منذ السادسة صباحاً إلى الآن)
و بشق الأنفس أنهيت تمرين هذا الدرس 
أكرر شكري لك على هذه الدورة القيمة و الفريدة بالنسبة للمحتوى العربي.

 

WebSite.zip

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

وعليكم السلام ورحمة الله وبركاته

 

كيف الحال أخي محمد , وأوصل سلامنا لمصطفى  :) مش ظاهر على الساحة من مدة , والحمد لله أن هذه الدورة نالت تقديرك ونتوجه بكل الشكر لزميلنا عبداللطيف لما أثرى بكتاباته القيَمة هذه الدورة .

 

- الحل أكثر من رائع , وليس بيدي حالياً إلا تقييم المشاركة :rolleyes:

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

كيف الحال أخي محمد , وأوصل سلامنا لمصطفى   :) مش ظاهر على الساحة من مدة , والحمد لله أن هذه الدورة نالت تقديرك ونتوجه بكل الشكر لزميلنا عبداللطيف لما أثرى بكتاباته القيَمة هذه الدورة .

الحمد لله على كل حال يصل سلامكم بإذن الله 

 

 

- الحل أكثر من رائع , وليس بيدي حالياً إلا تقييم المشاركة  :rolleyes:

 

هذا من لطفك أخي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .