پروژه رای گیری الکترونیکی

مقدمه
تار جهان گستر (Word Wide Web) دنیای عجیبی است که تکنولوژی های مربوط به آن ، اغلب بدون پشتیبانی کافی ، عرضه می شوند و کاربران این تکنولوژی ها ، همه روزه با واژگان جدیدی برخورد می کنند که باعث سر درگمی آنها می شوند.

برای نمونه می توان به رشد برنامه های Open Source اشاره کرد ( برنامه هائی که می توان آنها را گسترش داد و یا تغییراتی در ساختار آنها ایجاد نمود) متداول ترین این برنامه ها ، سیستم عامل یونیکس و به طور خاص لینکوس می باشد . این برنامه ها با وجود پایداری ، دارای یک مشکل بزرگ می باشند و آن دشوار بودن آموختن این برنامه ها می باشد. کمبود راهنمائی هایی که به زبان ساده ، این برنامه ها را به مبتدیان آموزش دهد . باعث شده است که این دسته از نرم افزارها از جایگاه واقعی خود دور نگاه داشته شوند. Php یکی از زبانهای اسکریپتی Open Source ، ابزاری مفید می باشد که تاکنون علی رغم سادگی استفاده از آن هنوز به طور شایسته از آن استقبا

ل نشده است.

Php چیست :
پی اچ پی که در ابتدای سال ۱۹۹۴ توسط Rasmus Lerdorf ایجاد شد ، مخفف واژگان Personal Home Page به حساب می آمد.
با گسترش قابلیتها و موارد استفاده از این زبان Php در معنای Hypertext Preprocessor به کار گرفته
می شود. این بدان معنا است که پی اچ پی ، اطللاعات را قبل از تبدیل به زمان html پردازش می کند. مطابق سایت وب رسمی پی اچ پی که در آدرس www.php.net قرار دارد ، پی اچ پی یک زبان اسکریپتی سمت سرویس دهنده می باشد.
سمت سرویس دهنده بودن به این معنا است که تمام پردازشهای این زبان بر روی سرویس دهنده (سرور) انجام می گیرد. یک سرویس دهنده در حقیقت یک کامپیوتر مخصوص می باشد که صفحات وب در آنجا نگهداری
می شوند .
این زبان بر روی هر سیستم عاملی قابل اجرا است. منظور از این سیستم عاملهایی می باشد که برروی سرویس دهنده نصب می شوند. پی اچ پی نه تنها قابلیت اجرا بر روی هر سیستم عاملی را می باشد، بلکه برای منتقل کردن برنامه های که از آن یک سیستم عامل به سیستم عامل دیگر ، احتیاج به تغییرات اندکی خواهید داشت و حتی در بعضی از موارد ، بدون احتیاج به هیچ تغییری می توانید ، یک برنامه را با زبان پی اچ پی از یک سیستم عامل به سیستم عامل دیگر منتقل کنید.
پی اچ پی برخلاف زبانهای برنامه نویسی (Programming Languages) یک زبان اسکریپتی

(Scripting Languages) می باشد . به عبارت دیگر دستورات پی اچ پی بعد از رخداد یک رویداد (event) اجرا می شوند. این رویدادها می توانند شامل ارسال یک فرم ، رفتن به یک url مشخص و یا موارد دیگر باشد. متداولترین زبان اسکریپتی زبان جاوا اسکریپت می باشد که معولا برای پاسخ به رویدادهای کاربر در مرورگر وب ، به کار می رود. تفاوت عمده جاوااسکریپت و پی اچ پی دراین است که جاوا یک تکنولوژی سمت سرویس گیرنده است . زبانهائی مانند جاوا و پی اچ پی تف

سیر شونده نامیده می شوند. به عبارت دیگر برای اجرا به یک مفسر مانند مرورگر وب نیاز است. اما زبانهای برنامه نویسی مانند c و یا java بعد از ترجمه به زبان ماشین به خودی خود قابل اجرا می باشند.

به چه دلیل از Php استفاده می کنیم؟
پی اچ پی در مقایسه با تکنولوژی های مشابه ، سریعتر و بهتر و آسانتر است . از جمله تکنولوژی های مشابه برای طراحی یک سایت وب می توان به این موارد اشاره کرد
اسکریپت هایInterface Common Gatway که معمولا به زبان Perl نوشته می شوند ، ASP(Active Server Page ) و JSP (Java Server Page) جاوا اسکریپت یک گزینه جایگزین برای پی اچ پی در نظر گرفته نمی شوند. زیرا بر خلاف پی اچ پی ، یک تکنولوژی سمت سرویس گیرنده است و همانند تکنولوژهایی مانند CGT و PHP، نمی تواند یک صفحه HTML را تولید کند.
مزیتی که چی اچ پی در مقابل html دارد این است که html یک سیستم محدود به حساب می آید و توانائی ایجاد ارتباط متقابل با کاربر را ندارد . کاربران هنگامی که با یک صفحه html مواجه می شوند ، تنها یک صفحه ساده را روبروی خود مشاهده می کنند که توانائی ایجاد واکنش به اعمال کاربر را ندارد. اما با استفاده از پی اچ پی ،
شما می توانید صفحاتی را ایجاد کنید که برای مثال عناصر موجود در صفحه براساس سیستم عامل کاربر و یا تاریخ مشاهده صفحه ، تنظیم شوند. همچنین پی اچ پی می تواند با فایل ها یا پایگاههای داده (Database) ارتباط برقرار کند و بسیاری عملیات دیگر که html قادر به انجام آنها نمی باشد.
طراحان صفحات وب از مدتها پیش به این نتیجه رسیدند که اگر در صفحات خود ، فقط از کدهای html استفاده کنند ، باید به طور مرتب آنرا تغییر دهند و اطلاعات آنرا به روز کنند . به همین علت تکنولوژهائی مانند CGI از همان آغاز ، طرفداران بسیاری پیدا کردند. این تکنولوژی ها به طراحان این امکان را می دهد که برنامه هایی ایجاد کنند که به صورت داینامیک ، صفحات وب را تولید کنند. همچنین در هنگام ارتباط با یک پایگاه داده بدون دخالت هر انسانی ، صفحات به روز آوری شوند.
به عنوان آخرین مطلب در مورد برتریهای پی اچ پی تنها به ذکر این مطلب بسنده که هم اکنون نزدیک به سه میلیون از سایتهای وب از تکنولوژی پی اچ پی استفاده می کنند.

چکیده از پروژه :
 سیستم وجود فایلSalman.php را تست خواهد کرد و در صورت وجود آن را باز خواهد ک

رد و در غیر اینصورت برنامه متوقف میشود اینکار توسط در فایل class.php ،تابع CheckFileConfig انجام میشود.
 برنامه به بانک اطلاعاتی وصل خواهد شد ودرصورت وجود خطا برنامه متوقف میشود وبه شما خطا خواهد داد، همین طور برای انتخاب بانک اطلاعاتی این کار توسط تابع connect در فایل class.php انجام می شود.
 در اینجا فایل farsi.php باز خواهد شد و زبان را اجرا می کند و در صورتی که در برنامه م

تنی مانند متن خود پیدا کند آن را جایگزین خواهد کرد.
 در صورت بر نخوردن به هیچ خطایی برنامه login.php را اجرا می کند و کاربر با کلیک بر رویه register می تواند ثبت نام کند و در صورت کلیک بر رویه login وارد بخش مورد نظر شود
 در صورتی که کاربر بر رویه register کلیک کند می تواند ثبت نام شود ، در صورتی که نام کاربری که وارد که در بانک اطلاعاتی وجود داشته باشد برنامه به کاربر خطا می دهد و اطلاعات کاربر به بانک نخواهد رفت
 در صورت ورود Password و یکسان نبودن دو فیلد با هم کاربر خطا میدهد و اطلاعات وارد بانک نمی شود
 در صورت درست بودن اطلاعات ، تمامی اطلاعات به بانک اطلاعاتی خواهد رفت و صفحه login.php اجرا می شود و کاربر می تواند وارد سیستم شود اگر سطح دسترسی ۱ باشد یک سره به بخش مدیریت خواهد رفت و در صورت سطح دسترسی ۰ به قسمت رای گیری خواهد رفت
 در صورت بودن اطلاعات غلط برنامه وارد نمی شود و به کاربر خطا می دهد
 مدیر می تواند کاندید اضافه کند ، پاک کند ، تعداد رای به هر کاندید را ببیند ، و آن را ویرایش کند
 در صورت وارد نکردن فیلد “نام کاندید ” به مدیر اخطار داده می شود و اطلاعات ثبت نمی شود
 در صورت کلیک بر روی خروج ، از برنامه خارج خواهد شد و دیگر تا با وارد کردن بار دیگر اطلاعات نمی تواند وارد برنامه شود

 در صورتی که اطلاعات وارد شده با سطح دسترسی ۰ باشد کاربر وارد بخش رای گیری می شود

 با انتخاب کاندید مورد نظر و زدن کلیک Submit رای به بانک می رود ، همین طور Ip و یک Cookie ایجاد می شود تا از رای دوباره جلو گیری شود.
 در قسمت نمایش آرا کاربر می تواند تعداد رای به هر کاندید را مشاهده کند در صد رأی هر کاندید به صورت عددی و گرافیکی
Login

رأی

User: ————————–

Passwords: ——————
تایید مشخصات رای دهنده
Select

جستجوی کاندیدای مورد نظر و اضافه کردن یکی به آراء وی

تأیید یوزر و پسورد

پیغام خطاء

۱- نمایش و ویراش و حدف کاندیدا
۲- اضافه نمودن کاندیدای جدید
۳- مشاهده نتایج آرا تاکنون

نام کاندیدا حذف نمایش آراء ویرایش

نام کاندیدا حذف نمایش آراء ویرایش
نام کاندیدا حذف نمایش آراء ویرایش
کاندیدای جدید
Insert
مشاهده ارائ کلی نامزدها تاکنون

============================================
PHP Code: salman

<?
$config_userDB
$config_passDB
$config_database
?>

config_userDB $= نام کاربری که شما برای دیتابیس خود ایجاد کرده اید.
config_passDB$ = پسورد که شما برای نام کاربری تعیین کرده اید.
config_database $ = نام دیتابیسی که ایجاد کرده اید.
===================================================================================

كلاسها (Classes)
يك كلاس تعريف يا نماي يك نوع خاص داده است و كلاسها به عنوان روشي براي حالت دادن به تمام انواع تفاوت اشياء و سيستم شما عمل مي‌كنند . هنگامي كه مي‌خواهيم يك شيء جديد را تعريف كنيم ، ابتدا از كلمه كليدي class براي تعريف آن ، پيش از استفاده از آن در اسكريپت‌هاي PHP خود استفاده مي‌كنيم . تفاوت واضح يك كلاس و يك شيء اين است كه كلاس‌ها اشيايي را تعريف مي‌كنند كه در برنامه‌هايمان به كار مي‌بريم . پيش از آن كه درباره روش ساخت يك كلاس صحبت كنيم ، مي‌خواهيم شروع به تأمل كنيد كه يك كلاس نمايشي از يك ايده است . مهم است كه هنگامي كه كلاس‌هاي خودتان را طراحي مي‌كنيد . آنها يك هدف را دنبال كنند و تمامي رفتاري را كه از آن ايده انتظار مي‌رفت را فراهم كنند .
يك كلاس در PHP حاوي سه كامپوننت اصلي است : members (اعضاء) كه به آنها به عنوان داده يا صفت اشاره مي‌شود) متدها ، و Constructor يك عضو members تكه‌اي از داده است كه شيء در بر دارد . اشياء مي‌توانند هر تعداد عضو داشته باشند . براي

مثال ، اگر قرار باشد اتومبيل را با استفاده از يك كلاس طراحي كنيم ، يك چرخ در حال دوران يا گيربكس بايد به عنوان يك عضو از ماشين تعريف شوند . متدها سرويس‌هايي هستند كه شيء براي سرويس گيرنده‌هايش فراهم مي‌كند كه از اعضا داخلي آن استفاده مي‌كنند و آنها را دستكاري مي‌كنند . براي مثال ، اگر قرار باشد اتومبيل را با اس

تفاده از يك كلاس طراحي كنيم ، يك چرخ در حال دوران يا گيربكس بايد به عنوان يك عضو از ماشين تعريف شوند .
متدها سرويس‌هايي هستند كه شيء براي سرويس گيرنده‌ه

ايش فراهم مي‌كند كه از اعضا داخلي آن استفاده مي‌كنند و آنها را دستكاري مي‌كنند . براي مثال ، يك كلاس car مي‌تواند يك متد را براي روشن كردن وسيله نقلیه و استفاده از چرخ در حال دوران در داخل آن فراهم كند .
يك Constructor متد خاصي است كه شيء را درون وضعيت آماده آ معرفي مي‌:ند . تنها يك Constructor براي يك شيء در PHP مي‌تواند موجود باشد . در يك كلاس car ، افزودن بدنه ، موتور ، لاستيك‌ها ، گيربكس ، صندلي و غيره بر روي car با هم متفاوتند . هنگامي كه سرويس گيرنده‌ها مي‌خواهند از متدهاي روي يك شيء استفاده كنند ، Constructor اطمينان مي‌دهد كه هر متد عمليات را با موفقيت به انجام خواهد رساند و نتيجه مورد انتظار را برخواهد گرداند . براي مثال ، براي روشن كردن راديو درون اتومبيل شما ، بايد يك راديو نصب شده‌ باشد . در اين نمونه ، Constructor مسئول اطمينان بخشيدن از اين موضوع است كه راديو پيش از استفاده نصب شده است. به غير از مقدار دهي شيء به يك وضعيت آماده معتبر ، تفاوت اساسي ديگر اين است كه يك Constructor هيچ مقدار برگشتي صريحي ندارد . تمامي Constructor ها يك متغير جديداً اختصاص يافته را براي استفاده در برنامه شما بر مي‌گردانند .در نتيجه ، برگرداندن يك مقدار در Constructor كلاس ، غيرقانوني است . اطمينان يافتن از طراحي مناسب اشياء و Constructor هاي آنها ، مسئله‌اي است كه توسعه دهندگان زيادي اغلب با آن روبرو مي‌شوند . هنگامي

كه كلاس برنامه‌نويسان را وادار مي‌كند كه اعضاي شيء را پيش از استفاده از متدهاي خود تنظيم كنند يا هنگامي كه كلاس برنامه‌نويس را وادار مي‌كند تا از ترتيب خاصي ، هنگام فراخواني متدهاي شيء پيروي كند ، كد گيج كننده و مبهمي را ايجاد مي‌كند . از OPP به اين منظور استفاده

مي‌كنيم كه به طور كلي از بروز چنين مسئله‌اي جلوگيري كنيم . اگر كلاس مهندسي شده است تا از Constructor هاي خود براي معرفي بخشهاي كليدي كلاس استفاده نكند ، اشكال از طراحي ضعيف ناشي مي‌گردد . دوباره در همان تله گرفتار نشويد .كلاسي كه خوب طراحي شده باشد برنامه‌نويسي ، اشكال‌زدايي و نگهداري زيادي را حذف مي‌كند .بياييد نگاهي به دستور زبان كل

ي براي Class در PHP بيندازيم ، كه استفاده از اين سه نوع كامپوننت را نشان مي‌دهد : PHP Code:
class ClassName [extends ParentclassName]
{
var $member1;
var $member2;

var $memberN;
// Constructor
function Class Name()
{
}
function method1()
{
}
… function method2()
{
}
function methodN()
{
}
}

همان‌گونه كه مي‌بينيد ، يك كلاس چيزي نيست جز يك مجموعه از اعضاي تعريف شده (متغيرها) و متدها (توابع) . اعضا مي‌توانند يا انواع داده اوليه نظير integer ها و رشته‌ها يا انواع پيچيده‌تري نظير آرايه‌ها يا اشياء ديگر باشند . از آنجايي كه PHP از شما انتظار ندارد كه انواع را تعريف كنيد ، فقط مي‌توانيد متغيرهايتان را در بالاي كلاس ، به صورتي كه در بالا نشان داده شد ، نام ببريد .
با PHP مي‌توانيد متغيرهايي را در تابع خود ايجاد كنيد ؛ آنها به همان خوبي كه مورد انتظارتان است كا رخواهند كرد . اگرچه ، تمرين خوبي نخواهد بود اگر اين كار را انجام دهيد . اين به آن خاطر است كه وقتي برنامه‌نويسان ديگر به كلاس شما نگاه مي‌كنند ، فوراً تمامي اعضاي آن را پيش از نگاه كردن به پياده‌سازي توابع بشناسند .
متدها به سادگي تمام سرويس‌هايي هستند كه اين كلاس تضمين مي‌كند تا براي سرويس گيرنده‌هايش فراهم كند. سرويس گيرنده‌ها مي‌توانند برنامه‌هاي ديگر ، پروژه‌هاي ديگر و غيره باشند.

Class.php :
در این فایل دو کار انجام می شود :
 CheckFileConfig() این تابع چک می کند که آیا فای

ل config.php موجود است یا خیر در غیر این صورت برنامه را غیر فعال خواهد کرد.
 Connect () این تابع برنامه را به بانک اطلاعاتی متصل می کند.
Index.php:
این قسمت وظیفه کنترل فایل های سیستم را عهده دار می باشد
session start : این تابع باعث می باشد که جلسات که برای ورود و خروج می باشد در صفحه باقی بماند و در عبور و مرور پاک نشود.

 

PHP Code:

$option = $_REQUEST[option];
$task = $_REQUEST[task];

این قسمت باعث می شود که اطلاعاتی خواصی که در همه جا مورد نیاز هست از Post و Get دریافت شود
عبور و مرور پاک نشود.
PHP Code:

include(“class.php”);
include(“config.php”);

دو فایل Config و Class :
دو فایل config و class را باز خواهیم کرد تا از توابع و اطلاعات آن استفاده کنیم
$Class Vote = new Class Vote()
$Class Vote->Check File Config()
$Class Vote->connect($config_hosting,$config_userDB,$config_passDB,$config_database(

کلاس را اجرا و وجود فایل Config را تست به بانک اطلاعاتی وصل خواهیم شد
if($option == ”) $option = login;
@Include (“$option.php”);

در این قسمت اگر $option هیچ اطلاعاتی نداشت آن را مساوی login قرار می دهد ، و مقدار $option را اجرا خواهیم کرد البته اگر $option خالی نباشد مقداری که در Get یا Post می باشد را اجرا می کند
قبل از include یک @ مشاهده می کنید که باعث می ش

ود تا هیچ پیغام خطائی به کاربر داده نشود.
Login.php :
این قسمت اطلاعات وارد شده توسط کاربر برای ورود به بخش مدیریت یا رای گیری را تست می کند اگر username برای مدیر باشد به قسمت مدیریت و در صورت که برای کاربری باشد وارد بخش رای گیری می شود

Include (“login.html.php”);

 

فایل login.html.php را باز خواهیم کرد تا بتوانید از کدهاش استفاده کنیم

switch($task){
#______________#
case ‘Login’:
Login();
break;
#______________#
case ‘Register’:
UserControl::Register();
break ;
#______________#
case ‘Submit_Register’:
checkRegister();
break ;
#______________#
default:
UserControl::Login();
break;}

این قسمت برسی می کند که $task با کدام گزینه مساوی می باشد در صورت عدم تساوی به default ختم

می شود.
تابع check Register
گرفتن یک کویی از بانک اطلاعاتی که باعث می شود بفهمیم که آیا این نام کاربری وجود دارد ، یا خیر در صورت پیدا کردن عدد مساوی ۱ می باشد.
function checkRegister(){

$Check Username = mysql_query(“Select count(username) as num From users WHERE `username`='”.$_POST[Username].”‘”);
$Check Username = mysql_fetch_array($checkUsername);

if($_POST[Password1] != $_POST[Password2] || $_POST[Username] == ” || $_POST[Email] == ” || $_POST[Last Name] == ” || $_POST[Password1] == ” || $_POST[Password2] == ” || $check Username[num] != 0)
{

خوب ما در اینجا فیلد های username , password , password2 , email , last name را چک می کنیم که آیا درست پر شده است یا خیر مثلا گزینه $_POST[Email] == ” می گوید اگر فیلد email خالی بود (”) انجام بده و $_POST[Password1] != $_POST[Password2] تست می کند که اگر password1 با password2 مساوی نبود فعالیتهای پایین را انجام دهد،همچنین || به معنی OR می اشد
if($check Username[num] != 0)
echo “<table align=\”center\”><td><font class=\”error\” >”._old register.”</font></td></table>”;
if($_POST[Username] == ”)
echo “<table align=\”center\”><td><font class=\”error\” >”._please_type_username.”</font></td></table>”;
if($_POST[Password1] != $_POST[Password2] || $_POST[Password1] == ” || $_POST[Password2] == ”)
echo “<table align=\”center\”><td><font class=\”error\” >”._please_type_password.”</font></td></table>”;
if($_POST[Email] == ”)
echo “<table align=\”center\”><td><font class=\”error\” >”._please_type_email.”</font></td></table>”;

if($_POST[LastName] == ”)
echo “<table align=\”center\”><td><font class=\”error\” >”._please_type_name.”</font></td></table>”;

این گزینه همان کار بالا را انجام می دهد با این تفاوت که هر کدام را جدا کردیم تا یک خطا مختلف به کاربر دهد
UserControl::Register();

در اینجا گفته شده اگر گزینه ها با خطا مواجه شد دوباره صفحه عضویت را بالا بیاور این گزینه چون در قسمت {} ، IF اولی می باشد اجرا خواهد شد و return قبل از } می گوید بقیه برنامه را اجرا نکن

: Submit Register
این تابع تست خواهد کرد که آیا مدیر وجود دارد یا خیر در صورتی که مدیر نباشد کاربر با سطح دسترسی ۱ و در صورتی که مدیر باشد کاربر با سطح دسترسی ۰ وارد بانک اطلاعاتی می شود
Submit Register ();

این گزینه باعث می شود که عضویت ثبت شود همین طور که می دانید اگر برنامه با خطا مواجه شود گزینه
();User Control: Register فعال شده و با وارد کردن گزینه return از اجرای بقیه برنامه خود داری
می شود و با } تابع ما تمام می شود.

Function check Register (){
$checkUsername = mysql_query(“Select count(username) as num From users WHERE `username`='”.$_POST[Username].”‘”);
$checkUsername = mysql_fetch_array($checkUsername);
if($_POST[Password1] != $_POST[Password2] || $_POST[Username] == ” || $_POST[Email] == ” || $_POST[

LastName] == ” || $_POST[Password1] == ” || $_POST[Password2] == ” || $checkUsername[num] != 0)
{
if($checkUsername[num] != 0)
echo “<table align=\”center\”><td><font class=\”error\” >”._old_register.”</font></td></table>”;
if($_POST[Username] == ”)
echo “<table align=\”center\”><td><font class=\”error\” >”._please_type_username.”</font></td></table>”;
if($_POST[Password1] != $_POST[Password2] || $_POST[Password1] == ” || $_POST[Password2] == ”)
echo “<table align=\”center\”><td><font class=\”error\” >”._please_type_password.”</font></td></table>”;
if($_POST[Email] == ”)
echo “<table align=\”center\”><td><font class=\”error\” >”._please_type_email.”</font></td></table>”;

if($_POST[LastName] == ”)
echo “<table align=\”center\”><td><font class=\”error\” >”._please_type_name.”</font></td></table>”;
UserControl::Register();
return;
}
SubmitRegister();
}

خوب با درست بودن کارهای بالا و اتمام هر کدام باید برای ادامه کار تابع Submit Register ساخته شود .

 

function SubmitRegister(){
$CheckGid = mysql_query(“Select count(gid) as num From users WHERE `gid`=’1′”);
$CheckGid = mysql_fetch_array($CheckGid);

این تابع تست خواهد کرد که آیا مدیر وجود دارد یا خیر در صورتی که مدیر نباشد کاربر با سطح دسترسی ۱ و در صورتی که مدیر باشد کاربر با سطح دسترسی ۰ وارد بانک اطلاعاتی می شود.در اینجا می گوییم اگر کاربری با سطع دسترسی (gid) که مساوی ۱ باشد چند تا می باشد و داده را در $CheckGif ذخیره شده و همان طور که در کوری گرفته شده می بینید count(gid) را ما به num نام دادیم

if($CheckGid[num] == 0){
mysql_query(“INSERT INTO `users` (`id`, `username`, `password`, `email`, `lastname`, `gid`) VALUES (”, ‘”.$_POST[Username].”‘, ‘”.md5($_POST[Password1]).”‘, ‘”.$_POST[Email].”‘, ‘”.$_POST[LastName].”‘, ‘1’)”);
}else{
mysql_query(“INSERT INTO `users` (`id`, `username`, `password`, `email`, `lastname`, `gid`) VALUES (”, ‘”.$_POST[Username].”‘, ‘”.md5($_POST[Password1]).”‘, ‘”.$_POST[Email].”‘, ‘”.$_POST[LastName].”‘, ‘0’)”);
}

خوب این قسمت از $ChechGid بالا استفاده کرده می گوییم اگر مساوی ۰ بود اولین وضعیت را انجام دهد و در غیر این صورت دومی تنها فرق در ۰ و ۱ آخر می باشد که ۰ به معنی کاربر و ۱ به معنی مدیر !

UserControl::Login();

با این قسمت ما تابع ساخته شده در فایل login.html.php را فرا خوانی کردیم برای فرا خوانی آن ابتدا نام کلاس آن UserControl و :: و بعد نام تابع login() و در آخر } تابع ما تمام شد !!

تابع function login(){ برای این می باشد که تست کند آیا کاربر است یا مدیر
$CheckGid = mysql_query(“Select count(gid) as num From users WHERE `gid`=’1′ AND `username`='”.$_POST[Username].”‘”);
$CheckGid = mysql_fetch_array($CheckGid);

در اینجا نام کاربری را در بانک جستج

و می کنیم تا ببینیم که آیا سطح دس

 صورت جواب ما ۰ و در صورت ۱ بودن سطح دسترسی کار اول را انجام می دهیم
if($CheckGid[‘num’] == 1){
SelectGid(1,admin);
}else{
SelectGid(0,vote);
}

همین طور که در تابع بالا می بینید اگر جواب مساوی ۱ بود مقدار اول تابع ۱ و دوم می گوید به ادمین برو و در دوم می گویم مقدار اول ۰ و به vote برو این مقدار ها را در تابع SELECTGID تنظیم کرده ایم که در پایین خواهید دید.

— قسمت مدیریت —
 Browse
این تابع تمامی اطلاعات کاندید را لیست می کند
 CheckAdmin
این تابع با هر دفعه Refresh یک بار چک می کند که آیا هنوز اطلاعات مدیر در بانک است و اگر پسورد و نام کاربری درست نباشد آن را از بخش مدیریت اخراج می کند ، همین طور اگر سطح دسترسی آن ۱ نباشد اخراج خواهد شد

 Delete
این تابع کاندید مورد نظر را پاک می کند

 Edit
این تابع صفحه ویرایش کاندید مورد نظر را خواهد آورد

 Update
این تابع ویرایش ای که مدیر بر رویه آن کاندید کرده را در بانک اطلاعاتی بروز می کند .
همین طور اگر فیلد خالی باشد به مدیر اخطار می دهد و بانک را بروز نمی کند !

 Newkandid
این تابع صفحه برای ایجاد کاندید جدید بالا خواهد آورد

 NewSave
این تابع اطلاعات کاندید جدید را در بانک اطلاعاتی قرار خواهد داد

 ShowVote
این تابع آمار کاندید ها را نمایش می دهد به صورت
تعداد رای به هر کاندید را مشاهده کند
در صد رای هر کاندید به صورت عددی و گرافیکی

تصویر مربوط به نمایش و حذف وکاندیدا

 

تصویر مربوط به اضافه نمودن کاندید جدید

تصویر مربوط به نتایج کلی آرا

— قسمت رای گیری —

 Check User
این تابع با هر دفعه Refresh چک می کند که آیا این نام کاربری و پسورد و سطح دسترسی ۰ در بانک است یا خیر ! در صورت وجود برنامه ادامه خواهد داد ولی در غیر این صورت کاربر را اخراج خواهد کرد

 List Vote
در تابع لیست کاندید ها را برای کاربر خواهد آورد و کاربر باید یکی را انتخاب کند و بر رویه Submit کلیک کند !
 Save Vote
این تابع کاندید مورد نظر کاربر را در بانک اطلاعاتی ذخیره خواهد کرد !

 Check Vote
این تابع چک خواهد کرد که آیا این کاربر با این کامپیوتر و این آی پی تا به حال رای داده یا خیر !
در صورتی که رای داده باشد در هر زمانی که login کند آرا را برای او نمایش خواهد داد و نمی تواند رای دهد
 Show Vote
این تابع آرا را برای کاربر نمایش می دهد که عبارت است از تعداد رای به هر کاندید را مشاهده کند در صد رای هر کاندید به صورت عددی و گرافیکی

— تصاویر —

..

خوب حالا به تابع SelectGid که در بالا فراخوانی کردیم سری می زنیم
Function SelectGid($gid,$GO){
$Check Valid User = mysql_query(“Select count(*) as num From users WHERE `gid`=’$gid’ AND `username`='”.$_POST[‘Username’].”‘ AND `password`

 

='”.md5($_POST[‘PassWord’]).”‘”);
$Check Valid User = mysql_fetch_array($CheckValidUser);
If (! ($Check Valid User [‘num’] == 1)){
Session unset ();
Echo “<table align=\”center\”><tr><td><font class=\”error\”>”._retype.”</font></td></tr></table>”;
User Control: Login ();
Return;}
$Data user = mysql_query(“Select * From users WHERE `gid`=’$gid’ AND `username`='”.$_POST[‘Username’].”‘ AND `password`='”.md5($_POST[‘Password’]).”‘”);
$Data user = mysql_fetch_array($data user);
$_SESSION [‘username’] = $data user [‘username’];
$_SESSION [‘password’] = $data user [‘password’];
session_write_close();
Echo’
<Script language=”JavaScript”>
Function reload ()
{
Document. Frm Refresh. Submit ();
}
var speed = 1
Function Start Redirect Timer ()
{
Set Timeout (“reload ()”, speed);}
//–>
Start Redirect Timer ();
</script>
<Form id=”frm Refresh” name=”frm Refresh” action=”.php?option=’.$GO.'” Method=”Post”>
</Form>’;
}

Function Select Gid($gid,$GO){
این قسمت اول تابع است که با { شروع کردیم $gid مقدار اولی است که در بالا اگر یادتان باشد با ۰ و ۱ تغییر می دادیم و $GO همان است که ما باadmin و vote پر کردیم حالا به کار این دو می پردازیم !

$Check Valid User = mysql_query(“Select count(*) as num From users WHERE `gid`=’$gid’ AND `username`='”.$_POST[‘Username’].”‘ AND `password`='”.md5($_POST[‘Password’]).”‘”);
$Check Valid User = mysql_fetch_array($Check Valid User);
خوب بالا را نگاه کنید دوباره از بانک اطلاعاتی سوال کردیم که آیا این نام کاربری و پسورد وجود دارد یا خیر !
در صورت وجود مقدار ۱ و در غیر این صورت ۰ می باشد که باعث خطا خواهد شد !
در ساخت تابع یادتان هست که از $gid استفاده کردیم به کویری گرفته شده نگاه کنید `gid`=’$gid’ اگر مقدار را ۰ وارد کرده باشیم با سطح دسترسی ۰ می گردد و اگر ۱ وارد می کردیم دنبال این نام کاربری با سطح دسترسی ۱ می گردد به پایین نگاه کنید
SelectGid(0,vote);

خوب در اینجا $gid اولین آرماگون بود و ما آن را ۰ قرار دادیم
If (! ($Check Valid User [‘num’] == 1)){
Session unset ();
Echo “<table align=\”center\”><tr><td><font class=\”error\”>”. _Retype.”</font></td></tr></table>”;
User Control: Login();
Return;
}
$Data user = mysql_query(“Select * From users WHERE `gid`=’$gid’ AND `username`='”.$_POST[‘Username’].”‘ AND `password`='”.md5($_POST[‘Password’]).”‘”);
$Data user = mysql_fetch_array($data user);

اگر کاربر اطلاعات را درست وارد کرده باشد ، اطلاعات آن بیرون کشیده خواهد شد تا ذخیره شود

$_SESSION [‘username’] = $data user [‘username’];
$_SESSION [‘password’] = $data user [‘password’];

اینجا اطلاعات را از $data user که username و password است را در جلسات ذخیره می کنیم برای فهمیدن این بخش قسمت آموزش های http://forum.persiantools.com/f23.html را بخوانید !

session_write_close();

در اینجا ذخیره داده ها قطع می کنیم

redirect(“index.php?option=”.$GO);

در اینجا تابع ای که برای رفتن به صفحات دیگه است را فراخوانی می کنیم و $GO همان گزینه ای است که شما با admin یا vote پر کردید و اتمام تابع } و فایل لوگین نیز پایان یافت !

 

Admin.php :
فایل admin.php را باز و به کدهای آن نگاهی می کنیم اولین تابع ای که فراخوانی می شود
Check Admin می باشد ، با این تابع تست می کنیم که آیا یک چنین کاربری وجود دارد یا خیر ! و بعد به قسمت switch می رویم در اینجا این تابع $task را با

تمامی مقادیر ی که بعد از case وارد کردیم تست
می کنم و با همانی که مطابقت داشت اجرا می کنم.
switch($task){
case ‘New’:
Newkandid();
break ;
case ‘NewSave’:
if($_POST[‘name’]){
NewSave();
}else{
$error = 1;
Newkandid();
}
break;
case ‘Browse’:
Browse();
break;
case ‘Edit’:
Edit();
break;
case ‘delete’:
delete();
break;
case ‘update’:
if($_POST[‘name’]){
update();
}else{
$error = 1;
Browse();
}

break;
case ‘State’:
ShowVote();
break;
case ‘loginout’:
include(“login.php”);
break;
default:
html_admin::home();
break; }

حالا به تابع زیر نگاه کنیم

Function Browse (){
html_admin::home();
Echo “<p></p>”;

$ListKandid = mysql_query(“Select * From kandid”);
html_admin::Browse($ListKandid);
}
این تابع ابتدا تابع home را از html_admin که در فایل admin.html.php است اجرا می کند در خط دوم echo “<p></p>” یک کد اچ تی ام ال را اجرا می کند که باعث می شود در نمایش صفحه قسمت home یک فاصله ای از browse داشته باشد. در خط چهارم ما از بانک اطلاعاتی تمامی اطلاعاتی که در جدول kandid است را تقاضا می کنیم و در خط پنجم آن را به تابع browse می دهیم تا برای ما نمایش دهد !
Function Check Admin (){
$Check Valid Admin = mysql_query(“SELECT COUNT(*) as num FROM users WHERE `gid`=’1′ AND `username`='”.$_SESSION[‘username’].”‘ AND `password`='”.$_SESSION[‘password’].”‘”);
$Check Valid Admin = mysql_fetch_array($CheckValidAdmin);
if(!($Check Valid Admin[‘num’] == 1)){
Echo _error_expire;
Include (“login.php”);
die;} }

این تابع امنیت کار ما را تضمین می کند در خط اول این تابع می گوییم برای ما بگو که آیا این نام کاربری و پسورد در بانک اطلاعاتی موجود است ؟ به شرطی که سطح دسترسی آن نیز ۱ باشد .
شاید توجه کرده باشید که این باید $_SESSION بجای پست آمده !
اگر به خاطر داشته باشید در آخرین تابع Login.php یک قسمت بود که برای ما اطلاعات را در جلسات ذخیره می کرد ، در اینجا آن را فراخوانی کردیم !
در خط دوم می گوییم که برای ما اطلاعات را پردازش کن و آن را به مقداری قابل استفاده در آور !
در سومین خط شما دستور if را می بینید که می گوید اگر Check Valid Admin[‘num’] مساوی ۱ بود کار زیر را انجام بده * ولی * توجه کنید که پشت این دستور یک ! می باشد که باعث می شود خلافش را عمل کند یعنی اگر مساوی ۱ نبود کار زیر را انجام دهد !
حالا فرض بر این است که غیر از ۱ باشد می گوید echo _error_expire یعنی برای کاربر error_expire را نمایش دهد !

شاید بگویید error_expire از کجا آمد برای این منظور به فایل farsi.php یک سری بزنید همان طور که می بینید با دستور define ما جای error_expire را با یک جمله دیگر تغییر دادیم !
خوب در اینجا می گویم فایل login.php را باز کن و در خط پایانی می گوییم die یعنی بقیه برنامه را اجرا نکن یادتان باشد اگر die نباشد برنامه به کار خود ادامه می دهد و مهاجم هر کاری که بخواهد می تواند بکند

Function delete (){

mysql_query(“DELETE FROM `kandid` WHERE `id` = “.$_POST[‘Id’].””);
Redirect (“index.php?option=admin&task=Browse”);
}

در تابع بالا می گوییم یک رکورد از kandid را به شرطی که id آن مساوی $_POST[‘id’
و در پایین گفتیم به index.php?option=admin&task=Browse برود

Function Edit (){
html_admin::home();
html_admin::edit();
}
در اینجا گفته شد
دو تابع home و edit در کلاس html_admin اجرا شوند
Function update (){
If ($_POST [‘name’]){
mysql_query(“UPDATE `kandid` SET `name` = ‘”.$_POST[‘name’].”‘ WHERE `id` = “. $_POST [‘id’].””);
Redirect (“index.php?option=admin&task=Browse”);
} Else {
Browse ();
}
}

مختصر آموزشی پیرامون زبان PHP

– نحوه ساخت ، بارگذاری و اجرای یک فایل PHP
– چگونه از PHP و HTML در یک صفحه استفاده کنیم
– چگونه کدها را با استفاده از کامنتهای برنامه نویسی قابل فهم تر کنیم

خوب برای شروع یک Text Editor رو باز کنید. php هم مانند html مبتنی بر متن ساده است بنابراین از هر ادیتوری میشود برای ساخت فایل php استفاده کرد. مثلا Notepad خود را باز کنید.
خطوط زیر را وارد کنید و فایل را به هر اسمی با پسوند .php ذخیره کنید. مثلا first.php
Code:
1: <?
2: print “Hello Web!”;
3:? >
در صورتیکه php روی کامپیوتر خود نصب کرده اید ، فایل رو در وب سرور خود کپی کنی

د و آن را از طریق browser صدا کنید. و یا اینکه فایل رو در یک سایت با دسترسی PHP بارگذاری نمایید و آدرس آن را در browser تایپ کنید. پس از اجرای فایل جمله Hello Web! رو بر روی صفحه خواهید دید.
در صورتیکه کدها خود را یعنی همان چیزی که در ادیتور تایپ کردید را روی صفحه دیدید. بدان معنی است که وب سرور شما فایل php رو اجرا نکرده (یا php بر روی آن نصب نیست و یا پس
خوب حالا که صفحه اول php خود را upload کرده اید کمی در آن دقت کنید.
در شروع و در اولین خط کد
Code:
<?
هميشه شروع يك كد php باید با همین تگ ها باشد. در غیر اینصورت سیستم با کدها مثل html رفتار میکند و بدون هیچگونه عملیاتی همان متن کد را نمایش خواهد داد. و در انتهای کد PHP نیز حتما باید
Code:
?>
را وارد کنید که به server می فهماند که کد php اینجا تمام شده است و از این به بعد با کدهای html روبرو است.
در انتهای هر خط از کدها باید از
Code:
;
استفاده شود. در غیر اینصورت سرور کدها را در یک خط و پشت سر هم تشخیص می دهد. پس شما می توانستید کد بالا را در یک خط و به صورت Code:
<? Print “Hello Word!” ; ?>
نیز بنویسید.
دستور Print
این دستور در واقع نمایش دهنده است و هر چیزی که به آن بدهید را بر روی صفحه نمایش می دهد. شما
می توانید مقدار یک متغیر را نیز با استفاده از Print نمایش دهید.
ترکیب PHP و HTML در یک صفحه
کدهای زیر را در notepad وارد نمایید و ذخیره و upload کنید.
Code:
1: <html>
2: <head>
3: <title>Listing 3.2 A PHP script including HTML</title>

 

۴: </head>
5: <body>
6: <b>
7: <?
8: print “hello world”;
9: ?>
10: </b>
11: </body>
12: </html>
خوب همانطور که می بینید کدهای HTML به راحتی می توانند در کنار کدهای PHP کار کنند. در واقع سرور قبل از رسیدن به کد