بسم الله الرحمن الرحيم
كل عام و أنتم بخير
اليوم ببدأ تطبيق من عدة تطبيقات رح أكتبها بنفسي خلال الأيام القادمة وبما إنها أول مشاركة لي أحب أبدأ بهذه المقدمة
مقدمة:
انا من حوالي 3 سنين بديت أتعلم php و كان موقع سوالف سوفت له فضل كبير علي من الدروس و التطبيقات يلي تصير فيه و الحمد لله استفدت منه الكثير و اليوم برد جزء بسيط من يلي استفدت منه وهو أني اعمل عدد من التطبيقات للاجاكس بعد ما تعلمته من فترة ليست بعيدة لأني لاحظت قلة التطبيقات في هذا القسم و إن شاء الله كلكم تستفيدوا منه و يعجبكم شرحي خاصةً أني اول مرة اعمل درس :1power:
فهذه السلسلة من التطبيقات أهديها لموقع سوالف سوفت وكل عضو إستفدت من مواضيعه و مشاركاته
وحقوق النقل لكل مسلم بشرط كتابة اسمي و المنتدى و رابط الموضوع الأصلي إن أمكن
في بالي الأن هذه ال4 مواضيع :
1- تصويت باستخدام الاجاكس
2-دردشة باستخدام الأجاكس
3-تسجيل عضويات عن طريق الاجاكس
4-تسجيل دخول عن طريق الأجاكس
و إذا خلصتهم ببدأ أقكر في غيرهم إن أمكن
طبعا التطبيقات موجهة لمين هم في بداية الأجاكس أو مين يحب يزيد معلوماته من أصحاب الخبرة
وطبعا لازم يكون على علم بالphp و javascript يلي رح يتابع التطبيق لأني مارح أضيع الوقت في شرح أوامر الphp و الjava script
و أعذروني على أي خطأ يقع بغير قصد
بسم الله أبدا التطبيق الأول : تصويت أجاكسي
1- السكربت الرئيسي:
في البداية نحتاج إلى إنشاء ثلاث ملفات هي:
أ-display.htm (سوف تكون الصفحة الرئيسية التي يتم فيها التصويت)
ب-poll.js (ملف الجافا سكربت الذي سوف يتضمن داخل display.htm)
ج- poll_vote.php (الملف الذي سوف يقوم بإستقبال التصويت و طباعة النتائج)
وسوف نقوم بإضافة جدول في قاعدة البيانات لكي يخزن نتائج التصويت :
و ندخل التسجيل التالي :كود:CREATE TABLE `poll` ( `id` int(11) NOT NULL auto_increment, `number1` int(11) NOT NULL, `number2` int(11) NOT NULL, `number3` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM
الان نأتي لكتابة الملف الأول (display.htm) نقوم بكتابة الهيد و أكواد الxhtml الأساسية و لا ننسى أن نضع جلب ل poll.js :كود:INSERT INTO `poll` VALUES (1, 0, 0, 0);
نكمل الملف الأن بإضافة ال(inputs) من نوع (radio) داخل div نعطيه id=poll وهذا رح يفيدنا في تغيير المحتوى لاحقاً .طبعا رح تلاحظوا أني مارح اهتم بالمحتوى بتركها لكم تحطوا السؤال يلي تريدون وحتى الشكل نفس الشي .المهم هو شرح طريقة التصويت بالاجاكس:كود HTML:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv='Content-Type' content='text/html; charset=utf-8'> <title>POLL</title> <script src="poll.js"></script> </head>
بتلاحظا كيف إننا انشئنا ثلاث إختيارات و عطيناه الاسم vote و قيمة كل إختيار (value) هي التي رح تحدد الإختيار يلي تم إختياره من المستخدمكود HTML:<body><div id="poll"> <h2>[Question]</h2><form> <p>[Number 1]: <input type="radio" id="vote1" name="vote" value="1" /> <br /> [Number 2]: <input type="radio" id="vote2" name="vote" value="2" /> <br /> [Number 3]: <input type="radio" id="vote3" name="vote" value="3" /> </p> </form> </div><br /><div style="z-index:3" class="smallfont" align="center">Search Engine Optimization by <a rel="nofollow" href="http://www.crawlability.com/vbseo/">vBSEO</a> 3.1.0</div><br /><div style="z-index:3" class="smallfont" align="center">Search Engine Optimization by <a rel="nofollow" href="http://www.crawlability.com/vbseo/">vBSEO</a> 3.1.0</div></body> </html>
بقي شيء واحد في هذا الملف وهو إضافة الحدث (event) عند النقر على الخيار سوف يتم تنفيذ أمر الجافا سكربت الخاص بتسجيل التصويت. إذا نضيف :
onClick="getVote(this.value)"
إلى داخل التاج الخاص بخيار التصويت حيث عند الضغط يشتغل العملية ( function) بإسم (getVote) و يرسل للعملية قيمة الحقل أيضاً
يصبح الملف كاملاً:
الأن نأتي للملف الثاني poll.js و نضيف أولا العملية (function) الشهيرة يلي اشتغل بالأجاكس أكيد رح تكون مرت عليه و عملها هو التأكد من ان المتصفح يدعم الأجاكس و تحديد الكيفية حيث أن Firefox, Opera 8.0+, Safari تستخدم XMLHttpRequest() أما Internet Explorer يستخدم إما ActiveXObject("Msxml2.XMLHTTP") أو ActiveXObject("Microsoft.XMLHTTP") على حسب بعض الإصداراتكود HTML:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv='Content-Type' content='text/html; charset=utf-8'> <title>POLL</title> <script src="poll.js"></script> </head> <body> <div id="poll"> <h2>[Question]</h2> <form> <p>[Number 1]: <input type="radio" onClick="getVote(this.value)" id="vote1" name="vote" value="1" /> <br /> [Number 2]: <input type="radio" onClick="getVote(this.value)" id="vote2" name="vote" value="2" /> <br /> [Number 3]: <input type="radio" onClick="getVote(this.value)" id="vote3" name="vote" value="3" /> </p> </form> </div></body> </html>
المهم هذا هو الفنكشن :
الان رح نضيف الفنكشن الثاني (getVote) يللي رح ينفذ عند الضغط على خيار التصويت :كود:function GetXmlHttpObject() { var xmlHttp=null; try { // Firefox, Opera 8.0+, Safari xmlHttp=new XMLHttpRequest(); } catch (e) { // Internet Explorer try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); } } return xmlHttp; }
طبعا اول شي في الفنكشن رح يقوم بتنفيذ عملية التحقق يلي كتبناها و يعطي تحذير إذا كان المصفح لا يدعم الاجاكس و يخرج من العملية حينها :كود:var xmlHttp function getVote(int) { xmlHttp=GetXmlHttpObject() if (xmlHttp==null) { alert ("Your browser do not support HTTP Request") return } var url="poll_vote.php" url=url+"?vote="+int url=url+"&sid="+Math.random() xmlHttp.onreadystatechange=stateChanged xmlHttp.open("GET",url,true) xmlHttp.send(null) }
بعد ما يتأكد ان المتصفح يدعم الأجاكس و كل شي تمام نجي لتركيب عنوان الصفحة يلي رح ترسل لها البيانات و يستقبل منها النتائج أيضاَ :كود:xmlHttp=GetXmlHttpObject() if (xmlHttp==null) { alert ("Your browser do not support HTTP Request") return }
مثل مو ملاحظين ان المتغير يلي استقبله الفنكش (int) هو يلي رح يرسل على شكل GET حتى تستقبله صفحة poll_vote.phpكود:var url="poll_vote.php" url=url+"?vote="+int url=url+"&sid="+Math.random()
وممكن البعض يتسائل ليش أضفنا متغير ثاني للصفحة وهو (sid) و عطيناه قيمة غير ثابتة تتغير كل مرة (Math.random()) ؟؟
أنا لاحظت في كثير من تمارين و دروس الأجاكس إضافة متغير مثله خاصةً في اللتي ما يكون فيها إرسال بيانات متغير و غير ثابتة (مثل تطبيقنا ) أما في البيانات الغير ثابتة مثل (إرسال نصوص ) ففي بعض الاحيان لا يكون موجود و حاولت أبحث عن السبب لكن ما وجدت حتى جربت أشيله بنفسي و لاحظت انه بعد ما شلته فتبين ان المتصفح صار يطبع دائما نفس النتيجة و كأنك شغال في وضع (غير متصل ) وكل ما أرسل بيانات ما يتغير شي و تجيني النتائج القديمة فهذا الكود حتى ما يظل عنوان الصفحة ثابت بالنسبة للمتصفح وممكن في بعض المتصفحات يشتغل كل شي تمام بدونه لكن أنا جربته كثير و على هذا التمرين أيضا و فعلا صارت المشكلة نفسها لما شلته المهم أي واحد يجرب يشيله و يشوف النتائج كيف
بالنسبة لأخر 3 سطور هي عملية الإرسال و الإستقبال يلي تصير حيث :
xmlHttp.onreadystatechange=stateChanged
هذا حتى يقوم بتشغيل العملية (function) stateChanged عند الحصول على نتائج من الصفحة المرسل لها البيانات ويلي يحب يعرف أكثر عنها :
The onreadystatechange property stores your function that will process the response from a server. This is not a method, the function is stored in the property to be called automatically.
خلاصتها انها عملية تعالج الرد من السيرفر مافي داعي لفلسفات زايدة
و في :
نستخدم open() و send() لإرسال طلبنا للسيرفر و الopen() تأخذ ثلاث قيم : الأولى لتحديد طريقة إرسال البيانات (GET أو POST ) و الثاني لعنوان الصفحة و هنا عطينها المتغير url يلي أنشئنها و الثالث يحدد إذا كان الطلب تريده أنه يعالج بشكل لا توافقي ام لاكود:xmlHttp.open("GET",url,true) xmlHttp.send(null)
الأن بقي شي وحد و أخير نضيفه في ملف الجافا سكربت (poll.js) وهو العملية الي رح تنفذ عند :نضيف :كود:xmlHttp.onreadystatechange=stateChanged
عند وصول الرد من الصفحة الفنكشن هذا سوف ينفذ وملاحظين الشرط إنه إذا كانت xmlHttp.readyState تساوي 4 أو complete طبعا البعض رح يبدا يتسائل ليش 4 ؟؟ رح اوضح لكم:كود:function stateChanged() { if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") { document.getElementById("poll").innerHTML=xmlHttp.responseText; } }
هذا ال readyState يتغير في كل مرة على حسب إرسال ووصول البيانات و في كل مرة يتغير تشتغل ال onreadystatechange وممكن يحمل قيم من 0 إلى 4 على حسب حالة إرسال و إستقبال البيانات و هي :
0 = The request is not initialized
1 = The request has been set up
2 = The request has been sent
3 = The request is in process
4 = The request is complete
0 تعني أن الطلب لم يشغل بعد
1 تعني الطلب بدأ
2 الطلب أرسل
3 الطلب في العملية
4 الطلب إكتمل
وطبعاً هذي رح تفيدنا بعدين في (الإضافات) لما رح نعمل ال (loading) المهم نخليها لبعدين . نحنة رح نهتم الأن إذا كانت تساوي 4 أو complete (أنا شفت في بعض التطبيقات يحط الcomplete أيضا ممكن لان بعض المتصفحات ما تعطي 4 بل complete فلذلك للأمان نضع الشرطين )فعند إكتمال وصول البيانات يتم إستبدال الdiv يلي عملناه في الصفحة الأساسية و إستطعنا تحديده عن طريق ال id بالبيانات المستقبلة (xmlHttp.responseText) حيث تمثل البيانات اللي رح تطبع في صفحة إستقبال البيانات
الان نكون إنتهينا من ملف poll.js
وهذا هوا كامل لمن يريد أن يتأكد أنه جمع كل الاكواد بشكل صحيح :
نأتي الأن للملف الأخير الذي سوف يقوم بإستقبال البيانات و طباعة النتائج (poll_vote.php) (مارح اتوقف فيه واشرح كثير مجرد رؤوس أقلام لانه من المفترض أن تكون على علم بهذه الأوامركود:var xmlHttp function getVote(int) { xmlHttp=GetXmlHttpObject() if (xmlHttp==null) { alert ("Your browser do not support HTTP Request") return } var url="poll_vote.php" url=url+"?vote="+int url=url+"&sid="+Math.random() xmlHttp.onreadystatechange=stateChanged xmlHttp.open("GET",url,true) xmlHttp.send(null) } function stateChanged() { if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") { document.getElementById("poll").innerHTML=xmlHttp.responseText; } } function GetXmlHttpObject() { var xmlHttp=null; try { // Firefox, Opera 8.0+, Safari xmlHttp=new XMLHttpRequest(); } catch (e) { // Internet Explorer try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); } } return xmlHttp; }):
أول شي رح نضيف متغير لإستقبال vote على شكل GET :
بعدين رح نعمل إتصال بقاعدة البيانات :كود PHP:$vote = $_GET['vote'];
طبعا لا تنسى تغيير المتغيرات بما يتناسب مع قاعدة بيناتك يلي تشتغل عليهاكود PHP:$host="localhost";
$dbname="ajax";
$dbuser="almaster";
$dbpass="";
$con=mysql_connect($host,$dbuser,$dbpass)
or die("CONNECTION FAILED");
mysql_select_db($dbname,$con)
or die("can't connect to DB");
بعدين نعمل إختيار للجدول poll ووضع المتغيرات اللازمة :
الأن نجي لفحص قيمة الvote يلي استقبناها ووعمل اللازم على حسب الخياركود PHP:
$select=mysql_query("SELECT * FROM poll where id='1' ") or die("can't get poll");
$row=mysql_fetch_array($select);
$number1 =$row["number1"];
$number2 =$row["number2"];
$number3 =$row["number3"];
(نزود 1 للخيار يلي اختاره المستخدم)
باقي إرسال التعديل اللي خلص لقاعدة البيانات :كود PHP:if ($vote == 1)
{
++$number1;
}
elseif ($vote == 2)
{
++$number2;
}
elseif ($vote == 3)
{
++$number3;
}
الان نكون خلصنا من كل عمليات المعالجة و التعديلكود PHP:$update = ("UPDATE `poll` SET `number1` = '$number1' , `number2` = '$number2' , `number3` = '$number3' WHERE id='1' ");
$result = mysql_query($update)or die("can't edit poll ");
. الاكواد مجمعة :
باقي أن نقوم بطباعة البيانات حتى تعرض و انا رح اعطيكم ياها كاملة يضاف بعد الكود السابق :كود PHP:<?php
$vote = $_GET['vote'];
$host="localhost";
$dbname="ajax";
$dbuser="almaster";
$dbpass="";
$con=mysql_connect($host,$dbuser,$dbpass)
or die("CONNECTION FAILED");
mysql_select_db($dbname,$con)
or die("can't connect to DB");
$select=mysql_query("SELECT * FROM poll where id='1' ") or die("can't get poll");
$row=mysql_fetch_array($select);
$number1 =$row["number1"];
$number2 =$row["number2"];
$number3 =$row["number3"];
if ($vote == 1)
{
++$number1;
}
elseif ($vote == 2)
{
++$number2;
}
elseif ($vote == 3)
{
++$number3;
}
$update = ("UPDATE `poll` SET `number1` = '$number1' , `number2` = '$number2' , `number3` = '$number3' WHERE id='1' ");
$result = mysql_query($update)or die("can't edit poll ");
?>
بتلاحظوا إننا رح نحتاج صورة بإسم poll.jpg في نفس المجلد اصنعها بالرسام و حطها بأي لون و الحجم لا يهم لانه رح يحدد بحسب نسبة التصويت يلي حسبنا العرض بالنسبة المؤية عن طريقكود PHP:<h2>[Result]:</h2>
<table>
<tr>
<td>[Number 1]:</td>
<td>
<img src="poll.jpg"
width='<?php echo (100*round($number1/($number1+$number2+$number3),2)); ?>'
height='20'>
<?php echo (100*round($number1/($number1+$number2+$number3),2)); echo"% ($number1)";?>
</td>
</tr>
<tr>
<td>[Number 2]:</td>
<td>
<img src="poll.jpg"
width='<?php echo (100*round($number2/($number1+$number2+$number3),2)); ?>'
height='20'>
<?php echo (100*round($number2/($number1+$number2+$number3),2)); echo"% ($number2)";?>
</td>
</tr>
<tr>
<td>[Number 3]:</td>
<td>
<img src="poll.jpg"
width='<?php echo (100*round($number3/($number1+$number2+$number3),2)); ?>'
height='20'>
<?php echo (100*round($number3/($number1+$number2+$number3),2)); echo"% ($number3)";?>
</td>
</tr>
</table>
(100*round($number1/($number1+$number2+$number3),2))
مثل ما تعرفوا النسبة =( (المراد حساب نسبته)\الكل)*100
وطيعا رح اطبع بعد عدد الأصوات اللي صوت له بجانب النسبة
هكذا نكون خلصنا من السكربت بدون إضافات وما عملنا غير الاوامر اللازمة و الإضافات القليلة
ننتقل للقسم الثاني من التطبيق
2- الإضافات:
في هذا القسم رح اضيف بعض الأشياء يلي رح تحسن السكربت و كل شي خطر على بالي إضافي له إختصاراً للوقت لو جاء واحد وسأل :كيف أضيف..؟ و كيف أعمل...؟
أ- كيف أعمل رسالة الإنتظار (loading) ?
فعلا أعتقد انها مهمة في كل تطبيقات الاجاكس حيث ممكن لبعض المستخدمين خاصةً يلي اتصالهم بطيء بالانترنت ان يواجه مشكلة في عدم معرفة أن الصفحة تقوم بالعمل لإظهار نتائج له (وهذه من عيوب الأجاكس) و طبعا حلها اننا نكتب للمستخدم عبارة (يرجى الإنتظار , تتم المعالجة ) عند تنفيذ بداية تنفيذ الأمر و نخفيها عند الإنتهاء
ومن القسم الماضي كتبت عن ال readyState وكيف ممكن تأخذ القيم من 0 إلى 4 وهذا رح يفيدنا في معرفة إذا تم إستقبال البيانات لطباعتها او لم تنتهي بعد
فنروح للعملية (function) stateChanged() و نضيف شرط :
حيث عندما تكون الreadyState تساوي 0 او 1 او 2 أو 3 (أي لم ينتهي من تنفيذ الطلب ) نقوم بتغيير الdiv يلي حددناها عن طريق الid ب الرسالة يلي حطيتها الان مثالاً please wait...كود:if (xmlHttp.readyState==0 || xmlHttp.readyState==1 || xmlHttp.readyState==2 || xmlHttp.readyState==3) { var msg="please wait..."; document.getElementById("poll").innerHTML=msg; }
وطبعا لما يوصل للرقم 4 رح يتم تنفيذ الشرط الأساسي بإستبادل الdiv بالبيانات المطبوعة من الصفحة
ملاحظة: ممكن إختصار الشرط ووضع xmlHttp.readyState!==4 بدال الأربع شروط لكن فضلت أخليه هكذا خوفاً أن تكون بعض المتصفحات تعطي قيمة complete وكمان كبداية حتى يتذكر مين أول مرة يشتغل على الاجاكس وممكن البعض يقوم بوضع مثل نسبة مؤية تزداد كلما إنتقل الreadyState إلى قيمة أكبر حتى تصل إلى 100% كل واحد يجط الأفكار يلي يراها مناسبةلكن هنا لا أفضل فعملية التصويت ليس فيها إرسال بينات كبيرة حتى نقوم بوضع مثل هذا الشيء يكفي عبارة تطلب الإنتظار
ممكن وضع رسالة الإنتظار في div خاص أسفل الفورم بحيث يطبع رسالة الإنتظار و يبقي الفورم يلي فيه إختيار التصويت على حاله طبعا عن طريق تغيير poll الموجودة في :
ووضع الid للdiv يلي عملته و أكيد لا تنسى أنك تضيف مسح للdiv أو طباعة done عند تحقق شرط مساوات readyState بال4كود:document.getElementById("poll").innerHTML=msg;
بخليها لكم يلي يريد أن يعمل هذه الحركة
ب-كيف أعمل رابط لرؤية النتيجة قبل التصويت؟
كل ما عليك تعمل رابط عادي و يكون الرابط ل javascript:getVote() و طبعا هذا رح يخليك تعمل رابط في صفحة النتائج يرجعه للتصويت و طبعا هنا الشغلة رح تحتاج لعملية (function) جديدة حتى تطبع لنا خيارات التصويت و أنا صراحة ما فكرت فيها لذلك بخليها لبعدين إذا عملتها بحطها رد لكم
ج-كيف أمنع شخص من التصويت أكثر من مرة ؟
اعتقد بهذه الإضافة رح اطلع عن الموضوع في شرح الأجاكس لكن بعطي الفكرة العامة تكون بوضع كووكيز لما يتم التصويت و لما يرجع الزائر نفسه يشوف صفحة التصويت يكون فيه شرط يتأكد من الكووكيز و إذا كان صحيح يتم طباعة النتيجة او يطبع خيارات التصويت
و البعض ممكن يقول الكووكيز غير موثوق حيث ممكن الواحد يمسح الكووكيز و يرجع يصوت مرة ثانية بدون مشاكل هنا أقله ممكن تستخدم الip حيث تحفظ آي بي كل شخص يصوت في قاعدة البيانات وتعمل شرط نفس تبع الكووكيز في التأكد
د-أريد أن اضع خيارات التصويت على شكل صور أو مجرد كلام و عند الضغط عليه يتم التصويت فكيكف ؟
بالتاكيد تستطيع عمل ذلكل عن طريق وضع onClick="getVote(this.value)" في المكان الذي تريد أن يضغط عليه ليتم التصويت لكن يجب أن تغير this.value إلى رقم الخيار المراد التصويت له
ه-لا أريد ان يكوت التصويت تلقائياً عند الضغط على الخيار أريد ان يكون هناك زر(ضغطة) "صوت" بعد إختيار الخيار المناسب (مثل الطريقة القديمة في إرسال البيانات دون أجاكس) فكيف ؟؟ :con2:
نعم معك حق وهذا انا نفسي أفضله حيث لازم نعطي المستخدم فرصة تفكير شوي![]()
لكن الطريقة رح يكون فيها تعديلات كبيرة شوي حيث رح نغير العديد من الأوامر لكن بشرحها كاملة :
أول شي نفتح ملف display.htm و نضيف زر الإرسال قبل نهاية الفورم:
لاحظ الحدث الموجود عند الضغطكود HTML:<input type="submit" name="send" id="send" value="VOTE" onClick="getVote()" />
بعدين لا ننسى إننا نحذف الحدث (event) عند الضغط (onClick) في إختيارات التصويت
نحذف:
فتصبح :كود:onClick="getVote(this.value)"
الان نروح لملف poll.js و نقوم بتغيير :كود HTML:<p>[Number 1]: <input type="radio" id="vote1" name="vote" value="1" /> <br /> [Number 2]: <input type="radio" id="vote2" name="vote" value="2" /> <br /> [Number 3]: <input type="radio" id="vote3" name="vote" value="3" /> </p>
إلىكود:function getVote(int) {
حتى نخلصه من المتغير يلي يقدر الواحد يضيفها عليهاكود:function getVote() {
بعدين في نفس الفنكشن نضيف :
حتى نقوم بتحديد الخيارات بحسب الidكود:var vote1 = document.getElementById('vote1'); var vote2 = document.getElementById('vote2'); var vote3 = document.getElementById('vote3');
الأن لازم أن نقوم بتغيير الurl حيث سوف نرسل 3 متغيرات لاحظوا :
عن طريق ال .checked سوف نعرف إذا كان الخيار مختار فيعطينا القيمة : true او غير مختار فيعطي falseكود:var url="poll_vote.php" url=url+"?vote1="+vote1.checked url=url+"&vote2="+vote2.checked url=url+"&vote3="+vote3.checked url=url+"&sid="+Math.random()
ولاننسى نحط شرط إذا لم يحدد المستخدم أحد الخيارات فنقوم بالتنبيه و الخروج من العملية:
تصبح الفنكشن كاملة :كود:if (vote1.checked==false && vote2.checked==false && vote3.checked==false) { alert ("You must choose something!") return }
الأن نذهب للملف الأخير poll_vote.php :كود:function getVote() { xmlHttp=GetXmlHttpObject() if (xmlHttp==null) { alert ("Your browser do not support HTTP Request") return } var vote1 = document.getElementById('vote1'); var vote2 = document.getElementById('vote2'); var vote3 = document.getElementById('vote3'); if (vote1.checked==false && vote2.checked==false && vote3.checked==false) { alert ("You must choose something!") return } var url="poll_vote.php" url=url+"?vote1="+vote1.checked url=url+"&vote2="+vote2.checked url=url+"&vote3="+vote3.checked url=url+"&sid="+Math.random() xmlHttp.onreadystatechange=stateChanged xmlHttp.open("GET",url,true) xmlHttp.send(null) }
ونقوم بالتعديل على مستقبل البيانات لأنه لدينا الأن 3 متغيرات نحتاجها :
و شرط التأكد و زيادة عدد الأصوات يصبح :كود PHP:$vote1 = $_GET['vote1'];
$vote2 = $_GET['vote2'];
$vote3 = $_GET['vote3'];
هكذا تكون إنتهينا من تحويل طريقة التصويت عن طريق النقر فقط إلى النقر مرة على الخيار ثم على الزر للتأكيدكود PHP:if ($vote1=='true')
{
++$number1;
}
elseif ($vote2=='true')
{
++$number2;
}
elseif ($vote3=='true')
{
++$number3;
}
وبهذا أنهي التطبيق كامل و إن شاء الله يكون الجميع فهمه و إستفاد منه :app:
الان اي واحد عنده سكربت تصويت يقدر يعدل عليه إن أمكن و يخليه أجاكس أو حتى تصنع سكربت التصويت الخاص فيك ليش لأ
عن طريق شويت أفكار إن شاء الله توصل للي تريده
لأي سؤال أو استفسار تفضل
------------------------
إنتظروني في التطبيق القادم : دردشة أجاكسية :nice:
إن شاء الله بحطه بأسرع وقت أول ما أخلصه خلال الأسبوع القادم
ورح أناقش فيه كيف إرسال بيانات عريبة بالاجاكس لأنه إحتمال أستخدم مكتبة jquery (رغم أني لا افضل إستخدام المكتبات) وكيفية عمل الرفرش الاجاكسي
كل هذا إن شاء الله قريباً إذا ما حصل ما يشغلني عنه![]()



. الاكواد مجمعة :

رد مع اقتباس
