×

$درس[1] عمل نظام تصويت متكامل

السلام عليكم ارى ان الكثير يسئل عن عمل نظام تصويت فقمت ببرمجة نظام تصويت لكتابت هذا الدرس لعله يفيدكم. سوف اقوم بتبسيط الطريقة حتى يسهل
قديمة 09 - 08 - 2005, 23:58
المشاركة 1
السلام عليكم
ارى ان الكثير يسئل عن عمل نظام تصويت
فقمت ببرمجة نظام تصويت
لكتابت هذا الدرس لعله يفيدكم.

سوف اقوم بتبسيط الطريقة حتى يسهل فهمها وطبعا بعدها نضيف اى شىء
وسوف يتم شرح عمل نظام تصويت متكامل php +mysql
نبدأ بأسم الله

اولا
فلننشأ جدول في قاعدة البيانات لتخزين التصويت
رمز PHP:
CREATE TABLE `pool` (
  `
poolidint(10unsigned NOT NULL auto_increment,
  `
by_uservarchar(100NOT NULL default '',
  `
questionvarchar(100NOT NULL default '',
  `
answerstext NOT NULL,
  `
vote_numbertext NOT NULL,
  `
start_dateint(14NOT NULL default '0',
  
PRIMARY KEY  (`poolid`)
); 
العامود الاول poolid لتخزين ايد التصويت لسهولة جلبه والتعامل مع التصويت الخ..
وجلعنا نوعه int لتخزين الاعداد الصحيحه و atuo_increment لنجعل قيمته تكراريه.

العامود by_user لتخزين اسم الذى اضاف التصويت.

العامود question لتخزين سؤال التصويت.

العامود answers وقد جلعنا نوعه text لاننا سوف نخزن جميع اجوبة السؤال للتصويت وسوف نفصلها بأي علامه.

العامودvote_number وقد جلعنا نوعه text لاننا سوف نخزن عدد الاصوات لكل جواب وسوف نفصلها بأي علامه.

العامود start_date لتخزين تاريخ ووقت اضافة التصويت
وجلعنا نوعه int لتخزين التاريخ والوقت عن طريق دالة الـphp الدالة time();

واخيرا PRIMARY KEY (`poolid` المفتاح الاساسي العامود poolid


والان فلننشأ ملف جديد
ونسميه pool.php

وطبعا اولا سوف نحتاج للاتصال بقاعدة البيانات
ولا اظن انه يخفي على احدكم هذا

رمز PHP:
mysql_connect("localhost","user","1234");
mysql_select_db("test"); 
طبعا مع وضع التعديلات بما يناسبك

والان سوف نعمل فورم للمستخدم
لادخال عدد الاجوبه التى يريدها للتصويت
وطبعا نستطيع عمل هذه في نفس الفورم الذى به السؤال
لاكن لتوضيح الطريقه وحتى يسهل فهمها
رمز PHP:
if ($_GET['poolgo']=="showtools") {

echo 
'<form action="poll.php?poolgo=last" method="POST">';

echo 
'<td>عدد الأجوبة <input type="text" name="numvote" size="2" maxlength="2" tabindex="1" value="4"></td>';

echo 
'<input type="submit" value="ارسال">
<input type=reset name=reset value="إعادة تعيين">&nbsp; </form>'
;

فائدة
if ($_GET['poolgo']=="showtools")
بهذا سوف نختصر على نفسنا الكثير
بدل عمل كل خطوه في ملف
سوف نعمل كل الخطوات بملف واحد
وطريقة عمله
التأكد من العنوان
مثلا اذا كان
poll.php?poolgo=showtools
ينفذ الخطوه هذه
اما
poll.php?poolgo=ttt
ينفذ الخطوه ttt
وهكذا

بالنسبه
echo '****** action="poll.php?poolgo=last" method="POST">';
poll.php?poolgo=last
هنا حدد الخطوه التى سيذهب لها بعد هذه
method="POST"
هنا حددنا الطريقة وهي POST
وكما يمكننا استخدام ال GET
لاخذ المتغيرات ولاخذها من العنوان الى الخطوه التى تليها

echo '

عدد الأجوبة ';
هنا عملنا مربع ليستطيع تحديد عدد الاجوبه التي يرديها للتصويت

value="4"
وحددنا القيمة التى ستظهر في المربع تلقائيا وهي 4

واسم هذا المربع
numvote

echo '

  ';
وهذا طبعا لعمل ارسال للمتغيرات والانتقال للخطوة التى تليها
ووضع نهاية للفورم


---
والان الخطوه الثانيه

رمز PHP:
if ($_GET['poolgo']=="last") {

echo 
'<form action="poll.php?poolgo=add" method="POST">';
echo 
'<tr><td>اسمك :&nbsp; <input type="text" name="name" size="35"></td></tr>';
echo 
'<tr><td>السؤال :&nbsp; <input type="text" name="question" size="35"></td></tr>';
for(
$i=1$i<=$_POST['numvote']; $i++) {
echo 
'<tr>
    <td><b>الجوابالـ'
.$i.'
      :</b></td>
    <td><input type="text" name="answers[]" size="40" maxlength="85" tabindex="1"></td>
</tr>
<input type="hidden" value="0" name="number_vote[]">
'
;
}
echo 
'<input type="submit" value="ارسال">
<input type=reset name=reset value="إعادة تعيين">&nbsp; </form>'
;


if ($_GET['poolgo']=="last")
شرحت عمله سابقا

echo '****** action="poll.php?poolgo=add" method="POST">';
شرحت عمله سابقا

echo 'اسمك :  ';
نضع مربع لاسم من وضع التصويت
واسمه
name

echo 'السؤال :  ';
نضع مربع للسؤال
واسمه
question

والان عن طريق الدالة for();

نعمل تكرار
للاجوبة
for($i=1; $i<=$_POST['numvote']; $i++) {
نحدد قيمة المتغير
$i=1
بانه يساوي واحد

$i<=$_POST['numvote'];
وبأن
المتغير $i اصغر من او يساوي عدد الاجوبة التى حددها المستخدم $_POST['numvote']
ولو نلاحظ ان numvote هو اسم المربع الذى وضعناه لتحديد عدد الاجوبة
وقد جلبناه بال $_POST
واخيرا
$i++
عمل تكرار للمتغير $i
وفي الدالة for
نضع الاجواب حتى يتكرر
echo '

الجوابالـ'.$i.'
:





';



لنلاحظ ان وضعنا اسم هذا المربع
answers[]
والان مافائدة
[]
لكي يتعرف الphp عليه على انه مصفوفه
لانه يحتوي على اكثر من جواب .


type="hidden"
وهنا وضعنا معلومه خفيه
لانه المستخدم لايستطيع ان يراها او يعدل عليها
ونلاحظ ايظا ان اسمه
number_vote[]
حتى يتعرف عليه كمصفوفه
ووضعناه في الدالة for();
مع الجواب
حتى يتكرر عدد التصويتات لكل جواب
فيكون
مساوي للعدد الاجوبة
ولاحظنا ان حددنا قيمته
value="0"
تساوي صفر
حتى يكون عدد التصويتات لكل جواب
يساوي صفر


echo '

  ';
وهذا طبعا لعمل ارسال للمتغيرات والانتقال للخطوة التى تليها
ووضع نهاية للفورم

-----
والان الخطوه الثالثه

رمز PHP:
if ($_GET['poolgo']=="add") {

$answers=implode("|||"$_POST['answers']);
$number_vote=implode("|||"$_POST['number_vote']);

mysql_query("insert into pool
(poolid,by_user,question,answers,vote_number,start_date)
VALUES (null,'$_POST[name]','$_POST[question]','$answers','$number_vote',"
time().")");



if ($_GET['poolgo']=="add")
تم شرحه مسبقا

$answers=implode("|||", $_POST['answers']);
عن طريق الدالة implode();
نفصل الاجوبة(عناصر المصفوفة) عن بعض بعلامة |||
للمزيد حول الدالة
implode();
http://php.net/implode


$number_vote=implode("|||", $_POST['number_vote']);
وايظا بنفس الطريقة نفصل عدد التصويتات لكل جواب


mysql_query("insert into pool
(poolid,by_user,question,answers,vote_number,start _date)
VALUES (null,'$_POST[name]','$_POST[question]','$answers','$number_vote',". time().")");
والان نضيف المعلومات الى قاعدة البيانات
عن طريق الدالة mysql_query

نلاحظ انا جلعنا القيمة التى تخزن بالعامود poolid
هي null
لاكن سوف ايد للتصويت
يعني اخر ايد لتصويت
زائد واحد
حسب الخصائص التى منحناه اياها عند اضافة الجدول

وايظا جلعنا القيمة التى تخزن بالعامود start_date
هي الدالة
". time()."
وعلمها
اضافة عدد الثواني منذ بداية عصر اليونيكس
اى منذ 1/1/1970 والساعه الثانية عشر
للمزيد حول هذه الدالة
http://php.net/time

ومابقى اظنه واضح.


-------
الخطوه الرابعه

عرض التصويت
رمز PHP:
if ($_GET['poolgo']=="pool") {
$ballot=mysql_query("select * from pool
order by poolid DESC limit 1"
);
$vbulletinarab mysql_fetch_array($ballot);
echo 
'<form action="poll.php?poolgo=addvote" method="POST">';
echo 
'<input type="hidden" value="'.$vbulletinarab[poolid].'" name="poolid">';


$answers explode("|||"$vbulletinarab['answers']);
$number_vote explode("|||"$vbulletinarab['vote_number']);
echo 
$vbulletinarab['question']."";
foreach (
$answers as $showanswers => $answersvalue) {

@
$vote_percent=$number_vote[$showanswers]/array_sum($number_vote);
$percent=sprintf("%.2f%%", ($vote_percent 100));
echo 
'<input type="radio" value="'.$showanswers.'" name="showanswers"><tr><td class="tdgold2" width="70%">'.$answersvalue .'&nbsp; '.$percent.'</td>
<td class="tdgold2" width="30%"> عدد الاصوات :'
$number_vote[$showanswers].'</td>';
}
echo 
$vbulletinarab['quizzing']."";
echo 
'<input type="submit" value="ارسال">
<input type=reset name=reset value="إعادة تعيين">&nbsp; </form>'
;

اغلب مافي هذه الخطوه تم شرحه مسبقا
@$vote_percent=$number_vote[$showanswers]/array_sum($number_vote);
$percent=sprintf("%.2f%%", ($vote_percent * 100));
قمنا هنا بتقسيم عدد اصوات كل جواب على المجموع الكلي للاصوات
وعن طريق الداله sprintf();
قمنا باظهار النسبة المئوية
لكل جواب.
-------
الخطوه الخامسه
اضافة صوت
رمز PHP:
if ($_GET['poolgo']=="addvote") {
$poolid=$_POST['poolid'];
$showanswers=$_POST['showanswers'];
$ballot=mysql_query("select * from pool
where poolid='$poolid'"
);
$vbulletinarab mysql_fetch_array($ballot);
$number_votes explode("|||"$vbulletinarab['vote_number']);
if (
array_key_exists($showanswers$number_votes)) {
$number_votes[$showanswers]=($number_votes[$showanswers])+(1);
}
$number_vote=implode("|||"$number_votes);


$addballot=mysql_query("update pool set vote_number='$number_vote'  where poolid='$poolid'")Or Die(Mysql_error());


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

لعرض التصويت
poll.php?poolgo=pool

لاضافة تصويت
poll.php?poolgo=showtools


وملف العمل الذى قمنا به بالمرفق.

والسلام عليكم
all-the-vb
http://vbulletin-arab.com
الملفات المرفقة
نوع الملف : zip poll.zip (1.2 كيلوبايت, عدد مرات المشاهدة 98 مرة)
all-the-vb Company
hosting-desgin-vbulletin support-programming
-------
vbulletin-arab
المشاهدات 2171 | التعليقات 8
قديمة 09 - 08 - 2005, 23:59
المشاركة 2
صورة 'Allulu' الرمزية
Allulu
.:: عضو متألق ::.
تاريخ الإنضمام: 04 - 03 - 2005
رقم العضوية : 2039
الدولة : AE .. JO .. PAL
المشاركات: 6,441
افتراضي رد : $درس[1] عمل نظام تصويت متكامل
بارك الله فيك أخوي و دوم تتحفنا بروائعك

شكرا لك
>> استخدم خاصية البحث في المعهد بشكل موسع <<

WwW.Allulu.Org

WwW.Allulu.Net

>>> شبكة اللولو جرافكس للبيع .. تابعنا <<<

أعذروني على انقطاعي المفاجئ لفترة طويلة عن المعهد
لم و لن أنسى أحلى ذكريات في المعهد .. ذكريات قد نقشت على جدار الزمن و مازالت لليوم .. لن انساها أبداً .. شكراً ترايدنت
قديمة 10 - 08 - 2005, 00:01
المشاركة 3
صورة 'x_5' الرمزية
x_5
:: TRAIDNT ::
:: رفيق الدرب ::
تاريخ الإنضمام: 20 - 09 - 2004
رقم العضوية : 11
الدولة : :: UAE ::
المشاركات: 258,039
8
افتراضي رد : $درس[1] عمل نظام تصويت متكامل
روعة اخوي يعطيك العافية
قديمة 10 - 08 - 2005, 00:13
المشاركة 4
صورة 'ذيــ العيـن ــب' الرمزية
ذيــ العيـن ــب
:: عضو شرف ::
تاريخ الإنضمام: 18 - 11 - 2004
رقم العضوية : 450
الدولة : دار زايد ربي يرحمه
المشاركات: 8,565
افتراضي رد : $درس[1] عمل نظام تصويت متكامل
ربي يعطيك الصحه والعافيه اخووي
قديمة 10 - 08 - 2005, 00:14
المشاركة 5
همـ المشاعر ــس
:: عضو نشيط ::
تاريخ الإنضمام: 16 - 02 - 2005
رقم العضوية : 1677
المشاركات: 759
افتراضي رد : $درس[1] عمل نظام تصويت متكامل
لا هنت

بارك الله فيك
شبكة همـ المشاعر ــس :: عبد الله :: للتصميم والتطوير
http://www.mr-sa.com
مكتبة دروس التصميم
http://www.mr-sa.com/droos/index.php
بطاقات همـ المشاعر ــس
http://www.mr-sa.com/card
الاناشيد الإسلامية
http://www.mr-sa.com/enshad
------------------------------------------------
قديمة 10 - 08 - 2005, 00:54
المشاركة 6
صورة 'الصم' الرمزية
الصم
:: عضو نشيط ::
تاريخ الإنضمام: 14 - 10 - 2004
رقم العضوية : 126
الدولة : عنيزة
المشاركات: 2,689
افتراضي رد : $درس[1] عمل نظام تصويت متكامل
يعطيك العافية على الشرح
سبحان الله وبحمده .. سبحان الله العظيم
سبحانك اللهم وبحمدك , أشهد أن لاإله إلا أنت , استغفرك وأتوب إليك

vBulletin Manual
قديمة 10 - 08 - 2005, 01:41
المشاركة 7
صورة 'SHARGI' الرمزية
SHARGI
:: عضو فعال ::
تاريخ الإنضمام: 19 - 06 - 2005
رقم العضوية : 5249
المشاركات: 198
افتراضي رد : $درس[1] عمل نظام تصويت متكامل
ربي يعطيك العافيه ياعدام على هذا الدرس القيم واللي فعلا متعوب عليه

وان شاءالله ماننحرم من مواضيعك المفيده

والله يكثر من امثالك بيننا في ترايدنت


تحيتي
سبحان الله وبحمده سبحان الله العظيم

منتدى للبيع اعضائه اكثر من 130000
https://www.traidnt.net/vb/traidnt983798/



لا يحزنك إنك فشلت مادمت تحاول الوقوف على قدميك من جديد
قديمة 10 - 08 - 2005, 01:58
المشاركة 8
صورة 'أجواء هوست' الرمزية
أجواء هوست
:: عضو نشيط ::
تاريخ الإنضمام: 09 - 05 - 2005
رقم العضوية : 4225
الدولة : ترايدنت ...
المشاركات: 648
افتراضي رد : $درس[1] عمل نظام تصويت متكامل
الله يجزيك الخير اخوي
لكل خطوة هدف .. فترقبونا
قديمة 19 - 08 - 2005, 16:22
المشاركة 9
صورة 'SAFQA.NET' الرمزية
SAFQA.NET
.:: عضو متألق ::.
تاريخ الإنضمام: 17 - 10 - 2004
رقم العضوية : 157
المشاركات: 10,280
8
افتراضي رد : $درس[1] عمل نظام تصويت متكامل
جميـل جداً تسلم يميـنك
،،
  • إسم الشركة: مؤسسة صفقة نت لخدمات وإستضافة المواقع
  • صاحب الشركة: أحمد سمير
  • خدمات الشركة: استضافة مواقع - تصميم مواقع - دعم فني - ترخيص منتديات وسكربتات
  • مقر الشركة : مصر
  • هاتف الشركة : من داخل مصر : 01020063586 | من خارج مصر : +201020063586
  • بريد المبيعات : [email protected]
  • روابط الشركة : الرئيسية - صفقة نت
 
اضافة رد
 
العلامات المرجعية

اخطر ثغرات منتديات vb3 + مجرب وفعال ومليانه المنتديات منها + (جديدة) هاك ] تحديد مجموعة معينة لدخول هذا القسم

أدوات الموضوع ابحث في الموضوع
ابحث في الموضوع:

البحث المتقدم
طرق العرض


الساعة معتمدة بتوقيت جرينتش +3 . الساعة الآن : 05:52.
المعهد غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي معهد ترايدنت ولا نتحمل أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

جميع الحقوق محفوظة Traidnt 2018
  • 00966138651070
  • 00966138648289
  • 2051033691
Powered by vBulletin® Version 3.8.7 .Copyright ©2000 - 2019, Jelsoft Enterprises Ltd
SEO by vBSEO ©2011, Crawlability, Inc.