JE SUIS
عضو فضي
مشاركات : 1611
العمر : 30 الجنس : الدولة : الجزائر المدينة : الجزائر تاريخ التسجيل : 02/08/2011
| موضوع: التعامل مع العميل_PhP الجمعة يونيو 21 2013, 17:40 | |
| التعامل مع العميل لبناء مواقع الويب ، html يوفر رقم عظيم من المميزات عن ال PHP كما ر أينا في الدروس السابق ة ، ف إن ا ل من الأ شياء الأ ساسيه التي لم نتكلم عنھا حتي الآ ن ھي الموثوقي ة (أو الاستقرار ) وھو بالمعني الصحيح والصريح : القابيلة على الاحتفاظ بالمعلومات بين صفحتين منفردتين أو مختلفيتن في المستعرض ... لايوفر أي ميكانيكيه للحفاظ على البيانات وجعلھا مستقر ة لمعالج ة تتم بين HTTP ، بدون أي إضافات ليس له أي علاق ة بأي طلب آخر ... مثلاً عندما تتطلب (request) صفحتين ، كل طلب لصفح ة في الانترنت موقع المطور العربي ومن ثم منتدي المطور العربي فان كل الطلبين ليس لھما علاقه ببعضھما ... أي أنھا لاتعرف أي أن أمر طلب الصفح ة (stateless) فاقد ة لحالتھا HTTP بمصطلح آخر يمكننا أن نقول أن ا ل ينتھي عند انتھاء الطلب ، فھي عندما تقوم بنقل بيانات صفح ة من السيرفر الى المستخدم فھي تعرف من ھو ا لمستخدم الذي يطلب البيانات وعلى أي نافذه سيتم نقل البيانات وعند انتھاء ذلك فان كل ھذا الموضوع ينتھي وإذا عاد المستخدم فطلب صفحة أخري فإنھا لاتعرف إن كان ھو نفس المستخدم أو لا ! فقط . PHP إن القدرة على الحفاظ على وجود البيانات ليست وسيلة أو ميزة او قوة مقتصرة على ال فلقد ر أيت كيف استطعنا ارسال معلومات من صفح ة إلى صفح ة بدون خسران أي معلومات وذلك عن وبالرغم من ذلك ف إن المستخدم عندما يقوم بإغلاق الصفح ة عند استقبالھا للبيانات فان ذلك html طريق ا ل يمكنن ا اخبار السيرفر ب أن يقوم بارجاع البيانات بطريق ة PHP يعني فقدانھا للأ بد ، عن طريق استخدام ا ل تمكننا من الحفاظ عليھا ، مثلما سنري في ھذا الدرس ، ھناك ثلاث طرق لعمل ذلك .... في PHP يتطلب منا مفھومي ة جيد ة في كيفيه استعمال ال ، PHP التميز الحقيق ي في قوة الفھم لل . http التفاعل مع المستخدم والمتصفح الذي يستخدمه لكي نتغلب على نقاط الضعف التي في ال ھذا ھو موضوعنا لھذا اليوم والذي سنتكلم فيه عن : التغلب علي القصور فيھم . PHP ومحدودية قدراتھم ، وكيف يستطيع ال html وال HTTP 1 - ال 2 - الاحتفاظ بالمعلومات التي نريد أن نستخدمھا بين طلب لصفحتين مختلفيتن . 3 - مكنكة الحفاظ على البيانات . وكيفية استخدامھا . (************************s) 4 - الكعكات المكنكة الداخلية للحفاظ على وجودية البيانات . – native session وال PHP4 - 5 ھذا الدرس مفيد بشكل ظاھري لمن ھو جديد على انشاء مواقع متفاعلة متوسط ة – كبير ة الحجم .. PHP بواسطة ال إنه يحتوي على الكثير من بعض الأمثله التي تفيدك . الھدف من ھذا الدرس ھو أن تتعرف على كيفي ة الحفاظ على معلومات المستخدم عبر متغير أو أكثر بين أكثر من صفح ة ، مثل أن تجعل اسم المستخدم ظاھر في كل صفح ة يقوم بالولوج إليھ ا ... مما يؤكد استمرارية وجود البيانات . لنفرض أن لدينا موقع اً على الانترنت ھذا الموقع يھتم ببيع وتسويق مواد غذائي ة أو أن ھذا الموقع يقدم مسابقات ثقافي ة ، في العاد ة عندما يقوم المستخدم بطلب شراء سلع ة معينة أو عندما يختار الدخول في مسابقة من المسابقات الثقافية فإنه يقوم بدخول أكثر من صفحة بالتتابع يختار السلع ة في الصفح ة الأ ولى وبعد ذلك يقوم برؤي ة معلومات السلع ة في الصفح ة الثاني ة والصفح ة الثالثة يقوم فيھا بتعبئة معلوماته للشراء أو غير ذلك إلى أن ينتھي من كاف ة المعلومات وبعد ذلك تنتج له في النھاية صفحة فيھا معلوماته والسلعة التي قام باختيارھا وفاتورة شراء !! أو يقوم باختيار نوع المسابقة الثقافي ة في الصفح ة الأ ولى وبعد ذلك يقوم بالحصول على عد ة أسئله مقسمة على عد ة صف حات إلي أن ينتھي من المسابق ة فتخرج له في النھاي ة مجموع الدرجات للأ سئل ة ومعلوماته وھل ھو فائز أم خاسر!! وأقصد بذلك دخول المستخدم (maintain session) في الواقع ھذا مايسمونه بالمحافظة على الجلس ة إلى صفح ة وانتقاله من صفح ة إلى صفح ة مع المحافظ ة على معلوماته وغير ذلك من البيانات ، لكي نستطيع متابعته أولاً بأول . لانستطيع معرف ة إذا م ا كان الشخص عندما يطلب صفح ة ما ھو نفسه عندما http وا ل html في بروتوكول ا ل من السيرفر ف إن السيرفر (request) يذھب إلى الصفح ة الثاني ة إذ أن المستخدم عندما يطلب صفح ة ما يقوم بمعرف ة من أي مكان بالعالم يتكلم ھذا الشخص ويقوم بارسال استجابه إليه باعطاءه الصفح ة التي ولكن بعد ذلك ف إن السيرفر لا يعرف إذا كان ھذا الشخص ھو نفسه الذي يقوم (response) كان يطلبھا بطلب الصفحه الثانية أو الثالثة في السيرفر . وغيره من لغات برمجة الانترنت لصناعة ميكانيكية إبقاء تفاعل مستمر بين PHP ھنا تأتي ميزة ال ولكي لا نعقد الموضوع دعونا نتكلم عن ذلك ، ************************ و ال session المستخدم والسيرفر عن طريق ال عملياً فذلك أفضل لفھم الموضوع من الثرثرة التي لا فائدة منھا . استخدام الحقول المخفيه سنقوم الآن بإنشاء ثلاث صفحات ، الصفحة الأولى تطلب من المستخدم ادخال اسمه ، والصفحة الثانية تقوم بالترحيب به واعطاءه ثلاثة أسئلة ، والصفحة الثالثة تقوم باعطاءه النتيجة . افتح محرر نصوص لديك واكتب الكود التالي : <p dir="rtl" align="center"> ادخل اسمك الكريم </p> <form method="POST" action="quiz2.php"> <hr> <input type="text" name="name" size="20"><br> <input type="submit" value=" إرسال " ></p> </form> quiz.php احفظھا باسم قم بفتح محرر النصوص واكتب الكود التالي : <html dir ="rtl"> <? If (isset($name)) { Echo " مرحبا بك يا " . $name ; Echo ' <br> <form method="POST" action="quiz3.php" dir="rtl"> <input type="hidden" name = "thename" value = "’.$name.’">" من هو أول الخلفاء الراشدين ؟ </p> <p dir="rtl"><input type="radio" value=" "أبوبكر الصديق name="khlifa"> أبوبكر الصديق .</p> <p dir="rtl"><input type="radio" value=" عمر بن الخطاب " checked name="khlifa"> عمر بن الخطاب </p> <p dir="rtl">؟ من هو الفاروق </p> <p dir="rtl"><input type="radio" name="faroq" value=" عمر بن الخطاب">عمر بن الخطاب </p> <p dir="rtl"><input type="radio" name="faroq" value=" "سالم checked> سالم بن عامر </p> <input type ="submit" value = " إرسال " dir="rtl"> </form>' ; } else { echo " ; "غير مصرح لك بدخول هذه الصفحة } ?> quiz2.php احفظھا باسم قم بفتح المفكرة واكتب الكود التالي : <? If ((isset($thename)) && (isset($khlifa)) && (isset($faroq))) { echo ' لقد انتهت المسابقه يا '. $thename ; $range=0; $co = 0; if ($khlifa ==" } ("أبوبكر الصديق $range=$range+10; $co = $co +1; } if ($faroq ==" ("عمر بن الخطاب { $range=$range+10; $co=$co+1; } if ( $range < 10) { echo " ;"ليس هناك أي إجابة صحيحة } else { echo "<br>"." عدد الاسئلة التي أجبت عليها =" . $co ; echo "<br>" . " الدرجة التي حصلت عليها " . $range ; } } ?> قم بوضع الملفات الثلاثه السابقه في مجلد السيرفر ثم قم بتشغيلھا الشرح قمت في ھذا المثال بمحاو لة صنع مكنكة تواصل للبيانات ، بمعني أنني أحاول أن أقوم بالاختفاظ بالبيانات باختبار المتغيرات قبل quiz و 3 quiz عبر الثلاث صفحات بشكل متواصل ، لاحظ أنني كنت اختبر في 2 طباعة أي شي فقد يقوم المستخدم مثلا بالاحتفاظ بالصفح ة التي وصل إليھا في المفضلة ثم يقوم باكمال المسابقة في وقت آخر ولكني لا اريد ذلك بل أريد ان أجعل وقتھا محدود اً (طبع اً ھذا الكلام سيحصل إذا كانت المسابق ة طويل ة) لذلك ف إنني في كل عند الانتقال من صفح ة إلى صفح ة اقوم باختبار إن كانت جميع ھذه القيم موجود ة ولاحظ أنني كنت اجتفظ دوماً بقيم المتغيرات في متغيرات جديد ة في حقول مخفي ة وكلما كان عدد المعلومات أكبر في كل مره كان عدد الحقول المخفي ة أكثر ، إن لھذه الطريق ة أيضا مشاكلھا ويقوم بتفحص كيفي ة ملاحقته عبر المسابق ة وقد يصنع ھو ا لكود في وقت html فقد يفتح المستخدم كود ال لاحق لكي يست طيع اكمال المسابق ة بھذه الخدع ة الماكر ة ... لذلك يفضل أن لا تقوم بذلك وتقوم بجعل بمحاولة تلغيم البيانات بواسطته ومن ثم regular expression المسألة السابقة اكثر تعقيداً باستخدام ال فك ھذا التلغيم في الصفحات التي تصل اليھا البيانات . query strings ارسال بيانات بواسطة نستطيع ارسال بيانات بسيط ة بواسط ة الاس تعلامات التي نقوم بإضافتھا الى اسم الصفح ة في الأ على متبوعة ب (؟) علامة استفھام ثم اسم متغير وقيمته و إذا كان ھناك أكثر من متغير يتم الربط بينھم بعلام ة & وراجع درس النماذج لمزيد من المعلومات . وقم بكتابة الكود التالى فيھا : ask.php قم بعمل صفحة وسمھا <? If (isset($ask)) { If ($ask == login) { Echo " ;"تم تسجيل الدخول إلى الصفحة } } if (!isset($ask)) { echo " لم يتم تسجيل الدخول إلى الصفحة " . “<br>”; Echo "<A HREF=$PHP_SELF?ask=login> اضغط هنا ليتم تسجيل دخولك </a><br>"; } ?> على نظام تشغيل لينوكس إذا لم يعمل بشكل جيد على PHP قم بتجر بة ھذا المثال على موقع يدعم الوندوز لاحظ أننا في أول الولوج الى الصفح ة لم نستخد م أي استعلامات وعند الضغط على الرابط قام الرابط باختبارھا فاذا وجد انه قد تم ارسالھا (بواسطه الرابط الذي تم PHP بارسال قيمه المتغير الذي يقوم ال الضغط عليه ) قام بطباع ة (تم تسجيل الدخول ) واذا لم يجدھا قام بطباع ة (لم يتم تسجيل الدخول ) بالإضافة إلى طباعة الرابط الذي يحتوي على المتغير في طياته (************************s) الكوكيز أو الكعكعات إذاً ماھي الكوكيز ، الكوكيز ھي عبار ة عن بعض المعلومات أو القطع الصغير ة من البيانات يتم الاحتفاظ بھا في جھاز العميل لكي يتم الاحتفاظ بھا عند الزيارات المختلف ة للمستخدم (العميل) ، أنت لا تقوم بالاحتفاظ فيھا بقيم ضخمة لكنك تستفيد منھا في أشياء أخري مثل : 1 - جعل لكل مستخدم الأ لوان الخاص ة التي يري فيھا صفحتك ( أي أن تجعل للمستخدم مث لاً إعدادات الألوان الخاصة لرؤية موقعك ) . 2 - جعل مفتاح للمستخدم لكي يستطيع به التحكم في بياناته الخاص ة عند زياراته لموقعك في مرات اخري. الكوكيز مفيد للاستخدام في الأ شياء البسيط ة والغير خطير ة ، لكنه الآ ن يست خدم بشكل سئ ، مثل استخدامه مثلا في معرف ة معلومات عن المستخدم بدون علم منه ، أو تخزين كميات كبير ة من البيانات فيه والتي من الأجدر أن يتم حفظھا في ملف على السيرفر . ويكون استخدامه مفيدا عندما تضمن أن جميع زوار موقعك تسمح متصفحاتھم بالكوكيز (مثل طلبة المدارس أو شبكات انترانت ) . عندما يكون فقط لأشياء بسيطة لاضرر منھا عند عدم السماح بالكوكيز بجھاز العميل . بدايتك مع الكيوكيز قبل أن نبدأ علينا معرفة بعض الأساسيات عن الكيوكيز الكوكيز عبار ة عن قطع ة صغير ة من البيانات التي تستخدم لتخزين اسم متغير وقيمته مع مع لومات حول الموقع التي أتت منه وتاريخ انتھاءھا . تتخزن في ملفات في جھاز العميل (client-side storage) الكوكيز عباره عن تقنية للتخزين من جھة العميل يتم العبور إلى ھذه الكوكيز ومسحھا من المكان التي ارسلت منه . عندما يطلب المستعرض صفح ة من السيرفر وھذه الصفح ة تقوم بتتخزين كوكيز ف إن السيرفر يقوم باخبار المستعرض بأنه سيقوم بوضع كوكيز للاستعمال لاحقا . عندما يتم طلب الصفح ة في مر ة آخري يقوم المستعرض بارسال البيانات الت ي تم إنشاؤھا سابق اً عند طلب الصفحه . يتم انتھاء مده الكوكيز بإنتھاء وقت صلاحيتھا االمحدد من قب ل السيرفر ويتم مسحھا فوري اً عند اغلاق الصفحة إذا كان وقت صلاحيتھا صفراً من الثواني . بإختصار عندما يعطي السيرفر الكوك يز للمستعرض فإنه يقول لك ھذا شي اتذكرك به في وقت لاحق (قد يكون ھذا الوقت من ضغط رابط آخر في الصفحة التى زرتھا حتي بعد أسبوع أو أكثر ) . html الذي يتم إرساله قبل أي مخرج من مخرجات ال HTTP Headers يقوم السيرفر بإرسال الكوكيز عبر ال بالإضافه إلى أن المستعرض يتعرف على من HTTP Header والمستعرض أيضا يقوم بإرسال الكوكيز عبر ال فإنه لن يقوم بإرسالھا www.php.net سيقوم بإرسال الكوكيز فلو كانت الكوكيز مثلا مرسلة من قبل الموقع . www.phpbuilder.com إلى موقع باستطاعتك عند إنشاء الكوكيز تحديد مسار يتم ارسال الكوكيز لكي يتم اقتصار عملي ة العبور إلى الكوكيز إلى أماكن معينة . قبل أن نقوم بوضع كود بسيط سنقوم الآن بتعريف كيفية تخزين الكوكيز وكيفية قراءتھا : set************************() لغ ة حديثه لعمل سكربتات ويب ف إنھا ت أتي بدعم كامل للكوكيز بواسط ة الدال ة PHP كون ا ل . html باستثناء أنك عند استعمالھا يجب استعمالھا قبل طباعة أي مخرجات ثلاث معاملات ، الثلاثة الأولى ھي الأھم والأمثل استخداماً وھي بالترتيب : set************************() تاخذ الدالة قيمة حرفية يتم تخزينھا كاسم للمتغير v قيمة حرفية يتم تخزينھا كقيمة لذلك المتغير v الذي يقوم بالإشارة إلى تاريخ إنتھاء الكوكيز Unix timestamp v عبارة عن رقم صحيح لا يحتوي على فواصل عشر ية يقوم بحساب الثواني من Unix timestamp 01 . وإذا كنا نريد مثلاً أن نقوم بمسح الكوكيز بعد ساعة من تخزينه ف إننا نقوم /01/ منتصف ليلة 1970 ثم نضيف عليه الوقت الذي نريده وفي حالتنا timestamp التي تقوم بحساب ال time() باستعمال الدا لة على 3600 لكي يتم مسح time الساعه تساوي 3600 ثاني ة وعلى ذلك سنقوم بإضاف ة ناتج الدال ة الكوكيز بعد ساعة واحدة ! الثلاث العوامل الأ خري التي يتم ستخدامھا أيضا في الكوكيز ولكنھا نادرة الاستخدام ولن نناقشھا في موضوعنا ھذا ھي : المسار الذي يتم إرسال الكوكيز إليه فلو تم فتح نفس الصفحة من نفس الموقع ولكن من مسار ü فان المستعرض لن يقوم page\url\two وتم تغييره إلى pag\url\one اخر ( مثلاً المسار كان بارسال البيانات إلي الصفحة لأنه تم تحديد المسار الذي سيتم ارسال الكوكيز اليه ) الدومين الذي سيتم إرسال البيانات إليه وھو مفيد في حالة ما إذا كان ھناك أكثر من دومين تريد ü ارسال الكوكيز اليه SSL يتم في حالة استخدام عمليات تشفير بال secure يتم الإشارة إليه ب integer متغير من نوع ü وعندئذ (global) العبور الى الكوكيز بسيط جد اً فالمتغير الذي يتم ارساله يتم تخزينه ضمن المتغيرات العام ة !! $ahmed فإن قيمته توضع مباشرة في متغير اسمه ahmed فإنه لو كان لدينا كوكيز اسمه يمكننا مسح الكوكيز بأكثر من طريق ة ، بالطبع ف إن المستخدم يستطيع مسح الكوكيز وتغيير محتوياتھا بنفسه ولكن في حالة ما إذا أردنا أن نجعل السيرفر يقوم بمسحھا فإننا نستخدم إحدي ھاتين الطريقتين إما أن نقوم بإخبار السيرفر بوقت قديم : <? Set ************************ (“ahmed” , “0”, time()-999); ?> وإما القيام بمسح الكوكيز بكتابة اسمه فقط : <? Set************************ (“ahmed”); ?> مثال لتخزين وقراءة كوكيز قم بفتح المفكرة واكتب الكود التالي : <? If ($thename) set************************ ("rname", $thename, time()+3600); Echo '<form method="post"> <input type ="text" name="thename"> <input type="submit" value=" <"تسجيل </form>'; echo " قيمه المتغير الذي لديك ". " ". $thename ."<br><br>"; echo " قيمة الكوكيز =" . $rname ; ?> الشرح عند تشغيل الصفحه لاول مره فإذا تم الحصول عليه فسيتم $thename عند تشغيلك للصفحة سيتم اختبار ما إذا كان ھناك متغير بالاسم وطبعا لن يتم الحصول عليه في أول مرة لأننا لم نقم بارسال أي ) (rname) وضع قيمته في كوكيز باسم بيناات بعد) وبعد ذلك طباعة نموذج من مربع نص واحد وزر لإرسال المعلومات . ويتم فحص قيمة الكوكيز $thename ويتم طباعة قيمة المتغير إذا كان ھناك أي متغير تم ارساله باسم وطباعتھا وبالطبع لا يوجد حتي الآن أي كوكيز . $rname المرحلة الثانية الآن قم بكتابة أي شي في مربع النص (اكتب اسمك مثلاً) ثم قم بضغط زر الارسال سيتم ارسال البيانات (rname) الى نفس الصفحة ولكن ھذه المرة سيتم تسجيل قيمة المتغير الذي يحمل البيانات في الكوكيز ولكن لن يتم طباعة $thename وبعد ذلك سيتم طباعة النموذج بشكل عادي وسيتم طباعة قيمة المتغير لأننا فقط قمنا بتسجيله ولم يتم ارساله عند طلب الصفحة (لأننا نعرف أنه يتم $rname قيمة المتغير ارسال الكوكيز عند طلب الصفحة وھذه المرة عندما طلبنا الصفحة لم يكن الكوكيز موجوداً بالأصل فلم يرسله السيرفر وقمنا نحن بتسجيله استعداداً للمرحلة القادمة ) . المرحلة الثالثة في ھذه المرة سيكون الكوكيز موجوداً فسيتم ارساله على ھيئة متغير ويتم ارساله ومن ثم طباعة وقيمة الكوكيز الذي يوجد بجھازك ! $thename النموذج وقيمه المتغير | |
|