مقدمه
امروزه گستردگی جوامع ، نیازهاو کثرت وابستگی مردم را به یکدیگر ،شرایط جدیدی را فراهم آورده که گذران امور با روش های سنتی را غیر ممکن می سازد.
بشر روزگارانی را گذرانده که به حداقل جمعیت بر روی کره زمین، زندگی کرده و تنها نیازش خوراک و پوشاک بوده است. گذشت زمان و افزایش نیاز ها و لزوم برقراری ارتباط بیشتر، موجب پیدایش زبان ایما و اشاره و سپس نقاشی و خط گردید.
بسیار زمان گذشت تا بشر نسبت به ثبت و ضبط منظور خودش ، در قالب کلمات نوشتاری اقدام کرد و حساب ها را ثبت نمود.
اکنون ارتباط آموزشی، اداری، تجاری و... هر کدام دنیایی از مفاهیم و اعداد و روابط را در درون خود دارد که بدون ثبت و ضبط دقیق و سازمان یافته آنها و بکارگیری علم و فن آوری، استفاده از آنها غیر ممکن است. آنچه در این پایان نامه ارائه می شود کوششی است برای سریعتر انجام شدن عمل امانت گرفتن کتاب از کتابخانه و همچنین کاستن از رفت و آمد های بیهوده.
پس از تعریف صورت پروژه، انتخاب ابزار و محیط مناسب برای پیاده سازی طرح مورد نظر، در اولویت قرار گرفت که بعد از مطالعات صورت گرفته، تصمیم گرفتیم که از زبان برنامه نویسی تحت وبPHP و زبان پایگاه داده MySql استفاده کنیم.
در فصل های مختلف این پایان نامه، مراحل طراحی و پیاده سازی سیستم کتابخانه الکترونیک شرح داده شده است.
در فصل اول به معرفی نرم افزار های مورد استفاده در این پروژه پرداختیم. در فصل دوم، امکان سنجی سیستم و مراحل دقیق طراحی سیستم بیان شده است. در فصل سوم جداول پایگاه داده و روابط بین آنها و تشریح کد، شرح داده شده است.فصل چهارم پیوست(نمایی از سایت)می باشد.
فصل اول
PHP
My sql
فصل اول- آشنایی با نرم افزار های مورد استفاده
PHP چیست ؟
PHP سال 1994 توسط Rasmus Lerdorf ایجاد شد و مخفف واژگان Personal Home Pages به حساب
می آید.
با گسترش قابلیت ها و موارد استفاده این زبان PHP در معنای Hypertext Preprocessor به کار گرفته شد. عبارت پیش پردازشگر (Preprocessor) بدین معنی است که PHP اطلاعات را قبل از تبدیل به زبان Html پردازش می کند.
مطابق مطالب سایت وب رسمی PHP که در آدرس http://www.php.net قرار دارد، PHP زبان اسکریپتی سمت سرویس دهندهHtml Embeded , Cross-Platform ,(Server-side) می باشد.
سمت سرویس دهنده بودن PHP بدین معناست که تمام پردازشهای این زبان بر روی سرویس دهنده (Server) انجام می گیرد. یک سرویس دهنده در حقیقت یک کامپیوتر مخصوص می باشد که صفحات وب در آنجا نگهداری می شوند و از آنجا به مرورگر وب کاربران منتقل می شوند.
منظور از Cross-Platform بودن این زبان این است که بروی هر سیستم و با هر سیستم عاملی از قبیل : Unix, Windows NT, Macintosh, Os/2 اجرا میشوند. توجه کنید که منظور از سیستم عامل، سیستم عامل هایی می باشند که بر روی سرویس دهنده نصب می شوند. PHP نه تنها قابلیت اجرا بر روی هر سیستم عاملی را دارا می باشد بلکه برای منتقل کردن برنامه های آن از یک سیستم عامل به سیستم عامل دیگر احتیاج بــه تغییرات اندکی خواهید داشت و حتی در بعضی از موارد بدون احتیاج به هیچ تغییری می توانید یک برنامه به زبان php را از یک سیستم عامل به سیستم عامل دیگر منتقل کنید. منظور از Html embeded بودن PHP این است که دستورات این زبان در بین کدهای html قرار می گیرند. بنابراین برنامه نویسی به زبان PHP کمی پیچیده تر از برنامه نویسی به زبان Html به حساب می آید.
PHP بر خلاف زبانهای برنامه نویسی (Programming Languages) یک زبان اسکریپتی (Scripting Language) می باشد به عبارت دیگر دستورات PHP بعد از رخداد یک رویداد (Event) اجرا می شوند. این رویدادها می توانند شامل ارسال یک فرم رفتن به یک URL مشخص و یا مواد دیگر باشند متداولترین زبان اسکریپتی زبان Java Script می باشد که معمولا برای پاسخ به رویدادهای کاربر در مرورگر وب بــه کار می رود تفاوت عمده Java Script با PHP در این است که Java Script یک تکنولوژی سمت سرویس گیرنده (Client-side) می باشد.
زبان هایی مانند Java Script یا PHP تفسیر شونده (Interpreted) نامیده می شوند. به عبــارت دیگر برای اجرا به یک مفسر مانند مرورگر وب احتیاج دارند. اما زبانهای برنامه نویسی مانند C یا Java بعد از ترجمه به زبان ماشین (Compile) به خودی خود قابل اجرا می باشند.
جدیدترین نسخه PHP نسخه 4 این زبان اسکریپتی می باشد و کلیه فایل ها و کدهایی که توی این وبلاگ ارائه میشه تحت این نسخه کار میکنند. اما یک مشکل هست که اکثر سرویس دهنده ها از نسخه 3 استفاده میکنند. تفاوت این دو نسخه PHP بسیار اندک هست و تغییرات مهم عموما در مسیر اصلاح عملکرد این زبان صورت گرفته شده است.
PHP و مقایسه آن با Perl CGI
امروزه با توجه به اینکه روز به روز بر تعداد میزبانهایی که PHP رو ساپورت میکنند افزوده میشود ، صحبت در مورد PHP و قابلیتهای آن در میان طراحان وب و برنامه نویسان زیاد است.
برای کسانی که فقط نامی از PHP شنیده اند و از تواناییها و مزیت های PHP آگاهی ندارند در این توضیحات PHP را به طور مختصر شرح میدهم و آن را با اسکریپتهای CGI مقایسه میکنم.
همان طورکه گفتیم PHP یک زبان طرف خادم (server side ) می باشد و ما میتوانیم برای ساخت صفحات دینامیک وب از آن استفاده کنیم. برای مثال مدیریت و ساماندهی اطلاعات دریافتی از یک form html با PHP بسیار آسان است.
زبانها
اگر با زبانهای C , C++ , Perl یا Java کار کرده باشیم یاد گرفتن زبان PHP میتواند مانند زنگ تفریح باشد! در واقع خیلی سریع میتوانید اسکریپت نویسی را با PHP شروع کنیم.
متغیرها در PHP مانند perl هستند (با پیشوند $ ) و انواع مختلف داده ها را میتوانند در خود ذخیره کنند. برای مثال $whatever میتواند انواع داده ها شامل رشته ای ، عددی و غیره را در خود نگه دارد.
اگر مقدار $whatever یک عدد باشد شما میتوانید مقدار آن را اینگونه افزایش دهید:
$whatever ++;
یا
$whatever =+1;
یا
$whatever=$whatever+1;
که دقیقا همان روشی است که در C ، C++ ، Perl یا Java به کار میبردید.
تسهیلات توکار (Built-in facilities )
بر خلاف Perl که یک زبان همه منظوره است و شما میتوانید تقریبا هر برنامه ای را با آن بنویسید ، PHP از ابتدا با هدف اسکریپت نویسی برای صفحات وب درست شده ، از اینرو اسکریپت نویسی برای صفحات وب در PHP بسیار آسانتر از Perl می باشدبرای مثال میخواهیم از یک فرم در یک صفحه وب ایمیلی را به آدرس خودمان ارسال کنیم. به کمک Perl احتمالا کدی شبیه زیر را مینویسیم :
open ( MAIL,"|/usr/sbin/sendmail -t");
print MAIL "To: myself\@mydomain.com\n" ;
print MAIL "From: visitor\@hisdomain.com\n" ;
print MAIL "Subject: Comments from Web Form\n\n" ;
print MAIL $mainmessage ;
close ( MAIL ) ;
اما همین برنامه در PHP به شکل زیر نوشته می شود :
mail ( "myself@mydomain.com", "Comments from Web Form",
$mainmessage, "From: visitor@hisdomain.com" );
این سادگی و روانی برای بقیه کارها هم صادق است ، مانند فرستادن یا بازیابی یک پرونده با FTP یا HTTP.همانطور که گفته شد این سادگی از آنجا ناشی میشود که PHP فقط برای برنامه نویسی برای صفحات وب طراحی شده است.
تسهیلات دیگر آن در اداره کردن input های یک form می باشد ، برای مثال یک فرم مانند زیر را در نظر بگیرید:
<input
type=text>
شما خیلی راحت و سریع می توانید به محتویات این فرم در متغیر $dateofbirth دسترسی داشته باشید. نیازی به تجزیه و تحلیل input های فرم نیست.
تمام فیلد ها در یک فرم به طور اتوماتیک به متغیرهایی تبدیل میشوند که شما خیلی راحت میتوانید به آنها دسترسی داشته باشید.
دسترسی به پایگاه داده ها هم به همین شکل آسان و راحت است. کار با پایگاه های داده مانند MySQL, MSQL, Dbase, Oracle, InterBase, از قابلیتهای ذاتی (Built-in) PHP است . PHP حتی برای رمزنگاری MIME هم تابعی در نظر گرفته است. قابلیتها و تسهیلات PHP بسیار زیاد است .
ساخت صفحات وب
یک صفحه PHP میتواند شبیه کد زیر باشد :
<html>
<head><title>My First PHP Script</title></head>
<body>
<h1>My First PHP Script</h1>
<p>
Welcome, Internet user from IP address
<?echo $REMOTE_ADDR?>. Hope you like my first
PHP page.
</body>
</html>
توجه کنید که این دقیقا شبیه source صفحات وب می باشد مگر در موارد که دستورات PHP را شامل می شوند. این کد آدرس IP بیننده صفحه را مینویسد ، برای همین از دستور echo استفاده کرده ایم . متغیر محیطی وب سرور (environment variable) REMOTE_ADDR به صورت اتوماتیک با متغیری به همین نام در PHP شناخته میشود (مانند دیگر متغیرهای محیطی وب سرور). از اینرو نوشتن چنین
اسکریپتهایی بسیار آسان و لذت بخش خواهد بود!
اشکال زدایی PHP در مقایسه با Perl CGI
اگر شما اسکریپتهای نوشته شده را به صورت آنلاین آزمایش و اشکال زدایی میکنید PHP واقعا در این زمینه می درخشد!
هنگامی که اشکالی در یک اسکریپت Perl پیدا شود شما یک پیغام رمزگونه و نامفهوم (چیزی شبیه "500 Internal Server Error") دریافت میکنید.اما وقتی که اسکریپت های PHP خود را به صورت آنلاین آزمایش میکنید ، هنگام مواجه شدن با اشکال پیغام خطا را با اشاره دقیق به شماره خط دارای اشکال میدهد و این برای اشکال زدایی خیلی کار ما را راحت میکند ، هر چند پیغام خطا گاهی اوقات کلی و نامفهوم است مانند "parse error".
ولی در Perl پیغام خطای "Internal Server Error" می تواند از هر چیزی ناشی شود ، از اشتباه در syntax گرفته تا جا انداختن یک حرف یا upload کردن فایل در غیر text mode .اما اشکال زدایی به صورت آفلاین کاملا برعکس می باشد.بیشتر برنامه نویسان اعتقاد دارند که مفسر Perl هنگام مواجه شدن با خطا پیغام بهتر و مفید تری میدهد تا مفسر PHP که مثلا برای بسیاری از خطاها پیغام کلی parse error را میدهد که این امر هم با توجه به انتشار نسخه های جدیدتر PHP میتواند برطرف شود.
PHP یک زبان برنامه نویسی با کد باز (Open-Source) است که اگرچه در ابتدا صرفا جهت برنامه نویسی تحت وب تولید شد، امروزه کارآییهای فراوانی پیدا کرده است.php طبیعتا برای اجرا نیاز به یک برنامه سرویس دهنده وب (Web Server) دارد.
کسانیکه قبلا با PERL کار کرده اند و حالا قصد داشته باشند با PHP کار کنند، احتمالا در ابتدا به مشکلاتی بر خواهند خورد. آنچه به نظر من از خصوصیات خوب PHP بشمار می آید آن است که با وجود شباهت PHP با PERL، PHP پیچیدگیهای PERL را کمتر دارا می باشد. هرچند که قدرت PERL بر روی متن ها غیر قابل انکار است اما فراموش نکنید که PHP را صرفا برای محیط وب ساخته اند پس به اندازه کافی ( و حتی بیش از حد کافی ) امکانات کار با stringها را به شما ارائه خواهد کرد.
برای شروع کار با PHP چه نیاز داریم؟
PHP برای اجرا نیاز به یک Web-Server دارد. در دست ترین Web-Server برای ما احتمالا IIS خواهد بود، چرا که با استفاده از سی دی Windows قابل نصب است. در این توضیحات به شرح نصب IIS (یا وب سرورهای دیگر) نمی پردازیم. برای کسانیکه "Open Source" را پرستش می کنند شاید بهتر باشد از Apache به عنوان Web-Server استفاده کنند. (البته اگر از حق هم نگذریم Apache خیلی از IISبهتر است!)
اگر Web-Server مورد علاقه شما به درستی بر روی دستگاه شما نصب شده است، حالا نیاز دارید که PHP را بر روی آن نصب کنید. برای بدست آوردن کد PHP از آدرس http://www.php.net/downloads.php استفاده کنید.
طبیعتا برای مشاهده نتیجه اجرای فایلهای PHP نیاز به یک مرورگر وب (Web Browser) داریم که مسلما رایجترین آن Internet Explorer است. برای درست کردن هر فایل PHP هم نیاز به یک ویرایشگر ساده متنی داریم (مثلا Word pad یا Note pad ) توجه کنید که از ویرایشگرهای حرفه ای مانند Microsoft Word نمی توانید استفاده کنید زیرا این ویرایشگرها از کاراکترهای پنهانی فراوانی استفاده می کنند که در هنگام ذخیره فایل متنی این کاراکترها هم ذخیره خواهند شد که باعث عدم اجرای دستورات PHP می شوند.حالا یک کد ساده PHP می نویسیم.
حالا می خواهیم اولین کد PHP را با هم درست کنیم. ویرایشگر متن را باز کنید (مثلا Word pad) و در آن چنین بنویسید:
<?php
echo (“Hi! I am the first PHP script you have made!”);
?>
حالا فایلتان را با عنوان 1st.php و در Web Server Local Folder ذخیره نمایید (اگر از IIS استفاده می کنید این فولدر در درایوی که Windows را در آن نصب کرده اید، با نام Inetpub وجود دارد. در داخل آن فولدر دیگری به نام wwwroot وجود دارد که باید فایلمان را در آن بریزیم.)
حالا مرورگر وب خود را باز کنید (مثلا Internet Explorer) و در قسمت آدرس آن ابتدا //:http و سپس نام کامپیوتر خود و یا آدرس IP آن را تایپ نمایید (نام کامیوتر را در Control panel/System/Network Identification و IP را در صورتیکه تعیین کرده باشید در قسمت Command Prompt و با اجرای دستور ipconfig می توانید مشاهده کنید) و پس از یک Backslash (/) نام فایل (1st.php) را تایپ نموده و Enter را بزنید. بعنوان مثال نام کامپیوتر من اگر arash است. پس باید در قسمت آدرس مرورگرم خط زیر را بنویسم:
http://arash/1st.php
باید کد PHP خود را در داخل تگ <?php ?> قرار دهید. البته می توانید از روشهای دیگر نیز استفاده کنید اما متداولترین روش همین است.
دستور ()echo در PHP وظیفه چاپ در خروجی را بر عهده دارد.می توانستیم همین کد را با کمک تگهای HTML و بصورت زیر نیز بنویسیم:
<html>
<body>
<?php
echo ("Hi! I am the first PHP script you have made!");
?>
</body>
</html>
در هر صورت خروجی برنامه به همان صورت که گفتیم خواهد بود. تا یا بصورت یک email خصوصی و یا در قالب یک مقاله پاسخ شما را بدهم.
توضیحات برنامه نویس در حین برنامه نویسی (Comments )
مانند تمام زبانهای برنامه نویسی دیگر، می توانید توضیحات خود را برای آسان کردن رجوع های بعدی در
PHP داشته باشید. به این منظور می توانید از // یا # برای بازداشتن PHP از انجام پردازش بر روی متن روبروی آن استفاده کنید. اگر می خواهید بیش از یک خط را زیر پوشش Comment خود قرار دهید، آن را در بین علامتهای /* */ قرار دهید.
<?php
// This line will not be parsed in PHP
# This line will not be parsed in PHP like the line above
/* Line number1: These 3 lines will not either!
Line number2
Line number3: End of comment */
?>
عملگرهای ریاضی در PHP
عملگرهای ریاضی در PHP طبق جدول زیر می باشند.
مثال
|
نام
|
عملگر
|
$a + $b
|
جمع
|
+
|
$a - $b
|
تفریق
|
-
|
$a * $b
|
ضرب
|
*
|
$a / $b
|
تقسیم
|
/
|
$a % $b
|
باقیمانده
|
%
|
توجه: همانند زبانهایی مانند C در اینجا هم می توانیم از عملگرهای پیشوندی مانند $a+=$b یا $a++ استفاده نماییم.
عملگرهای رشته ای در PHP
یک عملگر رشته ای مهم در PHP وجود دارد و آن نقطه (.) می باشد. این عملگر باعث به هم چسبیدن دو رشته مجزا می گردد.
توجه: از عبارت .= می توانید استفاده نمایید.
متغیرها در PHP
در زبان PHP باید قبل از هر متغیر یک علامت $ قرار دهید. در واقع PHP از روی علامت $ تشخیص می دهد که متغیرهای برنامه شما کدامند.
اگر تاکنون با زبانهای برنامه نویسی مانند C، C++، Pascal و مانند اینها کار کرده باشیم، احتمالا انتظار داریم انواع مختلف متغیرها اعم از Integer، Real، Float و غیره را برایتان معرفی کنم. اما احتمالا خوشحال خواهید شد که بدانید نوع متغیرها برای PHP اهمیت ندارد. کافیست متغیری را نامگذاری کنید و سپس هر مقدار، از هر نوع و به هر اندازه که می خواهید در آن قرار دهید. سوالی که پیش خواهد آمد احتمالا "نحوه عمل PHP با این متغیرهای همه منظوره" است.
قبل از اینکه به مثال برسیم باید به دو نکته اشاره کنم:
1- متغیرها درPHP نسبت به کوچکی و بزرگی حساسیت دارند (Case Sensitive ). یعنی به عنوان مثال متغیرهای my_var و My_Var و MY_VAR از نظر زبان PHP با هم متفاوت هستند.
2- متغیرها می توانند نامهایی با حروف کوچک و بزرگ انگلیسی و همینطور Underscore (خط فاصله پایین) را اخذ نمایند. استفاده از اعداد به شرطی که اولین حرف متغیر نباشند نیز مجاز است. (یعنی مثلا $s12 و $S_1 به عنوان نام متغیر مجاز است اما $1s2 مجاز نمی باشد. بعدها خواهیم دید که بسیاری از متغیرهایی که PHP خود از آنها استفاده می کند دارای Underscore در ابتدایشان می باشد.
حالا به مثال زیر توجه کنید:
<?php
$a=4;
$b=23;
$c="20hi! ";
$d="world 26";
$D=650.25; //It is different from $d
echo($D);//650.25
echo("<br>");
echo($d);//world 26
echo("<br>");
echo($a+$b); //27
echo("<br>");
echo($b+$c);//43
echo("<br>");
echo($c+$d);//20
echo("<br>");
echo($c.$d);//20hi! world 26
echo("<br>");
echo($a.$c.$d);//420hi! world 26
echo("<br>");
$c.=$d;
echo($c);//20hi! world 26
echo("<br>");
echo($d);//world 26
?>
خروجی برنامه بصورت زیر خواهد بود:
همانطور که از مثال بالا هم متوجه می شوید، در صورتیکه عددی را بصورت عادی و بدون علامت نقل قول (" ") به یک متغیر نسبت می دهیم، PHP می تواند با آن هم بصورت عدد و هم بصورت رشته برخورد نماید. در صورتیکه یک مقدار را در داخل " " قرار دهیم، اگر در ابتدای آن یک عدد وجود داشته باشد، PHP می تواند در مقابل عملگرهای ریاضی با آن عددها همچون اعداد عادی برخورد نماید و در مقابل عملگرهای رشته ای به عنوان رشته.پس گفتیم که در PHP انواع داده مهم نیست. این به این معنی نیست که PHP اصلا نوع داده ندارد. PHP از نوع داده های زیر استفاده می کند:
Float، Integer، String، double، array، Boolean و ...
اما نیازی به استفاده از این نوع متغیرها را در طراحی وب نداریم.
معرفی اپراتورهای منطقی
اپراتورهای منطقی در تمام مکانهایی که با متغیرهای Boolean سروکار دارید می توانند استفاده شوند. بدیهی است که پاسخ نیز یک پاسخ Boolean خواهد بود. لیست کامل اپراتورهای Boolean در زیر آمده است:
Example
|
Name
|
Result
|
$a and $b
|
And
|
TRUE if both $a and $b are TRUE.
|
$a or $b
|
Or
|
TRUE if either $a or $b is TRUE.
|
$a xor $b
|
Xor
|
TRUE if either $a or $b is TRUE, but not both.
|
! $a
|
Not
|
TRUE if $a is not TRUE.
|
$a && $b
|
And
|
TRUE if both $a and $b are TRUE.
|
$a || $b
|
Or
|
TRUE if either $a or $b is TRUE.
|
چند تابع رشته ای جالب: شاید بد نباشد که چند تابع که عملیات رشته ها (strings) را بر عهده دارند:
الف) string substr ( string string, int start [, int length])
این تابع بخشی از یک رشته را بر می گرداند. آرگومان اول رشته ای است که عملیات بر روی آن انجام می گردد. آرگومان دوم موقعیت کاراکتری است که عملیات از آن آغاز می گردد. آرگومان سوم تعداد کاراکترهایی است که از شروع باید مورد بررسی قرار گیرد. مثالهای زیر از PHP Manual انتخاب شده اند. به آنها توجه کنید:
<?php
$rest = substr("abcdef", 1); // returns "bcdef"
$rest = substr("abcdef", 1, 3); // returns "bcd"
$rest = substr("abcdef", 0, 4); // returns "abcd"
$rest = substr("abcdef", 0, 8); // returns "abcdef"
// Accessing via curly braces is another option
$string = 'abcdef';
echo $string{0}; // returns a
echo $string{3}; // returns d
$rest = substr("abcdef", -1); // returns "f"
$rest = substr("abcdef", -2); // returns "ef"
$rest = substr("abcdef", -3, 1); // returns "d"
$rest = substr("abcdef", 0, -1); // returns "abcde"
$rest = substr("abcdef", 2, -1); // returns "cde"
$rest = substr("abcdef", 4, -4); // returns ""
$rest = substr("abcdef", -3, -1); // returns "de"
?>
ب) int substr_count ( string haystack, string needle)
تعداد تکرار یک string را در یک string دیگر شمارش می کند. آرگومان اول، رشته مرجع و آرگومان دوم، رشته جستجو شونده است. نتیجه تابع یک عدد است. به مثال زیر توجه کنید:
<?php
echo substr_count("This is a test", "is"); // prints out 2
?>
ج) string substr_replace ( string string, string replacement, int start [, int length])
این تابع می تواند یک رشته را جایگزین یک رشته دیگر نماید. آرگومان اول رشته مرجع، آرگومان دوم رشته جایگزین، آرگومان سوم شروع جایگزینی و آرگومان آخر شماره کاراکتر انتهایی است. به مثال زیر توجه کنید:
<?php
$var = 'ABCDEFGH:/MNRPQR/';
echo "Original: $var<hr />\n";
/* These two examples replace all of $var with 'bob'. */
echo substr_replace($var, 'bob', 0) . "<br />\n";
echo substr_replace($var, 'bob', 0, strlen($var)) . "<br />\n";
/* Insert 'bob' right at the beginning of $var. */
echo substr_replace($var, 'bob', 0, 0) . "<br />\n";
/* These next two replace 'MNRPQR' in $var with 'bob'. */
echo substr_replace($var, 'bob', 10, -1) . "<br />\n";
echo substr_replace($var, 'bob', -7, -1) . "<br />\n";
/* Delete 'MNRPQR' from $var. */
echo substr_replace($var, '', 10, -1) . "<br />\n";
?>
د) int strlen ( string str) طول متغیر را بر می گرداند. به مثال زیر توجه کنید:
<?php
$str = 'abcdef';
echo strlen($str); // 6
$str = ' ab cd ';
echo strlen($str); // 7
?>
دستورات شرطی
در اینجا فقط از شرط if به عنوان یک شرط پر استفاده توضیحاتی می دهم.شرط های دیگری نیز در php وجود دارد که اینجا برای معرفی آنها جای مناسبی نیست.
if(یک شرط)
{
----
----
----
}
شکل کلی شرط به این صورت است . داخل پرانتز یک شرط را می نویسیم و بین { } دستوراتی که اگر شرط داخل پرانتز برقرار بود باید اجرا شوند را قرار میدهیم.
مثلا :
if($user == "ali")
{
print("Welcome Ali!");
}
در صورتی که متغیر user برابر با رشته ali بود دستور print داخل شرط اجرا می شود .
برای بررسی دو چیز با هم از یک سری علامت ها استفاده می کنیم که معنی آنها به صورت زیر است:
== بررسی تساوی دو چیز
> کوچکتر
< بزرگتر
=> کوچکتر یا مساوی
=< بزرگتر یا مساوی
=! مخالف (نامساوی)
شرط ها مباحث زیادی دارند که در قسمت های بعدی به بررسی آنها می پردازیم.
مفاهیم ابتدائی Mysql
مقدمه :
قبل از هر چیز لازم به ذكر است كه مطالب ذیل در حد آشنایی بوده و دوستان برای دستیابی به تكنیكهای بیشتر می بایست از كتابهای مرجع و Book online خود SQL Server استفاده نمایند. در مطالب زیر كه سلسله وار مباحث SQL Server را مرور خواهیم كرد , سعی شده تا ابتدا مطالب مقدماتی جهت آشنایی آورده شود و سپس به مطالب پیشرفته آن بپردازیم. پس در ابتدا مرور سریعی بر چند دستور SQL كه كاربرد بیشتری دارند خواهیم پرداخت و سپس به my SQL و مطالب آن خواهیم پرداخت . مطالب زیر اكثرا از كتاب Microsoft SQL Server 7.0 Database Implementation Training انتخاب گردیده است . این كتاب به همراه CDآموزش آن به عنوان یك مرجع برای امتحانات مایكروسافت استفاده میشود.
جداول بكار رفته نیز همگی در SQL Server 7.0 در Database Northwind موجود هستند.
دستور Select
این دستور كه دستوری مستقل نیست و حتما باید با اجزایی بكار رود جهت ساخت پرس و جو بر روی بانك اطلاعاتی بكار میرود و ركوردهایی كه با شرایط این دستور همخوان باشد به عنوان نتیجه پرس و جو برمیگرداند . چهار كلمه كلیدی وجود دارند كه بخشهای ارزشمند این دستور را تشكیل میدهند :
1- select
2- from
3- where
4-orderby
شكل كلی دستور :
Select [*|distinct column1, column2,…]
From table[,table2,…]
Where شرط
Order by نام فیلد یا شماره فیلد
مثال :
Select * from customers
این دستور تمام ركوردهای جدول customers را برمیگرداند.
حال اگر شرط Country ='ir’فه كنیم ، فقط اطلاعات مشتریان ایران جواب خواهند بود كه به 7 سطر تقلیل مییابد.
select * from customers
where Country ='uk'
حال
select City,Country from customers
order by city
فقط ستونهای نام شهر (city) و نام كشور (Country) را بر گردانده و بر اساس نام شهر مرتب میكند. دستور بالا با دستور پایین هردو یك جواب را میدهند :
select City,Country from customers
order by 1
كه تمام سطرها بازگردانده خواهد شد . در نتیجه پرس و جو تعدادی سطر تكراری وجود دارد مانند شهر London كه اگر از كلمه Distinct در Select استفاده كنیم این سطرهای تكراری حذف خواهد شد .
select distinct City,Country from customers
order by 1
استفاده از توابع در Select
1- Count : تعداد سطرهای بازگردانده شده توسط select را میشمارد.
Select Count(*) from Customers
where Country ='uk'
در اصل تعداد مشتریانی را میشمارد كه در كشور انگلیس هستند. كه عدد 7 جواب است.
2- Sum : مجموع یك فیلد عددی را برمیگرداند.
Select sum(Quantity) from [Order Details]
where productid = 11
مجموع فیلد Quantity را برای فیلدهایی كه شماره محصول آنها ( Productid) برابر 11 است را محاسبه میكند
نكته 1 : در دستور select میتوان از اسم مستعار استفاده كرد ، یعنی نام جدیدی را برای یك ستون در نظر گرفت به عنوان مثال select قبل را به شكل زیر بكار برد :
Select sum(Quantity) as Sum_QTY
from [Order Details]
where productid = 11
كه Sum_QTY یك اسم مستعار برای مجموع است. استفاده از كلمه كلیدیas اختیاری است.
نكته 2 : در دستور select هرگاه اسم فیلدی اسم خاص باشد و یا فاصله بین اسم باشد مثل Order Details كه فاصله بین اسم جدول است حتماُ از علامت براكت [] میبایست استفاده كرد.
نكته 3 : استفاده از group by :
هنگامی كه از توابع count و Sum به همراه یك فیلد دیگر در دستور select استفاده میشود از group by استفاده میكنیم . به عنوان مثال دستور زیر جمع مقادیر فیلد Quantity را برای هر شماره محصول محاسبه میكند
Select productid, sum(Quantity) as sum_qty
from [Order Details]
group by productid
كه نتیجه مانند زیر خواهد بود :
در صورتیكه دستور ordr by 1 بعد از group by استفاده كنیم نتیجه بر اساس كد محصول مرتب خواهد شد.
نكته 4 : دستور where می تواند خود شامل یك دستور select باشد :
select * from Products
where ProductID in
( select distinct ProductID from [order details] where Quantity >70)
order by ProductID
تنها نكته ای كه می بایست توجه كرد این است كه نام فیلدی كه در شرط آورده می شود حتما در دستور select آورده شود, به عبارت دیگر select درون شرط تنها یك ستون را می بایست برگرداند.
مثال : با فرض اینكه دو جدول Products و order details دارای ستون (فیلد) یكسان ProductID هستند , یك دستور Select بنویسید كه تمام فیلدهایی از Products را نشان دهد كه فیلد ProductID آن با ProductID جدول order details یكی باشد.؟
حل :
Select pr.*
From Products as pr , [order details] as od
Where pr. ProductID = od. ProductID
قابل به ذكر است كه بیش از 90% از كارهایی كه ما برروی جداول انجام می دهیم با select و تركیبات آن انجام می شود. لذا بدست آوردن تبحر در نوشتن select ها می تواند شما را در تهیه برنامه ها یاری كند.
3- Min,max : بیشترین و كمترین مقدار فیلد را در بانك اطلاعاتی بدست می دهد.
Select min (Quantity)
from [Order Details]
4- Top n : تعداد n سطر اول بانك اطلاعاتی را برمی گرداند.
Select top 5 *
from [Order Details]
5 سطر اول بانك را برمی گرداند.
نكته 3 : در حالت بالا اگر مقدار سطر 5 و 6 یكی باشد فقط سطر 5 جواب خواهد بود برای گریز از این حالت از شكل زیر در این دستور استفاده میكنیم :
Select top n with ties *
From table
5- Into
Select * from table1 into table2
اطلاعات table1 را به table2 كپی میكند. البته table2 باید از قبل وجود نداشته باشد.
این دستور خود table2 را میسازد.
دستور select قویترین و كاربردی ترین دستور در sql است كه خود ماهها نیازمند تمرین و آموزش است . برای اطلاعات بیشتر به books online خود Sql Server مراجع كنید.
دستور Delete
برای حذف اطلاعات از یك بانك اطلاعاتی استفاده میشود.
شكل كلی دستور :
Delete table1
Where شرط
مثال : فرض كنید جدول authors موجود باشد و فیلد كلید آن au_id باشد. برای حذف 10 سطر اول این جدول از دستور زیر استفاده می كنیم :
DELETE authors
FROM (SELECT TOP 10 * FROM authors) AS t1
WHERE authors.au_id = t1.au_id
دستور insert
برای اضافه كردن اطلاعات به یك جدول از این دستور استفاده میشود.
Insert into table1 (f1,f2,…)
Values (v1,v2,…)
كه f1,f2 نام فیلدها و v1,v2 مقادیر آنها میباشد.
البته میتوانید مقادیر را نتیجه یك select قرار داد.
مثال :
Insert into table1
Select top 10
from table2
مقدار 10 سطر اول را از table2 را در table1 درج میكند. البته باید تعداد فیلدها یكی باشد. در غیر اینصورت از values استفاده كنید.
Enterprise Manager
میتوان گفت قلب Sql Server است. در Enterprise Manager شما میتوانید یك اتصال به سرور Sql برقرار كنید . table بسازید. User تعریف كنید و.....
علامت فلش سبز نمایانگر فعال بودن سرور است. سرور میتواند local باشد مانند بالا و یا یك Sqlserver باشد برروی یك سرور . برای ایجاد یك سرور جدید یا به عبارت دیگر وصل شدن client (ویندوز 98) به یك سرور دیگر بر روی یكی Microsoft Sql Server یا SQL Server Group و یا برروی سرور موجود كلیك سمت راست كرده و گزینه New Sql Server Registratin را انتخاب كنید. سپس كلید next را انتخاب كنید. سپس در منوی بعدی در available Server نام سرور خود را تایپ كنید . (نام سرور SQL خود را كه برروی ویندوز 2000 خود نصب كرده اید) و بعد كلید add را فشار دهید.و گزینه next را انتخاب كنید.
در پتجره بعد از شما سوال میكند كه آیا از username ویندوز استفاده كند و یا اینكه از یك username مخصوص خود Sql Server استفاده كنید. گزینه دوم را انتخاب كرده و سپس Login Name و Password را وارد كنید. (در حالت پیش فرض sa بعنوان login name و فضای خالی بجای Password وارد كنید.) پس از چند بار فشار كلید next شروع به وصل شدن به Server میكند. در صورت موفقیت آمیز بودن با پیامی این كار را اطلاع میدهد.
از دیگر گزینه ها شما بیشترین استفاده را از Databases خواهید كرد. به عبارت دیگر هر كار و پروژه ما بعنوان یك Database در سرور sql قرار میگرد. همه جداول و دستورات مربوط به آنها در این محل نگهداری
می شود.
با كلیك سمت راست برروی Databases و انتخاب New Database... میتوانید یك Database جدید برای خودتان بسازید.
پس از انتخاب نام آن را تایید كنید.
هر Database شامل موارد زیر است :
1- Diagram : ارتباط جداول را نشان میدهد.
2- Tables : جداول پروژه را نشان میدهد.
3- Views : دیدهای پروژه را نشان میدهد.
4- Stored Procedure : كدهای sql مربوط به عملیاتهای روی جداول را نگهداری میكند.
5- Users : كاربران تعریف شده بر روی این database را نشان میدهد.
6- Roles: قوانین دسترسی به جداول و پروسیجرها را نشان میدهد.
7- Rules : قوانین مربوط به داده ها را در جداول نشان میدهد.
گزینه های 7 به بعد كاربرد آنچنانی برای كارهای ابتدایی ندارند
ایجاد یك جدول جدید :
برای ایجاد یك جدول جدید بروی tables كلیك سمت راست كرده و گزینه New Table را انتخاب كنید. سپس در كادر بعدی نام جدول را انتخاب كنید. حال فیلدها و نوع آنها را مشخص كنید .
بعد از مشخص كردن نوع و احتمالاً طول فیلد , باید مشخص كنید كه آیا فیلد همیشه می بایست مقدار داشته باشد و یا می تواند null باشد. Allow Nulls اگر تیك داشته باشد یعنی اینكه این فیلد می تواند هیچ مقداری به خود اختصاص ندهد.
تذكر : مقدار null را با فضای خالی اشتباه نگیرید.
در قسمت Default Value مقدار اولیه برای فیلد وارد كنید. تا در صورتیكه هیچ مقداری درج نشد آن مقدار درج شود. (در دستور insert )
اگر Identity را تیك بزنید این فیلد بشكل خود افزا خواهد شد كه اولا باید نوع فیلد عددی و ثانیا مقدار گامها در Identity increment مشخص شود. مقدار اولیه آن را هم می توانید در Identity Seed قرار دهید. بدین شكل با این مقدار شروع و با گامهای مشخص شده حركت خواهد كرد.
تذكر : هیچ مقداری در این فیلد نمی توانید درج كنید , چراكه خود سیستم این مقدار را تولید می كند .
برای مشخص كردن فیلد كلید (یا فیلدهای كلیدی) فیلد(ها) را انتخاب و بر روی علامت كلید بر روی Toolbar كلیك كنید .
تذكر : فیلد كلیدی نمی تواند Allow Nulls باشد.
تذكر : برای تعریف index كلیك سمت راست كرده و index/keys را انتخاب كنید .
( در مورد index بطور مفصل صحبت خواهد شد )
ایجاد Stored Procedure
مانند هر زبان دیگر رویه ها در sqlServer نیز موجود می باشند. و بكار میروند. سه رویه insert , Updaet و Delete را می توانید براحتی با ویزاردهای خود SqlServer بسازید. از اینجا به بعد از واژه SP بجای رویه استفاده خواهیم كرد.
ابتدا با ساختار كلی SP آشنا شده و سپس به ویزارد موجود خواهیم پرداخت.
برای ایجاد یك SP جدید ابتدا برروی گزینه Stored Procedure كلیك سمت راست كرده و گزینه new Stored Procedure... را انتخاب كنید. در پنچره بعدی شما می توانید متن SP را وارد كنید.
1- نام sp : ابتدا بجای [PROCEDURE NAME] یك نام برای SP خود در نظر بگیرید. من خود از ساختار زیر بدین منظور استفاده میكنیم : عملیات_نام جدول عنوان مثال اگر نام جدول Sale و عملیات مورد نظر یك عملیات insert باشد نام SP را Sale_INSERT میگذاریم. بهتر است نام عملیات با حروف بزرگ تایپ شود . البته بعضی از دوستان از سه حرف عملیات استفاده می كنند. برای مثال بالا خواهیم داشت :Sale_INS .
2- تعریف پارامترها : برای تعریف پارامترهای ورودی SP قبل از كلمه كلیدی As آنها را داخل پرانتز مشخص كنید. بدین شكل كه ابتدا علامت @ سپس نام پارامتر بعد فاصله و نوع پارامتر. تذكر : تمامی متغییرها در SP از ساختار نام متغییر@ پیروی میكنند.
بعنوان مثال فرض كنید یك SP دارای دو پارامتر با نامهای Id از نوع int و Name از نوع Varchar(20) باشد , داریم :( @id int,@name varchar(20)) حال بعد از As دستورات مورد نظر را تایپ میكنیم :
مثال 1 : SP بنویسید كه چهار حرف اول فیلد LastName و فیلد FirstName را از جدول Employees انتخاب كند به شرطی كه فیلد LastName با حرف A شروع شود ؟
ابتدا برروی Stored procedure كلیك سمت راست كرده و گزینه New stored procedure را انتخاب كرده و خطوط زیر را تایپ كنید. بعضی از دستورات پایین در كادر باز شده موجود هستند كه نیازی به تایپ مجدد آنها نیست .
create Stored Procedure Employees_BROWSE
As
Select substring(Lastname,1,4) as LastNmae,FirstName
From Employees
Where LastName Like ‘%A’
حال بر روی دكمه ok كلیك نمایید. حال SP با نام Employees_BROWSE در لیست SP اضافه شده است .
مثال 2 : تمام فیلدهای Employees را انتخاب كنید كه فیلد BirthDate در یك بازه تاریخی كه به شكل پارامتر وارد میشود قرار گیرد ؟
create Stored Procedure Employees_BROWSE2
(@StartDate char(10) , @EndDate char(10))
As
Select *
From Employees
Where BirthDate between @StartDate and @EndDate
حال برای اجرای SP ها در Query Analyzer كافی است بنویسیم : نام Exec SP
بعنوان مثال :Exec Employees_browse
اگر پارامتر داشت مقدار پارامترها را هم می آوریم :
Exec Employees_Browse2 ‘01/01/1940’ , ‘15/06/1955’
3- تعریف متغیرها : برای تعریف متغیرها می بایست از كلمه كلیدی Declare استفاده كنیم. بعنوان مثال : Declare @myname varchar(50) متغییر @myname از نوع كاركتری پویا تعریف میكند.
4- برگرداندن كد خطا : بدین منظور از دستور return @@Error گرچه هرمقداری را كه بخواهیم می توانیم با دستور return برگردانیم.
5- تعریف پارامترها كه مقداری را برمی گردانند : برای این منظور هنگامی كه پارامتر را در ابتدای پروسیجر تعریف میكنیم بعد از نوع آن از كلمه كلیدی output می كنیم بعنوان مثال :
create Stored Procedure Employees_BROWSE2
(@StartDate char(10) , @EndDate char(10) , @pp varchar(10) output)
As
6- مقدار دهی به متغییرها : به دو روش می توانید این كار را بكنید یكی با دستور Set و دیگری با دستور Select .
7- دستورات شرطی :مانند دیگر زبانها شما می توانید در Sql دستورات شرطی را بكار ببرید. ساختار آن به شكل زیر است :
If شرط then دستور
If شرط then
Begin
دستور1
دستور2
...
end
مثال :
If @Sdate > @Edate set @newDate = @Sdate
8- دستور Set NOCOUNT on : این دستور از نوشت تعداد سطرهای برگردانده شده توسط دستورات جلوگیری میكند. كاربرد مهم آن زمانی است كه شما چند كار را پشت سرهم در SP انجام میدهید. مثلا یك جدوی موقت میسازید و سپس از آن یك تعدادی از فیلدها را با دستور Select انتخاب می كنید. اگر این دستور را در ابتدای SP استفاده نكتید , هنگامی كه میخواهید از آن SP در یك زبان برنامه نویسی استفاده كنید با خطای SP هیچ dataset ی برنمی گرداند مواجه خواهید شد.
تذكر1 : شما می توانید یك SP را در یك SP دیگر فراخوانی كنید. برای این منظور همانطور كه قبلا گفته شد از دستور exec استفاده نمایید.
تذكر 2 : با دستور exec شما می توانید یك دستور sql را نیز اجرا كنید. این كار زمانی بكار می آید كه دستور
مورد نظر پویا و متغیر باشد.
مثال :
Exec (“ select * From Employees Where “+@Shart)
این شرط میتواند بر اساس فیلدهای بانك تولید گردد.
مثال : یك SP بنویسید كه اختلاف تعداد سفارشاتی كه فیلد ShipCountry آنها France یا German باشد. را برگرداند ؟
create Stored Procedure Order_France_German ( @Outp int output)
as
declare @Count_France int , @Count_German int
select @Count_France = Count(*)
from orders
where ShipCountry = 'France'
select @Count_German = Count(*)
from orders
where ShipCountry = 'German'
if @Count_France is null set @Count_France = 0
if @Count_German is null set @Count_German = 0
set @outp = @Count_France - @Count_German
در ادامه مطالب SQL حال به بحث دیدها (view) می پردازیم. دید در اصل یك جدول مجازی است كه محتوی آن توسط یك پرس و جو تعریف می گردد. همانند جدول دید هم دارای سطر و ستونهایی می باشد. می توان به موارد زیر به عنوان مزایای دید اشاره كرد :
دیدها به كاربران اجازه میدهند تا بر روی داده هایی كه نیاز دارند متمركز شوند. بنابر این داده های غیر ضروری میتوان از دید خارج كرد. دیدها امنیت داده ها را نیز افزایش میدهند چراكه كاربر فقط داده هایی را می بیند كه در دید وجود دارند. دیدها به كاربران اجازه میدهند تا داده ها را به روشهای متفاوت مشاهد نمایند. دیدها میتوانند برای مبادله داده ها با سایر برنامه های كاربردی بكار روند.
ایجاد دید VIEW
وقتی دیدی را ایجاد میكنید نام آن می بایست در بین نام جداول و دیگر دیدهایی كه كاربر مورد نظر آنها را ساخته , یكتا باشد.در SQL Server 7.0 شما امكان ایجاد شاخص بر روی دیدها را نداشتید , لیكن این امكان در SQL 2000 اضافه شده است.
مراحل ایجاد یك دید :
1- erprise Manager را باز كرده و بر روی Databases كلیك كرده و پایگاه داده ای را كه می خواهید دید در آن ایجاد كنید . باز كنید.
2- روی Views كلیك راست كرده و سپس گزینه New View... را انتخاب كنید.
3- در پنجره بعدی كلیك سمت راست كرده و گزینه Add Table... را انتخاب كنید.
4- دكمه های Table و یا Views جدول و یا دید های مورد نظر را انتخاب نمایید. و بر روی دكمه Add كلیك نمایید. این كار را برای تمام جداول و یا دیدهای مورد نظر تكرار كنید و سپس بر روی دكمه Close كلیلك نمایید.
در قسمت Column از پانل مشبك , ستونهایی را كه میخواهید در دید به آنها ارجاع نمایید انتخاب كنید. اگر میخواهید ستونی در مجموعه نتیجه دیده شود گزینه Output متناظر با آن می بایستی حتما تیك داشته باشد.
در ستون Criteria شرط را بنویسید. چند شرط را میتوانید در ستونهای OR تكرار كنید. برای گروه بندی برروی ستون Criteria كلیك سمت راست كرده و گزینه Group By را انتخاب نمایید. در اینصورت شما قادر خواهید بود از توابعی همچون Sum استفاده كنید.
تذكر : اگر Group by را انتخاب كرده باشید. تمام شرایط كه در ستون Criteria بنویسید به عنوان شرایط Having در نظر گرفته میشوند. برای اینكه این محدودیتها به شرط Where اضافه گردند , بر روی پانل مشبك متناظر كلیك كرده و از لیست مورد نظر گزینه where را بجای Group by انتخاب كنید.
تذكر 2 : در ستون Alias شما میتوانید یك اسم مستعار برای این ستون در نظر بگیرید.
توجه داشته باشید كه ارتباط ها در صورتی برقرار میشود كه كلیدهای خارجی بر روی جداول وجود داشته باشد. گرچه شما می توانید با انتخاب فیلد مورد نظر و حركت ماوس در حالیكه كلیك سمت چپ را فشار داده اید مابین دو جدول ارتباط را برقرار كنید.
ایجاد کردن ستونهای محاسباتی
علاوه بر اینکه ستونها به طرز ساده اطلاعات را در جداول Underlying و نماها نشان می دهد، همچنین Query تان می تواند شامل ستونهایی باشد که محاسبه شده اند بر اساس داده های Underlying ، توابع SQL Server یا هر ترکیب دوتایی. ستون محاسباتی به وسیله مشخص کردن یک عبارت به عنوان ستون ایجاد می گردد.
ما به عبارات Transact-SQL در Detail در درس 21 "The Transact-SQL Language" می پردازیم.
بنابراین در این تمرین ما فقط یک جفت از عبارات ساده که بر اساس اپراتور الحاق رشته Transact-SQL که دو رشته و تابع GETDATE را که داده ها و زمان سیستم جاری را باز می گرداند اضافه می کنیم.
ایجاد کردن یک ستون محاسباتی با استفاده از قاب Grid
1- قاب SQL را پنهان کرده و قابGrid را به وسیله کلیک کردن دکمه روی نوار ابزار Query Designer نشان می دهیم.
2- در هر سل ستون خالی در قاب Grid کلیک کرده و Oil Name +' – '+ Latin Name را تایپ می کنیم.
راهنمایی: شما می توانید سل ها را در قاب Grid به وسیله درج کردن خطوط تقسیم بین سر ستونها عریض تر سازید.
3- کلید Tab را فشار می دهیم. SQL Server ، 1 Expr را به عنوان نام مستعار ستون پیشنهاد می دهد.
4- نام مستعار را برای Extended Name تغییر می دهیم.
5- دکمه Run را برای به کارگیری مجدد Query کلیک می کنیم. Query Designer ستون جدید را در قاب Results نشان می دهد.
ایجاد کردن یک ستون محاسباتی با استفاده از قاب SQL
1- قاب Grid را پنهان کرده و قاب SQL را به وسیله کلیک کردن دکمه ها روی نوار ابزار Query Designer نشان می دهیم.
2- GETDATE را به عنوان [ Today’s Data ] برای لیست ستون از شروط Select اضافه می کنیم.
راهنمایی: کاما را قبل از GETDATE فراموش نکنید.
3- دکمه Run را در نوار ابزار Query Designer برای به کارگیری مجدد Query کلیک می کنیم. SQL Server تاریخ جاری در هر سطر را نشان می دهد.
استفاده کردن از شرط Top n
زمانی که شما دستور Return Top را از منوی متن جدول انتخاب می کنید. SQL Server شرط Top n را در پایین پوششها برای ایجاد صفحه نمایش در Query Designer استفاده می کند. علاوه بر اینکه یک شماره مشخصی از سطرها را مشخص می کنید شما می توانید همچنین یک درصد از سطرها را به وسیله استفاده کردن از شرط Top n Percent نشان دهید. همان طوری که شما ممکن است انتظار داشته باشید درصدی از سطرهای مشخص شده را باز می گردانیم.
نشان دادن سطرهای Top s
1- Top 5 را قبل از اولین کلمه در Column-List از شروط Select در قاب SQL اضافه می کنیم.
2- دکمه Run را در نوار ابزار Query Designer برای به کارگیری مجدد Query کلیک
می کنیم.SQLServer فقط 5 سطر اول را نشان می دهد.
نشان دادن Top 5 درصد از سطرها
1- کلمه Percent را بعد از Top 5 در قاب SQL اضافه می کنیم.
2- دکمه Run را در نوار ابزار Query Designer برای به کارگیری Query کلیک می کنیم. SQL Server فقط 5 درصد اول از سطرها را در SQL Server نشان می دهد.
شرط WHERE
با استفاده از شرط اختیاری WHERE از حالت SELECT شما می توانید یک زیر مجموعه از سطرها که باز گردانده می شوند را مشخص کنید. برای مثال شما ممکن است بخواهید فقط مشتریهایی که بیش از $1000 در 12 ماه قبل خرج کرده اند را ببینید یا اینکه فقط نامهای Oil که با حرف R شروع می شوند را ببینید. شما این ملاکها را با استفاده از شرط WHERE مشخص خواهید کرد
شرط WHERE BASIC
کلید برای شرط WHERE یک ملاک انتخابی می باشد که مشخص می کند که کدام سطرها باز خواهند گشت.
Operator Meaning
|
مساویست با =
بزرگتر از <
کوچکتر از >
بزرگتر یا مساویست با =<
کوچکتر یا مساویست با =>
مساوی نیست با <>
|
ساختار پایه ای از یک شرط WHERE ، WHERE می باشد. SQL Server یک حدود کاملی از اپراتورهای
مقایسه ای را به طوری که در جدول B-1 نشان داده شده فراهم می سازد.
مشخص شده در شرایط WHERE می تواند یک ارزش دائمی باشد مانند Red"" یا 10000 یا می تواند باشد یک عبارتی که یک ارزش مانند GETDATE. را باز گرداند. به طور شبیه ارزش می تواند دستی ساخته شوند با استفاده از تابعهای Transact-SQL مانند LEFT که یک تعدادی از کاراکترهای مشخص شده از چپ یک رشته را باز می گرداند
Query Analyzer
اگر چه آن ممکن است به ایجاد و اجرای Query ها و دیگر عبارت Transact-SQL در
manager Enterprise بپردازد بزرگترین توان آن به صورت یک ابزاری برای مدیریت پایگاه داده می باشد. از طرف دیگر Query Analyzer مقدمتاً یک ابزار برنامه ریزی می باشد. Query Analyzer برای شما ابزارهای قدرتمندی برای نوشتن و عیب یابی کردن مجموعه پیچیده از عبارتهای Transact-SQL در شکلهای گوناگون فراهم می سازد. ما با یکی از آنها SQL Scripts در این درس مواجه می شویم. آن همچنین راههایی را برای تجزیه و تحلیل عملکردهای از Query ها به وسیله طرحهای اجرایی و ویزارد Index Tuning همان طوری که در درسها دیدید فراهم می سازد.
شما می توانید Query Analyzer را از داخل manager Enterprise یا از منوی Start ویندوز شروع کنید. زمانی که شما Query Analyzer را از manager Enterprise شروع می کند. Query Analyzer اطلاعات اتصالی را از manager Enterprise انتقال خواهد داد. اگر شما به یک Server متصل شوید Query Analyzer به Server متصل خواهد شد و اگر شما یک پایگاه انتخاب شده داشته باشید Query Analyzer پایگاه داده را انتخاب خواهد کرد.
راهنمایی: شما می توانید از فرمان isqlw از پرامپت دستور به عنوان راه سوم برای شروع Query Analyzer استفاده کنید.
اگر شما Query Analyzer را از منوی Start شروع کنید یا اگر شما یک Server یا اتصال پایگاه داده ای در manager Enterprise نساخته اید، شما باید اتصال را به طور دستی از داخل Query Analyzer برقرار سازید.
- شناخت درباره نمودار پایگاه داده
نمودارهای پایگاه داده یک راه خوبی برای مجسم کردن ساختار و ارتباطات جداول در یک پایگاه داده فراهم
می آورد (طرح پایگاه داده). حاوی بودن آنها در داخل پایگاه داده خودش یک روش دستی برای سند سازی طرح می باشد از زمانی که نمودارها به طور خودکار هر تغییری را که شما می سازید منعکس می کنند.
- ایجاد یک نمودار پایگاه داده از یک طرح موجود
اگر چه ایجاد یک طرح پایگاه داده کامل در داخل پنجره نمودار پایگاه داده امکان پذیر است و ایجاد کردن نمودارها از جداول موجود رایج تر می باشد. ویزاردCreate Database Diagram آن را ساده می سازد. فقط جداولی که شما می خواهید در نمودار موجود باشد را انتخاب می کنیم و ویزارد Create Database Diagram بقیه کار را انجام می دهد. یک بار شما یک نمودار پایگاه داده را با استفاده از Create Database Diagram ایجاد کرده اید و شما می توانید جداول را اضافه و بردارید و مقادیری از جزئیات نشان داده شده را برای هر جدول تغییر دهید.پایه و اساس همه داده های رابطه ای در محیط SQL Server یک حالت Transact-SQL تنها است که عبارت Select می باشد. در این درس ما به مهمترین ترکیبات حالت Select و راههای استفاده کردن از Query Designer برای ساختن خودکار عبارت می پردازیم. با استفاده از Query Designer شما می توانید یک عبارت Select را مستقیماً در قاب SQL وارد سازید یا با داشتن Query Designer آن را به وسیله قابهای Grid و Diagram بسازید. گزینه ها متقابلاً منحصر به فرد نمی باشند. شما می توانید یک Query را به وسیله اضافه کردن جداول برای قاب Diagram ، تغییر نام ستون با استفاده از قاب Grid شروع کنید و دستورات را به طوری که سطرها برگردانده می شود به وسیله وارد کردن شرط ORDER BY به صورت مستقیم در قاب SQL مشخص کنید.
تمرینهای درس یک گونه ای از تکنیکها را به شما نشان خواهد داد. موقعی که خودتان کار می کنید شما می توانید یکی را که در زمان ساده تر به نظر می رسد را انتخاب کنید.ساختار دستور عبارت Select خیلی پیچیده می باشد که دارای چندین شرط و اپراتور می باشد اما ساختار اصلی کاملاً ساده می باشد.فقط اولین و دومین شرط از عبارت Select مورد نیاز می باشد. اولین شرط، Select Column-List مشخص می کند ستونهایی که به وسیله Query بازگردانده خواهد شد. لیست Column می تواند شامل ستونهای اصلی از جداول و نماهایی باشد که بر روی Query پایه ریزی شده است یا اینکه می تواند شامل ستونهای محاسباتی اقتباس شده از ستونهای اصلی باشد. دومین شرط، From Source-LIST ، نماها و جداول را که در Query پایه ریزی شده مشخص می کند.
تجزیهوتحلیل سیست
فصل دوم – تجزیه و تحلیل سیستم
2-1- شناخت سیستم و یافتن مسئله
همان طور که می دانید کتابخانه مکانی برای امانت گرفتن کتاب و همچنین مکانی آرام برای مطالعه
می باشد.
با گسترش جوامع وپیشرفت تکنولوژی ونیاز روز افزون به مطالعه و باگسترش اینترنت در جهان و احساس نیازبه وجود استفاده از آن بر آن شدیم تا با به وجود آوردن یک سیستم کتابخانه مشکلات ناشی از ازدیاد تقاضا هزینه ایاب وذهاب و ... را اندکی بکاهیم. برای روشن ترکردن مسأله موردی رادرنظر بگیرید:
فرض کنید می خواهید کتاب خاصی را در کتابخانه جست و جو کنید .با وجود سیستم های دستی باید به کتابخانه رفته وبا لیست کردن کتب به جست وجو کتاب مورد نظرخود بپردازید.
یافرض کنید می خواهید کتابی را رزروکنید. باید به کتابخانه رفته واین کار را انجام دهید. بدیهی است که هزینه وزمان زیادی را از دست می دهید.حال آنکه یا تولید یک سیستم کتابخانه ی تحت web علاوه بر صرفه جویی در وقت و هزینه ازبسیاری ازمشکلات دیگر جلو گیری می شود.
2-2- ارائه راه حل
با توجه به مطالبی که بیان شد راه حل پیشنهادی ، ارائه یک سیستم کتابخانه ی تحت web به کمک
PHP و My Sql می باشد ، که به دلایل استفاده از این زبان برنامه نویسی خواهیم پرداخت :
بعد از جمع بندی و دسته بندی اطلاعات جمع آوری شده بر اساس محدودیت دسترسی به اطلاعات ، دو نوع
کاربر برای سیستم تعریف نمودیم :
1- مدیر
2- اعضا
سطح دسترسی این کاربران به جداول سیستم به صورت زیر می باشد :
جدول 2-1 دسترسی به جدول اعضا تائید شده
|
درج
|
حذف
|
تغیر رمز عبور
|
1)مدیر
|
بلی
|
بلی
|
بلی
|
2)اعضا
|
خیر
|
خیر
|
بلی
|
جدول 2-2 دسترسی به جدول اعضا ثبت نام شده
|
درج
|
ویرایش
|
1)مدیر
|
بلی
|
بلی
|
2)اعضا
|
بلی
|
خیر
|
جدول 2-3 دسترسی به جدول کتب ثبت نام شده
|
درج
|
ویرایش
|
حذف
|
گزارش
|
1)مدیر
|
بلی
|
بلی
|
بلی
|
بلی
|
2)اعضا
|
خیر
|
خیر
|
خیر
|
بلی
|
جدول 2-4 دسترسی به جدول اعضای حذف شده
|
درج
|
ویرایش
|
حذف
|
گزارش
|
1)مدیر
|
بلی
|
بلی
|
بلی
|
بلی
|
2)اعضا
|
خیر
|
خیر
|
خیر
|
خیر
|
جدول 2-5 دسترسی به جدول آرشیو شده
|
درج
|
ویرایش
|
حذف
|
گزارش
|
1)مدیر
|
بلی
|
خیر
|
خیر
|
بلی
|
2)اعضا
|
بلی
|
خیر
|
خیر
|
بلی
|
جدول 2-6 دسترسی به جدول اخبار شده
|
درج
|
ویرایش
|
حذف
|
گزارش
|
1)مدیر
|
بلی
|
بلی
|
بلی
|
بلی
|
2)اعضا
|
خیر
|
خیر
|
خیر
|
بلی
|
جدول 2-7 دسترسی به جدول فایل های دانلود شده
|
درج
|
ویرایش
|
حذف
|
گزارش
|
1)مدیر
|
بلی
|
بلی
|
بلی
|
بلی
|
2)اعضا
|
خیر
|
خیر
|
خیر
|
بلی
|
2-3- امکان سنجی
2-3-1- امکان سنجی فیزیکی
با توجه به اینکه این کتابخانه نیاز به یک سیستم تحت web دارد تا ارتباط بین کتابخانه و اعضا به آسانی فراهم شود و همچنین سازگاری کامل برنامه ما با تمامی host ها ، تولید برنامه از لحاظ فیزیکی صحیح به نظر می رسد.
2-3-2- امکان سنجی اقتصادی
با توجه به در اختیار داشتن کامپیوتر در کتابخانه و همچنین در خانه هر شخص و یا کافی نت ها ، می توان گفت از این لحاظ مشکلی نیست.
با پیاده سازی این سیستم مقدار قابل توجهی از هزینه های اعضا برای رفت و آمد های غیر ضروری و همچنین کاغذ بازی های کتابخانه کاسته خواهد شد.
2-3-2- امکان سنجی تکنیکی
از لحاظ فن آوری و وجود افراد کارآمد ، سیستم را مورد برسی قرار می دهیم که آیا ایجاد یک سیستم تحت web به صرفه است یا نه؟
معمولا امکان سنجی تکنیکی تابع امکان سنجی اقتصادی است در این سیستم از نظر تکنیکی ، همه چیز امکان پذیر است .
2-4- طراحی سیستم
2-4-1 شناخت فرم ها
طبق نیاز کتابخانه در ارتباط با ذخیره اطلاعات به شناسایی فرم های مورد نیاز و بررسی این مطلب که چه اطلاعاتی باید در هر فرم پر شود ، می پردازیم.
2-4-1-1- فرم مشخصات کتاب
این فرم توسط مدیر پر می گردد . که حاوی فیلد های مشخصات کتاب از جمله کد،نام کتاب،نویسنده،ناشر،مترجم،تاریخ انتشار و شماره شابک می باشد.
2-4-1-2- فرم مشخصات اعضا
این فرم توسط هر شخصی که می خواهد در کتابخانه عضو شود پر می گردد.که حاوی فیلد های مشخصات اعضا از جمله کد،نام،نام خانوادگی،نام پدر،شماره شناسنامه،تاریخ تولد،نام کاربری و رمز عبور می باشد.
2-4-1-3- فرم درج خبر
این فرم توسط مدیر پر می شود که شامل مشخصات خبر که شامل کد،عنوان و شرح خبر می باشد.
2-4-1-4-در خواست امانت کتاب
این فرم را مدیر برای جستجو کردن و رزرو کردن یک کتاب پر می کنند.وسپس آنرا به امانت می دهد ، که شامل فیلد های کد کتاب، کد اعضا ، تاریخ امانت ، تاریخ بازگشت می باشد
2-4-2- نمودارهای DFD
شکل 2-1 DFD سطح صفر
شکل 2-2 سطح یک متقاض
شکل 2-3 سطح یک مدیر
شکل 2-4 سطح یک مدیر
شکل 2-5 سطح دو مدیر
شکل 2-6 سطح یک عضو
شکل 2-7 سطح دو عضو
2-4-3- نمودار usecase
شکل 2-8 نمودار ارتباط بین عامل ها
شکل 2-9 نمودر usecase در رابطه با مشمول
2-4-4- نمودار فعالیت
شکل 2-10 نمودار افراز فعالیت تقاضاهای فرآورده توسط مشتری
2-4-5- نمودار ارتباطات
پیاده سازی
فصل سوم – پیاده سازی
3-1- جداول پایگاه داده
3-1-1- جدول temp_user
این جدول به منظور ذخیره اطلاعات هر فرد که در کتابخانه ثبت نام می کند طراحی شده است.که شامل فیلد های زیر می باشد :
1- ستون id : این فیلد شماره ای است که به هر فرد تعلقمی گیرد و به صورت خودکار می باشد.
2- ستون name : در این فیلدنام شخص قرار می گیرد.
3- ستون family :در این فیلد نام خانوادگی شخص قرار می گیرد.
4- ستون father_name : نام پدر هر عضو.
5- ستون sh_number : شماره شناسنامه هر عضو.
6- ستون birthday : تاریخ تولد هر عضو.
7- ستون username : نام کاربری مربوط به عضو.
8- ستون password : رمز عبور مربوط به هر عضو.که به صورت رمز شده می باشد.
9- ستون accept : این فیلد تعیین می کند که عضو توسط مدیر مورد تائید قرار گرفته یا نه؟
3-1-2- جدول user
این جدول مانند جدول قبل می باشد با این تفاوت که شامل اطلاعات اعضایی است که توسط مدیر
مورد تائید قرار گرفته اند.و شامل دو فیلد اضافه تر به شرح زیر می باشد:
1- ستون start_date : تاریخ شروع عضویت .
2- ستون end_date : تاریخ اتمام اعتبار.
3-1-3- جدول book :
این جدول به منظور ذخیره سازی اطلاعات مربوط به کتاب ها می باشد که حاوی ستون های زیر
می باشد :
1-ستون id : این فیلد شماره ای است که به هر کتاب تعلق می گیرد و به صورت خود کار می باشد.
2-ستون name : نام کتاب.
3-ستون author : نام نویسنده کتاب.
4-ستون translator : نام مترجم کتاب.
5-ستون pulisher : نام ناشر کتاب.
6-ستون pub_date : تاریخ انتشار.
7-ستون isbn : شماره شابک هر کتاب.
8-ستون properties : حاوی اطلاعاتی در مورد اینکه کتاب در چه وضعیتی می باشد (رزرو،امانت)
9-ستون username : حاوی نام کاربری می باشد که کتاب را امانت برده یا رزرو کرده است.
3-1-4-جدول user_del :
این جدول حاوی اطلاعات کاربری می باشد که توسط مدیر حذف شده است.حاوی تمامی فیلد های جدول user می باشد.
3-1-5-جدول archive :
این جدول حاوی آرشیوی از اطلاعات کتاب و اعضا می باشد ، که چه عضوی چه کتابی را امانت یا رزرو کرده است.شامل فیلد های زیر می باشد :
1-فیلد user_id :شماره کاربری.
2-فیلد book_id :شماره کتاب.
3-فیلد action : عملی که روی کتاب انجام شده است(رزرو، امانت،پس دادن،حذف رزرو)
4-فیلد date : تاریخ اعمال انجام شده.
3-1-6-جدول news :
شامل اطلاعات اخباری می باشد که مدیر روی سایت می گذارد .
1-فیلد id :شماره هر خبر .
2-فیلد subject : عنوان هر خبر .
3-فیلد body : شرح هر خبر .
3-2- برنامه نویسی
3-2-1 معرفی کامل فرم ها
امکاناتی که در این نسخه وجود دارد :
:a امکان جستجو در صفحه اول
:b ایجاد کاربر جدید
:c جستجو کتاب
:d ثبت کتاب مدیر
:e رزرو کتاب توسط کاربر و حذف رزرو توسط کاربر
:f امانت دادن و پس گرفتن کتاب توسط مدیر
:g در صورت تاخیر در پس دادن کتاب پس از 14 روز کاربر تا 14 روز بعد مجاز به ورود به سایت نخواهد بود.
:h در صورت گذشتن یک سال از تاریخ ثبت نام کاربر ، امکان ورود کاربر به سایت وجود نخواهد داشت.
:I به هر کاربر یک شماره کاربری (علاوه بر نام کاربری) اختصاص داده شده است . هنگام امانت دادن کتاب توسط مدیر اگر کتاب از قبل رزرو نشده باشد می توانیم از این شماره و یا نام کاربری برای امانت دادن کتاب استفاده کنیم.
:j امکان حذف و ویرایش کتاب در صفحه جستجو توسط admin انجام می شود . در صورتی که کتاب قبلا رزرو شده یا امانت رفته باشد این گزینه غیر فعال است . ضمنا در صورت انتخاب گزینه حذف ، اطلاعات بدون هیچ اخطاری از بانک خذف شده و قابل بازیابی خواهد بود . در صورت انتخاب گزینه ویرایش ، اطلاعات فعلی کتاب در یک فرم جهت ویرایش به نمایش در خواهد آمد.
:k امکان دیدن وضعیت کاربر (کتابهای امانت گرفته و رزرو شده) و مشخصات کاربر (تاریخ عضویت ، نام ، نام خانوادگی ، .......)
:l امکان حذف کاربر (به شرطی که هیچ کتابی به صورت امانت نداشته باشد) و تمدید مدت اعتبار (بعد از یک سال) و دیدن لیست کاربران حذف شده و نمایش گزارشی از وضعیت آنها .
:m کاربر به طور کامل حذف نشده . ولی برای همیشه غیر فعال می گردد.
:n کار های کاربران شامل رزرو ، حذف رزرو ، امانت گرفتن و پس دادن در یک بانک ذخیره شده . با استفاده ار دو دکمه "اعضای فعال" و "اعضای حذفی" می توان به نام آنها و از طریق "گزارش" به وضعیت کارهایی که انجام داده اند دسترسی پیدا کرد .
:o امکان گذاشتن فایل و کتابهای دیجیتال (upload) توسط مدیر بروی سایت تا کاربران بتوانند از آنها استفاده نمایند .
:p کاربران می توانند علاوه بر امانت گرفتن کتاب ، کتابهای دیجیتالی که بر روی سایت قرار دارد را برای خود download کنند .
:q به کاربران این امکان داده شده است که سوالات یا نظریات خود را با استفاده از email به مدیر ارسال کنند و مدیر در صورت لزوم به آنها پاسخ دهد .
:r در صفحه ورودی این امکان برای بازدید کننده یا اعضا گذاشته شده است که بتوانند جستجوهای خود را در هر موردی که باشد در موتور جستجو گر گوگل انجام دهد.
3-2-2- توضیح کد
3-2-2-1-سطح مدیریتی
1 - جستجوی کتاب
که در سطح بازدیدکنندگان و اعضا توضیح داده شد. با این تفاوت که مدیر علاوه بر جستجو ، رزرو و امانت امکان ویرایش و حذف آنرا خواهد داشت . در صفحه seearch اگر کاربر ، admin باشد یک لینک برای ویرایش و حذف کتاب در اختیارش قرار می گیرد که با کلیک بروی این لینک متغیر $Edit مقدار دهی می شود و در صفحه index.php چک می شود که اگر edit مقدار گرفته باشد صفحه editbook.php فراخوانی می شود .
$edit='<a href=?bID='.$row['id'].'&edit=edit>ویرایش</a>/<a href=?bID='.$row['id'].'&edit=del>حذف</a>';
کد صفحه ایندکس
if (isset($_GET['edit']))
{
require("editbook.php");
}
الف)editebook.php
در این صفحه ابتدا تمامی مشخصات کتاب مورد نظر از بانک انتخاب شده
$query="SELECT * FROM `book` WHERE `id`='$_GET[bID]'";
$send=mysql_query($query);
$row=mysql_fetch_array($send);
و سپس تمامی مشخصات کتاب را در textbox به نمایش در می آورد :
<form method="POST" action="index.php">
<table border="0" width="100%" cellspacing="4" cellpadding="0">
<tr>
<td dir="rtl" width="66">نام كتاب:</td>
<td dir="rtl"><input size="20" value="<?php echo $row['name']; ?>"></td>
</tr>
<tr>
<td dir="rtl" width="66">نویسنده:</td>
<td dir="rtl"><input size="20" value="<?php echo $row['author']; ?>"></td>
</tr>
<tr>
<td dir="rtl" width="66">مترجم:</td>
<td dir="rtl"><input name="translator" size="20" value="<?php echo $row['translator']; ?>"></td>
</tr>
<tr>
<td dir="rtl" width="66">ناشر:</td>
<td dir="rtl"><input name="publisher" size="20" value="<?php echo $row['publisher']; ?>"></td>
</tr>
<tr>
<td dir="rtl" width="66">تاریخ چاپ:</td>
<td dir="rtl"><input name="pub_date" size="20" value="<?php echo $row['pub_date']; ?>"></td>
</tr>
<tr>
<td dir="rtl" width="66">شماره شابك:</td>
<td dir="rtl"><input size="20" value="<?php echo $row['isbn']; ?>"></td>
</tr>
<tr>
<td dir="rtl" width="66"> </td>
<td dir="rtl"> </td>
</tr>
<tr>
<td dir="rtl" width="66"> </td>
<td dir="rtl"><input name="bID"value="<? echo $_GET['bID']; ?>"><input value=" ثبت ">
</td>
</tr>
</table>
</form>
و منتظر می ماند تا کاربر بعد از ویرایش اطلاعات دکمه ثبت را با نام B5 کلیک کند . و اگر کاربر دکمه ثبت را فشار داد با قطعه کد زیر آن را در صفحه ایندکس هندل می کنیم که به صفحه add.php برویم .
if (isset($_POST['B5']))
require("add.php");
ب)add.php
در این صفحه چک می شود که اگر دکمه B5 کلیک شده است اطلاعات مربوط به کتاب را در جدولBook به روز رسانی کند.
if (isset($_POST['B5']))
{
$query="UPDATE `book` SET_ `name`='$_POST[name]',`author`='$_POST[author]',`translator`='$_POST[translator]',`publisher`='$_POST[publisher]',`pub_date`='$_POST[pub_date]',`isbn`='$_POST[isbn]' WHERE `id`='$_POST[bID]' LIMIT 1";
$send=mysql_query($query);
echo "<font color=\"#000000\"><b><br>كتاب \"$_POST[name]\"
ویرایش شد.</b></font>";
}
2 - جستجوی اعضا
مدیر می تواند با انتخاب این گزینه به جستجوی عضو مورد نظر بپردازد . که با کلیک بر روی این
گزینه صفحه ، usersearch.php فراخوانی می شود .
در ابتدای این صفحه از مدیر یک شماره عضویت یا نام کاربری درخواست می شود :
<form method="POST" action="index.php">
<p dir="rtl">شماره عضویت یا نام كاربری:
<input size="20">
<input value="جستجو"></p>
</form>
و منتظر می ماند تا مدیر نام را وارد کرده و دکمه جستجو را فشار دهد .هنگامی که دکمه جستجو کلیک شد اطلاعات کاربر نمایش دده خواهد شد :
if (isset($_POST['B6']))
{
$query="SELECT * FROM `user` WHERE `id`='$_POST[uID]' OR `username`='$_POST[uID]'";
$send=mysql_query($query);
$user_num_rows=mysql_num_rows($send);
if ($user_num_rows>=1)
{
$row=mysql_fetch_array($send);
$book_query="SELECT * FROM `book` WHERE `username`='$row[username]'";
$book_send=mysql_query($book_query);
$book_num_rows=mysql_num_rows($book_send);
$amanat=false;
while ($book_row=mysql_fetch_array($book_send))
{
if ($book_row['properties']=='a')
$amanat=true;
}
$date=date("Y-n-j");
$start_date_array=explode('-',$row['start_date']); // 0->Year 1->Month 2->Day
$lock_date_array=explode('-',$row['lock_date']); // 0->Year 1->Month 2->Day
$start_date=mktime(0,0,0,$start_date_array[1],$start_date_array[2],$start_date_array[0]+1);
$lock_date=mktime(0,0,0,$lock_date_array[1],$lock_date_array[2]+14,$lock_date_array[0]);
$end_start_date=gmdate("Y-n-j",$start_date);
$end_lock_date=gmdate("Y-n-j",$lock_date);
if ($date>$end_start_date)
{
$properties='اتمام عضویت';
if ($amanat==false)
$edit='<a href=?edituser=t&uID='.$row['id'].'>تمدید عضویت</a>/<a href=?edituser=del&uID='.$row['id'].'>حذف</a>';
else
$edit='<a href=?edituser=t&uID='.$row['id'].'>تمدید عضویت</a>';
} else
{
if ($date<=$end_lock_date)
{
$properties='جریمه';
if ($amanat==false)
$edit ='<a href=?edituser=del&uID='.$row['id'].'>حذف</a>';
else
$edit='حذف كاربر ممكن نیست';
} else
{
$properties='فعال';
if ($amanat==false)
$edit ='<a href=?edituser=del&uID='.$row['id'].'>حذف</a>';
else
$edit='حذف كاربر ممكن نیست';
}
}
echo '<table border="0" width="100%" cellspacing="0" cellpadding="0">
<tr>
<td bgcolor="#BBBBFF">شماره</td>
<td bgcolor="#BBBBFF">نام كاربری</td>
<td bgcolor="#BBBBFF">نام</td>
<td bgcolor="#BBBBFF">فامیل</td>
<td bgcolor="#BBBBFF">نام پدر</td>
<td bgcolor="#BBBBFF">شماره شناسنامه</td>
<td bgcolor="#BBBBFF">تاریخ تولد</td>
<td bgcolor="#BBBBFF">تاریخ عضویت</td>
<td bgcolor="#BBBBFF">وضعیت</td>
<td bgcolor="#BBBBFF">ویرایش</td>
</tr>';
echo "<tr>
<td bgcolor=\"#CCCCCC\">$row[id]</td>
<td bgcolor=\"#CCCCCC\">$row[username]</td>
<td bgcolor=\"#CCCCCC\">$row[name]</td>
<td bgcolor=\"#CCCCCC\">$row[family]</td>
<td bgcolor=\"#CCCCCC\">$row[father_name]</td>
<td bgcolor=\"#CCCCCC\">$row[sh_number]</td>
<td bgcolor=\"#CCCCCC\">$row[birthday]</td>
<td bgcolor=\"#CCCCCC\">$row[start_date]</td>
<td bgcolor=\"#CCCCCC\">$properties</td>
<td bgcolor=\"#CCCCCC\">$edit</td>
</tr>";
echo '</table>';
echo '<p>';
$book_query="SELECT * FROM `book` WHERE `username`='$row[username]'";
$book_send=mysql_query($book_query);
$book_num_rows=mysql_num_rows($book_send);
if($book_num_rows>0)
{
echo '<b>لیست كتابهای رزرو یا امانت گرفته شده توسط این
كاربر</b><br>';
echo '<table border="0" width="50%" cellspacing="0" cellpadding="0">
<tr>
<td bgcolor="#BBBBFF">نام كتاب</td>
<td bgcolor="#BBBBFF">نام نویسنده</td>
<td bgcolor="#BBBBFF">وضعیت</td>
<td bgcolor="#BBBBFF">تاریخ</td>
</tr>';
while ($book_row=mysql_fetch_array($book_send))
{
switch ($book_row['properties'])
{
case 'a':
$properties='امانت';
break;
case 'r':
$properties='رزرو';
break;
}
echo "<tr>
<td bgcolor=\"#CCCCCC\">$book_row[name]</td>
<td bgcolor=\"#CCCCCC\">$book_row[author]</td>
<td bgcolor=\"#CCCCCC\">$properties</td>
<td bgcolor=\"#CCCCCC\">$book_row[date]</td>
</tr>";
}
echo '</table>';
} else
echo '<b>هیچ كتابی توسط این كاربر رزرو یا امانت گرفته نشده است.</b>';
} else
echo '<b><font color="#FF0000">هیچ كاربری با مشخصات فوق ثبت نشده است.</font></b>';
}
هنگام نمایش اطلاعات کاربر ، مدیر می تواند اعمال حذف و تمدید اعتبار را برای کاربر داشته باشد . که به صورت یک لینک در اختیار مدیر قرار می گیرد . با انتخاب عمل حذف متغیر edituser مقدار del را به خود می گیرد :
$edit ='<a href=?edituser=del&uID='.$row['id'].'>حذف</a>';
و در صفه ایندکس متغیر $edituser هندل شده وصفحه edtuser.php فراخوانی می شود :
if (isset($_GET['edituser']))
{
require("edituser.php");
}
الف)edituser.php
در این صفحه چک می شود که اگر متغیر $edituser مقدار del را به خود گرفته است عمل حذف انجام شود.
if ($_GET['edituser']=='del')
{
$date=date("Y-n-j");
$query="INSERT INTO `user_del` VALUES('$row0[id]','$row0[name]','$row0[family]','$row0[father_name]','$row0[sh_number]','$row0[birthday]','$row0[username]','$row0[password]','$row0[start_date]','$date')";
$send=mysql_query($query);
$query="DELETE FROM `user` WHERE `id`='$_GET[uID]' LIMIT 1";
$send=mysql_query($query); }
و اگر مدیر بروی لینک تمدید کلیک کند دوباره صفحه editeuser.php فراخوانی می شود با این تفاوت که متغیر $edituser مقدار t را گرفته و عمل تمدید انجام می شود :
if ($_GET['edituser']=='t')
{
$new_start_date=date("Y-n-j");
$query="UPDATE `user` SET `start_date`='$new_start_date' WHERE `id`='$_GET[uID]' LIMIT 1";
$send=mysql_query($query); }
3 - ثبت خبر
این گزینه این امکان را به مدیر می دهد که اخبار و اطلاعیه های مهم را برروی سایت قرار دهد تا اعضا و بازدیدکنندگان در اطلاع قرار گیرند.
news.php
<form method="POST" action="index.php">
<table border="0" width="100%" cellspacing="4" cellpadding="0">
<tr>
<td dir="rtl" width="66">عنوان خبر:</td>
<td dir="rtl"><input size="20"></td>
</tr>
<tr>
<td width="66" height="33" dir="rtl" >شرح خبر:</td>
<td dir="rtl"><textarea cols="100" rows="10"></textarea></td>
</tr>
<tr>
<td dir="rtl" width="66"> </td>
<td dir="rtl"> </td>
</tr>
<tr>
<td dir="rtl" width="66"> </td>
<td dir="rtl"><input value=" ثبت ">
<input type="reset" value=" حذف " name="B2"></td>
</tr>
</table>
</form>
هنگامی که مدیر دکمه ثبت را کلیک میکند صفحه addnews.php فراخوانی می شود . این صفحه عمل درج در بانک را انجام می دهد .
4 – ثبت کتاب
این گزینه امکان اضافه کردن کتاب را به کتابخانه الکترونیک در اختیار مدیر قرار می دهد . هنگامی که مدیر این گزینه را انتخاب می کند صفحه addbook.php فراخوانی می شود . در این صفحه مشخصات کتاب جدید از مدیر درخواست می شود :
Addbook.php
<form method="POST" action="index.php">
<table border="0" width="100%" cellspacing="4" cellpadding="0">
<tr>
<td dir="rtl" width="66">نام كتاب:</td>
<td dir="rtl"><input size="20"></td>
</tr>
<tr>
<td dir="rtl" width="66">نویسنده:</td>
<td dir="rtl"><input size="20"></td>
</tr>
<tr>
<td dir="rtl" width="66">مترجم:</td>
<td dir="rtl"><input name="translator" size="20"></td>
</tr>
<tr>
<td dir="rtl" width="66">ناشر:</td>
<td dir="rtl"><input name="publisher" size="20"></td>
</tr>
<tr>
<td dir="rtl" width="66">تاریخ چاپ:</td>
<td dir="rtl"><input name="pub_date" size="20"></td>
</tr>
<tr>
<td dir="rtl" width="66">شماره شابك:</td>
<td dir="rtl"><input size="20"></td>
</tr>
<tr>
<td dir="rtl" width="66"> </td>
<td dir="rtl"> </td>
</tr>
<tr>
<td dir="rtl" width="66"> </td>
<td dir="rtl"><input value=" ثبت ">
<input type="reset" value=" حذف " name="B2"></td>
</tr>
</table>
</form>
هنگامی که مدیر اطلاعات را وارد کرد و دکمه ثبت را فشار می دهد صفحه Add.php فراخوانی می شود . در این صفحه عمل درج در جدول book انجام می شود .
Add.php
if (isset($_POST['B3']))
{
$query="INSERT INTO `book` VALUES('','$_POST[name]','$_POST[author]','$_POST[translator]','$_POST[publisher]','$_POST[pub_date]','$_POST[isbn]','','','')";
$send=mysql_query($query);
echo "<font color=\"#000000\"><b><br>كتاب \"$_POST[name]\" ثبت شد.</b></font>";
$_GET['p'] ='addbook';
}
5 – upload
در این قسمت مدیر می تواند فایل هایی که می خواهد روی سایت قرار دهد را، upload کند .با انتخاب این گزینه صفحه upload.php فراخونی می شود .
Upload.php
<form action="" method="post" enctype="multipart/form-data">
<p>File:
<input type="file" />
<input type="file" />
<input type="file" />
<input type="submit" value="Send" />
</p>
</form>
<?php
foreach ($_FILES["pictures"]["error"] as $key => $error)
{
if ($error == UPLOAD_ERR_OK)
{
$tmp_name = $_FILES["pictures"]["tmp_name"][$key];
$name = $_FILES["pictures"]["name"][$key];
move_uploaded_file($tmp_name, "./$name");
}
}
?>
عمل upload فایل توط دستور Move_upload_file() انجام می شود .
6 – لیست کتابها
با این گزینه مدیر می تواند لیست کتابهای موجود در کتابخانه ببیند . با انتخاب این گزینه صفحه listbook.php فراخوانی می شود.
Listbook.php
<?php
$query="SELECT * FROM `book` ORDER BY `name` ASC";
$send=mysql_query($query);
$num_rows=mysql_num_rows($send);
echo '<table border="0" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>نام كتاب</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>نویسنده</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>مترجم</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>ناشر</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>تاریخ چاپ</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>شماره شابك</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>وضعیت كتاب</b></td>';
$i=0;
while ($row=mysql_fetch_array($send))
{
if ($i%2==0)
$color='#E5E5E5';
else
$color='#CCCCCC';
switch ($row['properties'])
{
case '':
$properties='موجود';
break;
case 'a':
$properties='امانت';
break;
case 'r':
$properties='رزرو';
break;
}
echo "<tr>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[name]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[author]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[translator]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[publisher]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[pub_date]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[isbn]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$properties</td>";
$i++;
}
echo '</table>';
?>
7 – لیست اعضای فعال
در این گزینه مدیر این امکان را دارد که بتواند اعضای فعال کتابخانه را مشاهده نماید.با انتخاب این گزینه صقحه listuser.php فراخوانی می شود .در این صفحه ابتدا لیست اعضا از جدول user انتخاب شده :
$query="SELECT * FROM `user` ORDER BY `id` ASC";
$send=mysql_query($query);
$num_rows=mysql_num_rows($send);
و سپس در یک grid به نمایش در می آید . و این امکان را به مدیر می دهد که بتواند گزارشی از کارکرد عضو مورد نظر داشته باشد . با انتخاب لینک گزارش صفحه report.php فراخوانی شده . در این صفحه بر اساس شماره عضویت کاربر تمامی کارکرد او را از جــــدول archive.php انتخاب کرده و در یک gride به
نمایش در می آورد :
$query1="SELECT * FROM `archive` WHERE `user_id`='$_GET[uID]' ORDER BY `date` ASC";
$send1=mysql_query($query1);
echo '<table border="0" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>تاریخ</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>نام كتاب</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>عملكرد</b></td>';
$i=0;
while ($row1=mysql_fetch_array($send1))
{
$query2="SELECT `name` FROM `book` WHERE `id`='$row1[book_id]'";
$send2=mysql_query($query2);
$row2=mysql_fetch_array($send2);
switch ($row1[action])
{
case '1':
$action="رزرو";
break;
case '2':
$action="حذف رزرو";
break;
case '3':
$action="امانت گرفته";
break;
case '4':
$action="پس داده";
break;
}
if ($i%2==0)
$color='#E5E5E5';
else
$color='#CCCCCC';
echo "<tr>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row1[date]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row2[name]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$action</td>";
$i++;
}
echo '</table>';
و این امکان را به مدیر می دهد که بتواند از صفحه گزارش print بگیرد :
<SCRIPT LANGUAGE="JavaScript">
if (window.print) {
document.write('<form> '
+ '<input value="Click" '
+ 'onClick="javascript:window.print()"> "برای پرینت صفحه اینجا را کلیک کنید"</form>');
}
</script>
8 – لیست اعضای حذفی
هنگامی که مدیر عضوی را حذف می کند ، اطلاعات عضو کاملا از جدول حذف نشده و در یک جدول دیگر به نام user_del ذخیره می شود به طور کلی اعضا به صورت منطقی حذف می شوند .
این گزینه این امکان را به مدیر میدهد که بتواند اطلاعات اعضای حذفی و همچنین گزارشی از کارکرد آنها را داشته باشد. با انتخاب این گزینه صفحه listuserdel.php فراخوانی می شود . اعمالی که انجام می شود مانند گزینه قبلی می باشد با این تفاوت که اطلاعات کاربر ازجدول userdel انتخاب می شود :
$query="SELECT * FROM `user_del` ORDER BY `id` ASC";
$send=mysql_query($query);
$num_rows=mysql_num_rows($send);
echo '<table border="0" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>شماره عضویت</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>نام كاربری</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>نام</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>نام خانوادگی</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>نام پدر</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>شماره شناسنامه</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>تاریخ تولد</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>تاریخ عضویت</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>تاریخ حذف</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>گزارش</b></td>';
$i=0;
while ($row=mysql_fetch_array($send))
{
$report='<a href=?uID='.$row[id].'&report=report>گزارش</a>';
if ($i%2==0)
$color='#E5E5E5';
else
$color='#CCCCCC';
echo "<tr>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[id]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[username]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[name]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[family]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[father_name]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[sh_number]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[birthday]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[start_date]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[del_date]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$report</td>";
$i++;
}
echo '</table>';
9 – ویرایش اطلاعات
مدیر می تواند که اطلاعات شخصی خود را ویرایش کند ، با انتخاب این گزینه صفحه profile.php فراخوانی شده . در این صفحه اطلاعات کاربر از جدول user انتخاب شده و به نمایش در می آید :
$query="SELECT * FROM `user` WHERE `username`='$_COOKIE [UserName]'";
$send=mysql_query($query);
$row=mysql_fetch_array($send);
?>
<form method="POST" action="index.php">
<table border="0" width="100%" cellpadding="0" cellspacing="4">
<tr>
<td dir="rtl" width="123"><span lang="fa">نام:</span></td>
<td dir="rtl" width="850">
<input type="text" size="20" value="<?php echo $row['name']; ?>"></td>
</tr>
<tr>
<td dir="rtl" width="123"><span lang="fa">نام خانوادگی:</span></td>
<td dir="rtl" width="850">
<input type="text" size="20" value="<?php echo $row['family']; ?>"></td>
</tr>
<tr>
<td dir="rtl" width="123"><span lang="fa">نام پدر:</span></td>
<td dir="rtl" width="850">
<input type="text" size="20" value="<?php echo $row['father_name']; ?>"></td>
</tr>
<tr>
<td dir="rtl" width="123"><span lang="fa">شماره شناسنامه:</span></td>
<td dir="rtl" width="850">
<input type="text" size="20" value="<?php echo $row['sh_number']; ?>"></td>
</tr>
<tr>
<td dir="rtl" width="123">سال<span lang="fa"> تولد:</span></td>
<td dir="rtl" width="850">
<input type="text" size="20" value="<?php echo $row['birthday']; ?>"></td>
</tr>
<tr>
<td dir="rtl" width="123"> </td>
<td dir="rtl" width="850"> </td>
</tr>
<tr>
<td dir="rtl" width="123">نام كاربری:</td>
<td dir="rtl" width="850">
<?php echo $row['username']; ?></td>
</tr>
<tr>
<td dir="rtl" width="123">کلمه عبور فعلی:</td>
<td dir="rtl" width="850">
<input type="password" size="20"></td>
</tr>
<tr>
<td dir="rtl" width="123">كلمه عبور جدید:</td>
<td dir="rtl" width="850">
<input type="password" size="20"></td>
</tr>
<tr>
<td dir="rtl" width="123">تكرار كلمه عبور جدید:</td>
<td dir="rtl" width="850">
<input name="password2" size="20"></td>
</tr>
<tr>
<td dir="rtl" width="814" colspan="2"> </td>
</tr>
<tr>
<td dir="rtl" width="814" colspan="2">
<input type="hidden" value="<?php echo $row['id']; ?>">
<input value="ثبت اطلاعات"><span lang="fa">
</span></td>
</tr>
</table>
</form>
و اگر مدیر کلید ثبت اطلاعات را فشار دهد صفحه reg.php فراخوانی شده و در آنجا چک می شود که اگر کاربر دکمه ثبت با نام B1 را فشار داده اطلاعات او به روز شود :
if (isset($_POST['uID']))
{
$query="UPDATE `user` SET `password`='$password', `name`='$_POST[name]', `family`='$_POST[family]', `father_name`='$_POST[father_name]', `sh_number`='$_POST[sh_number]', `birthday`='$_POST[birthday]' WHERE `id`='$_POST[uID]' LIMIT 1";
$send=mysql_query($query,$link);
echo "<font color=\"#000000\"><b>مشخصات شما ویرایش شد.</b></font>";
}
10 – تائید اعضا
هر کاربر که در کتابخانه عضو می شود ابتدا اطلاعات او در جدول user_temp ذخیره می شود و حتما باید توسط مدیر مورد تائید قرار گرفته تا بتواند وارد کتابخانه شود . در این گزینه این امکان به مدیر داده شده که بتواند اعضایی را که ثبت نام کردده اند و هنوز تائید نشده اند را ببیند و عمل تائید را انجام دهد . با انتخاب این گزینه صفحه newuser.php فراخوانی شده :
$query="SELECT * FROM `user_temp` WHERE `accept`='' ORDER BY `id` ASC";
$send=mysql_query($query);
$num_rows=mysql_num_rows($send);
echo '<table border="0" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>شماره عضویت</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>نام كاربری</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>نام</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>نام خانوادگی</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>نام پدر</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>شماره شناسنامه</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>تاریخ تولد</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>تایید</b></td>';
$i=0;
while ($row=mysql_fetch_array($send))
{
if ($i%2==0)
$color='#E5E5E5';
else
$color='#CCCCCC';
$accept="<a href=index.php?uID=$row[id]&accept=OK>تایید</a>";
echo "<tr>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[id]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[username]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[name]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[family]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[father_name]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[sh_number]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[birthday]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$accept</td>";
$i++;
}
echo '</table>';
هنگامی که مدیر لینک تائید را انتخاب می کند متغیر accept مقدار Ok را به خود می گیرد :
$accept="<a href=index.php?uID=$row[id]&accept=OK>تایید</a>";
و در صفحه ایندکس صفحه accept.php فراخوانی می شود :
if (isset($_GET['accept']))
{
require("accept.php");
}
در صفحه accept اطلاعات کاربری که مورد تائید قرار گرفته از جدول user_temp به جدول user منتقل
می شود و از این به بعد کاربر می تواند وارد کتابخانه شود :
$query="SELECT * FROM `user_temp` WHERE `id`='$_GET[uID]'";
$send=mysql_query($query);
$row=mysql_fetch_array($send);
$start_date=date("Y-n-j");
$query="INSERT INTO `user` VALUES('','$row[name]','$row[family]','$row[father_name]','$row[sh_number]','$row[birthday]','$row[username]','$row[password]','$start_date','')";
$send=mysql_query($query);
$query="UPDATE `user_temp` SET `accept`='OK' WHERE `id`='$_GET[uID]' LIMIT 1";
$send=mysql_query($query);
$_GET['p'] ='newuser';
3-2-2-2-منوی اصلی سایت
صفحه اصلی این سایت ایندکس می باشد که کاربر با توجه به نیاز خود صفحه های دیگر را که در حکم یک
تابع می باشند فراخوانی می کند.
فراخوانی شده که شامل دستوراتی برای ارتباط با بانک می باشد. db_connect.php در ابتدای این صفحه،
(در ادامه به توضیح آن خواهیم پرداخت)
کد زیر صفحه فوق را فراخوانی می کند
<?php
require("db_connect.php");
?>
را فراخوانی کرده . که در صفحه فوق منوی مربوط به Menu.phpدر ادامه پس از تنظیمات اولیه صفحه ،
کاربران نمایش داده می شود که به توضیح آن خواهیم پرداخت.
<body topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0">
<div align="center">
<table border="0" width="985" height="100%" cellspacing="0" cellpadding="0">
<tr>
<td colspan="2" height="113" align="center" style="padding: 0; " width="1000">
<img border="0" src="images/001.jpg" width="1000" height="113"></td>
</tr>
<tr>
<td width="144" valign="top" bgcolor="#CCCCCC" style="padding-left:0; padding-right:0; padding-top:5px; padding-bottom:0" height="412" background="images/004.jpg" align="center">
<?php
require("menu.php");
?>
<td valign="top" align="center" style="padding-left:5px; padding-right:5px; padding-top:1px; padding-bottom:1px" width="856" height="412" background="images/002.jpg">
<?php
if (isset($_POST['B1']))
require("reg.php");
if (isset($_POST['B2']))
require("log.php");
if (isset($_POST['B3']))
require("add.php");
if (isset($_POST['B13']))
require("addf.php");
if (isset($_POST['B4']))
require("search.php");
if (isset($_POST['B5']))
require("add.php");
if (isset($_POST['B15']))
require("addf.php");
if (isset($_POST['B6']))
require("usersearch.php");
if (isset($_GET['B1']))
require("action.php");
if (isset($_POST['B10']))
require("frosh.php");
if (isset($_POST['B11']))
require("actionf.php");
if (isset($_GET['p']))
{
$page=$_GET['p'].'.php';
require($page);
}
if (isset($_GET['r']))
{
require("rezerv.php");
}
if (isset($_GET['action']))
{
require("action.php");
}
if (isset($_GET['edit']))
{
require("editbook.php");
}
if (isset($_GET['editf']))
{
require("editbookf.php");
}
if (isset($_GET['edituser']))
{
require("edituser.php");
}
if (isset($_GET['accept']))
{
require("accept.php");
}
if (isset($_GET['report']))
{
require("report.php");
}
if (isset($_GET['f']))
{
require("rezervf.php");
}
if (isset($_GET['actionf']))
{
require("actionf.php");
}
?>
</td>
</tr>
<tr>
<td height="42" align="center" style="padding: 0; " colspan="2" width="1000" background="images/003.jpg">
<?php
require("footer.php");
?>
</tr>
</table>
</div>
</body>
پس از فراخوانی صفحه منو، منتظر می مانیم که کاربر منویی را انتخاب کند. پس از آن متغیر مر بوط به آن منو مقدار خاص خود را گرفته و صفحه ایندکس، آن را هندل می کند.
if (isset($_GET['p']))
{
$page=$_GET['p'].'.php';
require($page);
}
اضافه و.php را که در صفحه منو مقدار دهی شده است را گرفته و به انتهای آن P این قطعه کد متغیر صفحه ایجاد شده را فراخوانی می کند.(متغیر فوق با توجه به اینکه کدام منو را انتخاب کرده ایم ، نام صفحه ای را به خود می گیرد که باید فراخوانی شود.)
علاوه بر متغیر فوق دیگر متغیر ها ودکمه ها در این صفحه هندل می شوند .
1- صفحه ورود
در این صفحه مقدمات ورود کاربر که شامل 2 جعبه متن برای ورود نام کاربری و کلمه عبورو دکمه ورود می باشد فراهم شده است
<form method="POST" action="log.php">
<table border="0" width="100%" cellspacing="4" cellpadding="0">
<tr>
<td dir="rtl" width="59"><span lang="fa">نام كاربری:</span></td>
<td><input type="text" size="20"></td>
</tr>
<tr>
<td dir="rtl" width="59"><span lang="fa">كلمه عبور:</span></td>
<td><input type="password" size="20"></td>
</tr>
<tr>
<td dir="rtl" width="59"> </td>
<td> </td>
</tr>
<tr>
<td dir="rtl" width="59"> </td>
<td><input type="submit" value=" ورود ">
<input type="reset" value=" حذف "></td>
</tr>
</table>
</form>
و اگر کاربر کلمه عبور یا نام کاربری خود را اشتباه وارد کرده باشد و یا اینکه تاریخ تمدید کارت آن گذشته باشد پیغامی بر این مبنا مشاهده خواهد کرد.
if (isset($message)) echo $message;
if ((isset($_GET['error'])) && ($_GET['error']=='yes')) echo '<font color="#FF0000"><b>نام كاربری یا كلمه عبور معتبر نیست.</b></font>';
if ((isset($_GET['error'])) && ($_GET['error']=='date1')) echo '<font color="#FF0000"><b>مدت اعتبار عضویت شما تمام شده است.<br>برای تمدید عضویت با مدیر سایت تماس بگیرید.</b></font>';
if ((isset($_GET['error'])) && ($_GET['error']=='date2')) echo '<font color="#FF0000"><b>بدلیل تاخیر در پس دادن كتاب، شما تا دوهفته مجاز به استفاده از این سایت نیستید.</b></font>';
2- صفحه ثبت نام
هنگامی که کاربر منوی ثبت نام را فشار می دهد متغیر p مقدار register را به خود می گیرد و در صفحه index به انتهای آن .php اضافه شده و صفحه مورد نظر را فرا خوانی می کند.
<form method="POST" action="index.php">
<table border="0" width="100%" cellpadding="0" cellspacing="4">
<tr>
<td dir="rtl" width="123"><span lang="fa">نام:</span></td>
<td dir="rtl" width="850">
<input type="text" size="20" value="<?php if (isset($_POST['name'])) echo $_POST['name'];?>"></td>
</tr>
<tr>
<td dir="rtl" width="123"><span lang="fa">نام خانوادگی:</span></td>
<td dir="rtl" width="850">
<input type="text" size="20" value="<?php if (isset($_POST['family'])) echo $_POST['family'];?>"></td>
</tr>
<tr>
<td dir="rtl" width="123"><span lang="fa">نام پدر:</span></td>
<td dir="rtl" width="850">
<input type="text" size="20" value="<?php if (isset($_POST['father_name'])) echo $_POST['father_name'];?>"></td>
</tr>
<tr>
<td dir="rtl" width="123"><span lang="fa">شماره شناسنامه:</span></td>
<td dir="rtl" width="850">
<input type="text" size="20" value="<?php if (isset($_POST['sh_number'])) echo $_POST['sh_number'];?>"></td>
</tr>
<tr>
<td dir="rtl" width="123">سال<span lang="fa"> تولد:</span></td>
<td dir="rtl" width="850">
<input type="text" size="20" value="<?php if (isset($_POST['birthday'])) echo $_POST['birthday'];?>"></td>
</tr>
<tr>
<td dir="rtl" width="123"> </td>
<td dir="rtl" width="850"> </td>
</tr>
<tr>
<td dir="rtl" width="123">نام كاربری:</td>
<td dir="rtl" width="850">
<input type="text" size="20" value="<?php if (isset($_POST['username'])) echo $_POST['username'];?>"></td>
</tr>
<tr>
<td dir="rtl" width="123">كلمه عبور:</td>
<td dir="rtl" width="850">
<input type="password" size="20"></td>
</tr>
<tr>
<td dir="rtl" width="123">تكرار كلمه عبور:</td>
<td dir="rtl" width="850">
<input type="password" size="20"></td>
</tr>
<tr>
<td dir="rtl" width="814" colspan="2"> </td>
</tr>
<tr>
<td dir="rtl" width="814" colspan="2">
<input type="submit" value="ثبت اطلاعات"><span lang="fa">
</span><input type="reset" value=" حذف "></td>
</tr>
</table>
</form>
اگر کاربر دکمه ثبت را فشار دهد پارامتر B1 به ایندکس پاس شده و صفحه reg.php فراخوانی می شود.
3- جستجوی کتاب
همان طور که در سناریو توضیح داده شد عمل جستجو در سه سطح مدیر اعضا و کاربرنهایی ارائه می شود در این صفحه با توجه به سطحی که کاربر در آن قرار دارد امکانات متفاوتی را ارائه می دهد که به توضیح آن می پردازیم:
هنگامی که کاربر دکمه search را کلیک می کند متغییر p مقدار search book را به خود گرفته و در صفحه ایندکس هندل می شود و به انتهای آن .php اضافه شده وصفحه مورد نظر را فراخوانی می کند.
if (isset($_GET['p']))
{
$page=$_GET['p'].'.php';
require($page);
}
در این صفحه ابتدا مقدمات جستجو را برای کاربر فراهم می کند که شامل یک textbox برای ورود عبارت مورد نظر و یک Combobox برای انتخاب فیلد مورد جستجو می باشد، هنگامی که کاربر کلمه مورد نظر خود را وارد و بر روی دکمه جستجو کلیک می کند، در همین صفحه چک می شود اگر کاربر دکمه جستجو را کلیک کند عمل جستجو انجام شده و نتیجه نمایش داده می شود.
در هنگام نمایش جستجو ابتدا چک می شود که کاربر در چه سطحی قرار دارد.
If(isset($_cookie[‘username’]))
اگر در سطح مدیر باشد علاوه بر امکان امانت دادن یا رزرو کردن امکان ویرایش و حذف را فراهم می کند. ولی اگر عضوی عمل جستجو را انجام داده باشد ، فقط عمل رزرو را برای او در نظر می گیرد با این شرط که قبلا این کتاب توسط شخص دیگری رزرو نشده باشد ، و اگر یک کاربر معمولی یا بازدید کننده باشد فقط عنل جستجو را برای او انجام می دهد.
<form method="POST" action="index.php">
<table border="0" width="48%" cellspacing="4" cellpadding="0" align="center">
<tr>
<td dir="rtl" width="89">جستجو برای</td>
<td dir="rtl" width="108"><input name="search" size="20"></td>
<td dir="rtl" width="41">براساس</td>
<td dir="rtl"><select size="1" name="select">
<option value="1">نام كتاب</option>
<option value="2">نویسنده</option>
<option value="3">مترجم</option>
<option value="4">ناشر</option>
<option value="5">شابك</option>
</select></td>
<td dir="rtl"><input value=" جستجو "></td>
</tr>
</table>
<p> </p>
</form>
<?php
if (isset($_POST['B4']))
{
$search=trim($_POST['search']);
switch ($_POST['select'])
{
case 1:
$search_in='name';
break;
case 2:
$search_in='author';
break;
case 3:
$search_in='translator';
break;
case 4:
$search_in='publisher';
break;
case 5:
$search_in='isbn';
break;
}
$date=date("Y-n-j");
$query="SELECT `id`,`name`,`date` FROM `book` WHERE `properties`='r'";
$send=mysql_query($query,$link);
while ($row=mysql_fetch_array($send))
{
$start_rezerv_date_array=explode('-',$row['date']); // 0->Year 1->Month 2->Day
$start_rezerv_date=mktime(0,0,0,$start_rezerv_date_array[1],$start_rezerv_date_array[2]+2,$start_rezerv_date_array[0]);
$end_rezerv_date=gmdate("Y-n-j",$start_rezerv_date);
if ($date>$end_rezerv_date)
{
$query_expire="UPDATE `book` SET `properties`='', `username`='', `date`='' WHERE `id`=$row[id] LIMIT 1";
$send_expire=mysql_query($query_expire,$link);
}
}
$query="SELECT * FROM `book` WHERE `$search_in`='$search'";
$send=mysql_query($query);
$num_rows=mysql_num_rows($send);
if ($num_rows<=0)
{
echo "<font color=\"#FF0000\"><b>هیچ موردی برای این جستجو یافت نشد.</b></font>";
} else
{
echo '<table border="0" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>نام كتاب</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>نویسنده</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>مترجم</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>ناشر</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>تاریخ چاپ</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>شماره شابك</b></td>';
if (isset($_COOKIE['UserName']))
{
echo '<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>وضعیت كتاب</b></td>';
if ($_COOKIE['UserName']=='admin')
echo '<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>نام كاربر</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>شماره عضویت</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>امانت</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>ویرایش</b></td>';
} else
echo '<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>وضعیت كتاب</b></td>';
echo '</tr>';
$i=0;
while ($row=mysql_fetch_array($send))
{
if ($i%2==0)
$color='#E5E5E5';
else
$color='#CCCCCC';
$user_query="SELECT * FROM `user` WHERE `username`='$row[username]'";
$user_send=mysql_query($user_query);
$user_row=mysql_fetch_array($user_send);
switch ($row['properties'])
{
case '':
if (isset($_COOKIE['UserName']))
{
$rezerv_query="SELECT * FROM `book` WHERE `username`='$_COOKIE[UserName]'";
$rezerv_send=mysql_query($rezerv_query);
$rezerv_rows=mysql_num_rows($rezerv_send);
if (($rezerv_rows<2) && ($_COOKIE['UserName']!='admin'))
$properties='<a href="?r='.$row['id'].'">رزرو</a>';
else
$properties='رزرو';
}
else
$properties='قابل رزرو';
$action='<a href=?bID='.$row['id'].'&action=a>امانت دادن</a>';
$edit='<a href=?bID='.$row['id'].'&edit=edit>ویرایش</a>/<a href=?bID='.$row['id'].'&edit=del>حذف</a>';
break;
case 'a':
$date_array=explode('-',$row['date']); // 0->Year 1->Month 2->Day
$start_time=mktime(0,0,0,$date_array[1],$date_array[2]+15,$date_array[0]);
$end_time=gmdate("j/n/Y",$start_time);
$properties='امانت تا تاریخ '.$end_time;
$action='<a href=?uID='.$user_row['id'].'&bID='.$row['id'].'&action=p>پس گرفتن</a>';
break;
case 'r':
$properties='رزرو شده';
$action='<a href=?uID='.$user_row['id'].'&bID='.$row['id'].'&action=a>امانت دادن</a>';
break;
}
echo "<tr>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[name]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[author]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[translator]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[publisher]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[pub_date]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[isbn]</td>";
if (isset($_COOKIE['UserName']))
{
if ($_COOKIE['UserName']=='admin')
{
echo "<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$properties</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$user_row[name] $user_row[family]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$user_row[id]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$action</td>";
if ($row['properties']=='')
echo "<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$edit</td>";
else
echo "<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\"></td>";
}
}
if (!isset($_COOKIE['UserName']) || ($_COOKIE['UserName']!='admin'))
{
echo "<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$properties</td>";
}
echo "</tr>";
$i++;
}
echo '</table>';
}
}
?>
3-2-2-3-سطح اعضا
1-جستجو کتاب
اولین امکانی که کاربر به آن نیاز دارد عمل جستجوی کتاب می باشد که قبلا به توضیح آن پرداخته شد. که کاربر می تواند کتاب مورد نظر خود را جستجو کرده و اگر در امانت یا رزرو شخص خاصی نبود به امانت بگیرد.
2-لیست کتاب های رزرو
در این صفحه این امکان برای کاربر فراهم شده است که لیست کتاب هایی را که رزرو کرده است را ببینند و یا آنها را از رزرو خود خارج کند. با توجه به اینکه چه عضوی این در خواست را انجام داده عمل جستجو انجام شده و کاربر می تواند کتاب های رزرو خود راببیند. نام عضو را از کوکی ای که برای هر کاربر
ایجاد می کنیم، بدست می آوریم.
<?php
$query="SELECT * FROM `book` WHERE `username`='$_COOKIE[UserName]' AND `properties`='r' ORDER BY `date` ASC";
$send=mysql_query($query);
$num_rows=mysql_num_rows($send);
if ($num_rows<=0)
echo '<font color=\"#000000\"><b>شما هیچ كتابی رزرو نكرده اید.</b></font>';
else
{
echo '<table border="0" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>نام كتاب</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>نویسنده</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>مترجم</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>ناشر</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>تاریخ چاپ</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>شماره شابك</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>تاریخ رزرو</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>حذف رزرو</b></td>';
$i=0;
while ($row=mysql_fetch_array($send))
{
if ($i%2==0)
$color='#E5E5E5';
else
$color='#CCCCCC';
echo "<tr>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[name]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[author]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[translator]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[publisher]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[pub_date]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[isbn]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[date]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\"><a href=?bID=$row[id]&p=remove_rezerv>حذف</td>";
$i++;
}
echo '</table>';
}
?>
3-نمایش لیست کتاب های امامت داده شده
اعضا می توانند لیست کتاب هایی را که به امانت برده اند را مشاهده نمایند، با توجه به اینکه در کوکی چه نامی ذخیره شده است، لیست کتاب های امانتی همان کاربر را نمایش می دهد.
<?php
$query="SELECT * FROM `book` WHERE `username`='$_COOKIE[UserName]' AND `properties`='a' ORDER BY `date` ASC";
$send=mysql_query($query);
$num_rows=mysql_num_rows($send);
if ($num_rows<=0)
echo '<font color=\"#000000\"><b>شما هیچ كتابی امانت نگرفته اید.</b></font>';
else
{
echo '<table border="0" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>نام كتاب</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>نویسنده</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>مترجم</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>ناشر</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>تاریخ چاپ</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>شماره شابك</b></td>
<td bgcolor="#BBBBFF" style="padding-top: 2px; padding-bottom: 2px"><b>تاریخ امانت</b></td>';
$i=0;
while ($row=mysql_fetch_array($send))
{
if ($i%2==0)
$color='#E5E5E5';
else
$color='#CCCCCC';
echo "<tr>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[name]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[author]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[translator]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[publisher]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[pub_date]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[isbn]</td>
<td bgcolor=\"$color\" style=\"padding-top: 2px; padding-bottom: 2px\">$row[date]</td>";
$i++;
}
echo '</table>';
}
?>
4-ارتباط با ما
در این صفحه این امکان دراختیار کاربر گذاشته شده است که بتواند هر گونه پشینهاد یا سوالی از مدیریت دارد مطرح کند و به مدیر ایمیل بزند
<form method="post" action="
<php?
$header = "From: $textfield3";
mail($select,$textfield,$textarea,$header);
?>
لطفا ایمیل خود را وارد کنید :
<input size="50" maxlength="50">
<br>
<br>
ارتباط با :
<select>
<option value="imanghafarian@yahoo.com" selected>--</option>
<option value="imanghafarian@yahoo.com">مدیر</option>
</select>
عنوان
<input id="textfield" size="15" maxlength="20">
<br>
<br>
لطفا سوال خود را وارد کنید :<br>
<textarea cols="50" rows="6"></textarea>
<input value="ارسال" type="submit">
</form>
5-ویرایش اطلاعات
در این صفحه ابتدا کوکی چک شده و با توجه به اینکه در کوکی نام کدام کاربر قرار دارد آن را در بانک جستجو کرده و اطلاعات شخصی وی را نمایش می دهد و کاربر می تواند اطلاعات خود را ویرایش کند.
<?php
$query0="SELECT * FROM `user` WHERE `id`='$_GET[uID]'";
$send0=mysql_query($query0);
$row0=mysql_fetch_array($send0);
if ($_GET['edituser']=='t')
{
$new_start_date=date("Y-n-j");
$query="UPDATE `user` SET `start_date`='$new_start_date' WHERE `id`='$_GET[uID]' LIMIT 1";
$send=mysql_query($query);
}
if ($_GET['edituser']=='del')
{
$date=date("Y-n-j");
$query="INSERT INTO `user_del` VALUES('$row0[id]','$row0[name]','$row0[family]','$row0[father_name]','$row0[sh_number]','$row0[birthday]','$row0[username]','$row0[password]','$row0[start_date]','$date')";
$send=mysql_query($query);
$query="DELETE FROM `user` WHERE `id`='$_GET[uID]' LIMIT 1";
$send=mysql_query($query);
}
if ($_GET['edituser']=='t')
echo "<font color=\"#000000\"><b><br>كاربر \"$row0[username]\" تمدید عضویت شد.</b></font>";
else
echo "<font color=\"#000000\"><b><br>كاربر \"$row0[username]\" حذف شد.</b></font>";
?>
پیوست
صفحه ورودی
صفحه login.php
صفحه ثبت نام
صفحه جستجوی کتاب
صفحه ارتباط با مدیر
صفحه اخبار
صفحه ورودی اعضا
صفحه کتابهای امانت گرفته شده
صفحه کتابهای رزرو شده
صفحه ویرایش اطلاعات
صفحه جستجوی اعضا
صفحه درج خبر
صفحه ثبت کتاب
لیست کتابها
لیست اعضا
گزارش عملکرد اعضا
مراجع و منا بع
1) محمد مصدری ، مرجع کامل زبان برنامه نویسی PHP5 ، انتشارات ناقوس ، 1385 ، جلد اول
2) محمد مصدری ، مرجع کامل زبان برنامه نویسی PHP5 ، انتشارات ناقوس ، 1385 ، جلد دوم
3) بنت،سیمون و اسکلتون ، جان و لان ، جفر نژاد قمی ، عین الله ، مرجع کامل UML ، انتشارات علوم رایانه ، 1384