کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش عملی پروژه محور PHP

مقدمه

در آموزش حاضر نحوه ی ساخت یک اپلیکیشن تحت وب با زبان PHP را از 0 تا 100 به شما می آموزیم. این اپلیکیشن تحت وب دارای قابلیت هایی نظیر ورود / خروج (login / logout) به سایت، ایجاد (درج)، خواندن، بروز رسانی یا حذف (CRUD) رکورد در دیتابیس خواهد بود. تمامی مفاهیم را به تفصیل شرح خواهیم داد. چنانچه تازه پا به عرصه ی برنامه نویسی تحت وب سمت سرور (backend) گذاشته اید، این آموزش ویژه ی شما می باشد. لازم به ذکر است که در مبحث جاری از فریم ورک و چارچوب نرم افزاری تحت وب استفاده نمی کنیم و همه چیز را با php خالص از 0 می نویسیم. همچنین تمرکز بر روی پیاده سازی قابلیت ها و رفتار سایت خواهد بود و طراحی ظاهر آن در این آموزش تحت پوشش قرار نمی گیرد. ظاهر اپلیکیشن شما صرفا یک لیست ساده از آیتم ها می باشد که به هنگام ورود کاربر به سایت، این لیست از آیتم ها را نمایش می دهد.

پیش نیازهای این آموزش

در این آموزش هدف ساخت و پیاده سازی یک سرویس سمت سرور (backend) ویژه ی وب سایت می باشد و برای آن لازم است با مباحث زیر آشنایی داشته باشید:

  1. HTML/CSS برای طراحی ظاهر اپلیکیشن.
  2. زبان برنامه نویسی سمت سرویس گیرنده یا کلاینت JavaScript. در حال حاضر نیازی به jQuery نیست.
  3. آشنایی با دیتابیس MySQL. از دانش کار با این دیتابیس برای ساخت سطر در جدول، خواندن، بروز رسانی و حذف رکورد از دیتابیس (پیاده سازی قابلیت های CRUD) استفاده می شود.
  1. Text Editor – توصیه می کنیم از Sublime Text/Notepad++ استفاده نمایید. داخل این نرم افزارها کدهای اپلیکیشن خود را می نویسیم و در واقع نقش محیط کدنویسی را برای توسعه دهنده ایفا می کنند.
  2. نرم افزار XAMPP – این نرم افزار نقش سرویس دهنده وب و محیطی که اپلیکیشن در آن مستقر می شود را برای شما ایفا خواهد کرد. در واقع فایل های وب سایت و داده هایی که در دیتابیس درج می شوند، داخل محیط XAMPP ذخیره می گردند.
  3. مرورگر وب – می توانید از هر مرورگری که حافظه ی (RAM) زیادی را اشغال نمی کنند، استفاده نمایید.

1. تنظیم و راه اندازی سرویس دهنده (Server)

آموزش را با نوشتن یک برنامه ی ساده در سمت سرور که متن "hello world" را برای کاربر نمایش می دهد، شروع می کنیم.

ابتدا به پوشه ای که XAMPP را در آن نصب کردید (در پوشه ی C:\xampp) مراجعه نمایید. از آنجا به پوشه ی htdocs مراجعه کرده (مستقر در آدرس C:\xampp\htdocs) و یک پوشه به نام "MyFirstWebsite" ایجاد نمایید.

Server

در این بخش یک URL محلی (Local) برای وب سایت خود ایجاد کرده اید. این پوشه برای ارائه ی تمامی فایل های وب سایت (.html، .php، .css، .js و غیره ...) مورد استفاده قرار می گیرد. حال text editor یا محیط کدنویسی را راه اندازی نمایید.

در این آموزش از نرم افزار sublime به عنوان محیط کدنویسی استفاده می کنیم. در صورت تمایل می توانید از نرم افزار Notepad++ یا هر نرم افزار دیگر استفاده نمایید.

در زیر یک صفحه ی ساده HTML ایجاد می کنیم و متن "hello world" را به وسیله ی کد PHP از سرویس دهنده برای کاربر نمایش می دهیم.

Server
 < html>
   
      My first PHP Website
        
           
                                    < ?php
            echo "

Hello World!

"; ? > < /html>

فایل فوق را در پوشه ی "MyFirstWebSite" ذخیره نموده و آن را "index.php" نام گذاری نمایید (آدرس و پوشه ای که در بالای صفحه قابل مشاهده می باشد).

پس از ایجاد فایل، پنل کنترل XAMPP را باز نمایید. چنانچه بر روی صفحه ی دسکتاپ قابل مشاهده نمی باشد، در آن صورت بایستی پوشه ی XAMPP را جهت دسترسی به آن جستجو نمایید.

Server Server

پس از دستیابی به کنترل پنل، Apache و MySQL را با کلیک بر روی دکمه ی "Start" در ستون actions اجرا نمایید. با کلیک بر روی دکمه ی Start یک شماره شناسایی فرایند (PID) تصادفی و شماره ی درگاه (port number) پیش فرض به نمایش در می آید. Apache اسم سرویس دهنده ی وب (web server) است که در آن فایل های اپلیکیشن تحت وب و تعامل با مرورگر مدیریت شده و MySQL دیتابیسی است که داده های اپلیکیشن مورد نظر در آن ذخیره می شوند.

مروگر خود را باز کرده و در نوار آدرس آن، Localhost را وارد نمایید. بلافاصله منوی XAMMP نمایان می شود.

اگر اولین بار است که آن را اجرا می کنید، از شما می خواهد که زبان دلخواه را انتخاب نمایید و سپس شما را به منوی مورد نظر هدایت می کند. همان طور که مشاهده می کنید پوشه یا آدرس مربوطه localhost/xampp می باشد. این صفحه ی پیش فرض است که با تایپ کردن localhost در نوار آدرس کاربر به آن هدایت می شود.

Server

اگر این صفحه نمایش داده شد، بدین معنی است که سرویس دهنده ی XAMPP فعال شده و در حال اجرا می باشد. حال وب سایت جدید خود را که در XAMPP مستقر کردید، اجرا نمایید. در نوار آدرس localhost/MyFirstWebsite را تایپ نمایید.

server

همان طور که مشاهده می کنید، URL قابل مشاهده در نوار آدرس MyFirstWebsite می باشد. این نشانی از پوشه ی htdocs گرفته شده و به طور خودکار فایل هایی که "index" نام داشته (نظیر index.html، index.aspx و غیره ...) و به عنوان صفحه ی اصلی و پیش فرض سایت ایفای نقش می کند را می خواند. اگر در نوار آدرس مرورگر localhost/MyfirstWebsite/index.php را نیز وارد نمایید، همین صفحه ی پیش فرض به نمایش در می آید. در صورت تمایل می توانید با تغییر اسم پوشه، URL دلخواه خود را تنظیم نمایید. اما در این آموزش ما از MyFirstWebsite به عنوان اسم پوشه ی فایل صفحات سایت استفاده می کنیم.

نکته:

چنانچه URL نام برده را در نوار آدرس مرورگر وارد کنید، در حالی که فایلی به نام index در آن وجود نداشته باشد، آنگاه (به دلیل عدم وجود فایل مورد درخواست در سرور) با خطای 404 مواجه می شوید.

اگر فایل صفحه ی اصلی اپلیکیشن شما غیر از (index.) index نام گذاری شده باشد، بایستی اسم فایل را دقیقا مشخص نمایید: E.x: localhost/MyfirstWebsite/page.php.

2. ایجاد صفحات Public HTML

در مرحله ی حاضر می خواهیم وب سایت خود را ویرایش کرده و یک لینک ثبت نام (registration) به آن اضافه کنیم که کاربر بتواند بلافاصله پس از ثبت نام در سایت وارد (log-in) شود. با کد زیر صفحه ی اصلی وب سایت خود را ویرایش می کنیم:

< html>

My first PHP Website
    

                                    < ?php
            echo "

Hello World!

"; ? > Click here to login Click here to register < ;/html>
Server

همان طور که از کد بالا مشاهده می کنید، 2 لینک به صفحه ی اصلی اضافه کردیم که یکی برای Login و دیگری برای register در سایت تعبیه شده است. ابتدا به ساخت صفحه ی ثبت نام کاربر می پردازیم.

< html>

My first PHP Website
    

Registration Page

Click here to go back< br />
Enter Username:
Enter password:
< /html>
Index PHP

همان طور که می بینید، در مثال بالا فقط یک فرم ساده طراحی کردیم که کاربر می تواند از طریق آن نام کاربری و گذرواژه (credentials) را وارد کند. اکنون به ساخت صفحه ی ورود به سایت می پردازیم. کافی است همان کد را کپی و جایگذاری نمایید تا کار شما سریع تر پیش رود.

< html>

My first PHP Website
    

Login Page

Click here to go back

Enter Username:
Enter password:
< /html>

Index PHP

همان طور که می بینید برنامه ی حاضر همان کد سازنده ی صفحه ی ثبت نام است که در زیر تغییرات جدید آن خط کشیده شده است.

آدرس localhost/MyFirstWebsite را در نوار آدرس وارد کنید. صفحات مربوطه هر یک به ترتیب ظاهری مشابه زیر خواهند داشت:

Index PHP Index PHP Register Index

3. ایجاد دیتابیس و جداول آن

حال که صفحه های اصلی سایت را برای کاربران سایت با موفقیت طراحی کردیم، به شرح طراحی و تعامل با دیتابیس می پردازیم. در مرحله ی اول localhost/phpmyadmin را در نوار آدرس مرورگر وارد نمایید. این url شما را به صفحه ی اصلی سایت phpmyadmin هدایت می کند:

Create Database

حال بر روی تب Databases واقع در بالای صفحه کلیک کنید، سپس داخل کادر مقیم در وسط صفحه first_db را وارد نمایید. بر روی دکمه ی Create کلیک نمایید. گزینه ی تنظیم زبان یا Collation را تغییر ندهید.

Create Database

داخل جدول مورد نظر فیلدهای زیر را به ترتیب ایجاد کرده و نوع آن ها را بر اساس مشخصات عنوان شده تنظیم نمایید. سپس بر روی دکمه ی Save جهت ذخیره ی تنظیمات کلیک کنید:

  • قالب و ساختار کلی جدول: (اسم ستون) Column Name، (نوع داده ای) Type، (طول یا حجم مقدار) Length، (فیلد null پذیر) Null Property، سایر Property ها.
  • id - INT - N/A - Not Null - Auto Increment
  • username - varchar - 50 - Not null
  • password - varchar - 50 - Not null

سایر تنظیمات را تغییر ندهید.

Create Database
نکته:

بایستی جهت مشاهده ی فلید auto_increment می بایست به سمت راست صفحه پیمایش نمایید. جهت نمایش فیلد A_I در صفحه، تصویر فوق کمی ویرایش شده است.

در مرحله ی بعد، یک جدول دیگر به نام list به همراه 7 ستون ایجاد نمایید. ساختار کلی جدولی به صورت زیر خواهد بود:

  • id - INT - N/A - Not Null - Auto Increment
  • details - text - Not null
  • date_posted - varchar - 30 - Not null
  • time_posted - Time - Not null
  • date_edited - varchar - 30 - Not null
  • time_edited - Time - Not null
  • public -varchar - 5 - Not null
Database Table

4. افزودن اطلاعات کاربران و ذخیره ی آن ها در دیتابیس

پس از ایجاد جداول دیتابیس، به تکمیل و فعال سازی صفحه ی ثبت نام (registration) سایت و افزودن قابلیت های لازم به آن می پردازیم. داخل صفحه ی registration.php، کد مورد نظر را در زیر دستورات html خود درج نمایید:

Insert To Database

< html>

My first PHP Website
    

Registration Page

Click here to go back

Enter Username: < input type="text" name="username" required="required" />
Enter password: < input type="password" name="password" required="required" />
< /html>

در زیر شرح کد داده شده است:

  • $_SERVER["REQUEST_METHOD"] == "POST" – بررسی می کند آیا داده های فرم به هنگام کلیک بر روی دکمه ی submit به وسیله ی POST به سرویس دهنده ارسال شده اند یا خیر. متد POST داخل تگ form فایل HTML به وسیله ی دستور method="POST" تعریف می شود.
  • $_POST[''] – مقدار ویژگی name که به وسیله ی متد POST به سرور ارسال می شود را دریافت می نماید. این دستور صرفا ورودی را بر اساس مقدار ویژگی name از سرویس دهنده دریافت می کند. در مثال جاری منظور همان مقادیر username و password می باشد.
  • متد mysql_real_escape_string() – ورودی کاربر را داخل یک رشته کپسوله سازی کرده و آن را در برابر حمله ی SQL Injections محافظت می کند. این دستور کاراکترهای ناامن موجود در رشته را ایمن کرده و ایمن بودن درخواست sql را تضمین می کند.

حال به فایل register.php مراجعه کرده و پس از ورود مقادیر دلخواه، بر روی دکمه ی "Register" کلیک کنید. در مثال جاری، می بینید که مقادیر xtian و 123456 هر یک به ترتیب به عنوان نام کاربری و گذرواژه وارد شده اند. بایستی مقادیر ورودی در زیر دکمه ی Register نمایش داده شوند. مثال:

Register Page

تا به اینجای آموزش، نحوه ی دریافت ورودی از فرم را آموختید. حال ورودی ها کاربر را داخل دیتابیس ذخیره می کنیم. داخل فایل register.php، کد زیر را درج نمایید:

Register Page

< html>
  
   My first PHP Website
    
     
      

Registration Page

Click here to go back

Enter Username:
Enter password:
alert("Username has been taken!");'; // Prompts the user Print ''; // redirects to register.php } } if($bool) { mysql_query("INSERT INTO users (username, password) VALUES ('$username', 'password')"); // inserts value into table users Print ''; // Prompts the user Print ''; // redirects to register.php } } ? >

در زیر شرح کد را مشاهده می کنید:

  • mysql_connect("Server name","Server Username","Server Password") – به وسیله ی این دستور (تابع) به سرویس دهنده ی XAMPP متصل شده و به دیتابیس دسترسی پیدا می کنیم. پارامتر localhost یا 127.0.0.1 اسم سرویس دهنده است. نام کاربری (username) پیش فرض root بوده و گذرواژه ای برای دسترسی به دیتابیس انتخاب نمی شود.
  • or die('Message') - چنانچه شرط برقرار و صحیح نبود، پیغام خطا را نشان می دهد.
  • mysql_query('sql query') – کوئری های SQL را به دیتابیس فعال در سرویس دهنده ارسال می کند.
  • mysql_fetch_array('query') - سطر خروجی یا نتیجه ی کوئری را در قالب آرایه ی متناظر (associative)، عددی یا هر دو از دیتابیس بازیابی می نماید. این دستور داخل یک حلقه ی while قرار داده می شود تا بدین وسیله از تمامی سطرها کوئری بگیرد. در هر بار اجرای حلقه یک سطر واکشی می شود. به همین جهت نیز لازم است از حلقه ی while استفاده شود.
  • $row['row name'] – مقدار ستون در کوئری جاری. خروجی در قالب یک آرایه نمایش داده می شود. در این مثال، $row اسم متغیر row در حلقه است.

ورودی هایی که قبلا به سرور ارسال شده اند را امتحان کنید و ببینید چه اتفاقی رخ می دهد. بلافاصله بایستی پیغامی برای کاربر نمایش داده شود که ثبت نام و عضویت در سایت با موفقیت انجام شده است. می توانید به صفحه ی phpmyadmin مراجعه کرده و محتوای جدول users را مشاهده نمایید:

تا به اینجا آموختید که چگونه داده هایی را همراه با اعتبارسنجی و بررسی صحت آن ها در دیتابیس درج کنید.

5. ورود کاربر به سایت (User log-in): احراز هویت و پیاده سازی قابلیت Authentication

اکنون به صفحه ی ورود به سایت می پردازیم. برای این صفحه یک فایل جدید به نام checklogin.php ایجاد می کنیم که هویت کاربر را برای ورود به سایت می سنجد. اگر به کد فایل login.php نگاهی بیاندازید، متوجه می شوید که در تگ Form آن ویژگی action برابر "checklogin.php" قرار داده شده است. حال کاربر در صورت وارد کردن نام کاربری و گذرواژه ی ناصحیح بار دیگر به صفحه ی login.php هدایت می شود.

حال کد صفحه ی checklogin.php را به صورت زیر می نویسیم:

احراز هویت

< 
? >

شرح کد بالا را در زیر مشاهده می کنید:

  • – یک متغیر session جهت نگهداری اطلاعات کاربر در حافظه ی سرور ایجاد می کند. به عبارت دیگر یک session در سرور ایجاد می کند. این متد غالبا در صفحات احرازهویت شده (authenticated pages) فراخوانی می شود. علت استفاده از متد مزبور در کد فوق این است که آرایه ی متناظر $_SESSION[''] به آن احتیاج دارد.
  • mysql_num_rows – خروجی این تابع یک عدد صحیح int می باشد. این تابع تعداد تمامی سطرها را با توجه به کوئری (تعداد سطرهای موجود در نتیجه یا خروجی کوئری) بازمی گرداند.
  • $_SESSION['name'] – این آرایه اسم متغیر session را تعیین می کند. این دستور کاربردی مشابه متغیرهای سراسری در تکنیک برنامه نویسی شی گرا دارد. از این کد برای کسب اطمینان از این که کاربر قبلا احراز هویت شده است یا خیر، استفاده می شود.

حال سعی کنید نام کاربری و گذرواژه ی ناصحیح را وارد فرم کرده و اپلیکیشن را تست نمایید. بایستی پیغام دلخواه را برگرداند. سپس مقادیر صحیح را وارد فرم کرده و به سرور ارسال نمایید. کد شما را به صفحه ی اصلی سایت home.php هدایت می کند.

توجه:

در حال حاضر صفحه ای به نام home.php وجود ندارد، به همین جهت خطای 404 به نمایش در می آید.

6. ایجاد و تنظیم صفحه ی اصلی سایت home page برای کاربران احرازهویت و ثبت نام شده (logged-in) و پیاده سازی قابلیت خروج (log-out) از آن

پس از پیاده سازی قابلیت احراز هویت کاربر جهت ورود به سایت، صفحه ی اصلی سایت (home.php) را با کد زیر تعریف می کنیم:

Home Page

< html>
 
  My first PHP Website
   
   < ?php
                                                    //starts the session<
   if($_SESSION['user']){ // checks if the user is logged in  
   }
   else{
      header("location: index.php"); // redirects if user is not logged in
   }
   $user = $_SESSION['user']; //assigns user value
   ? >
     
     

Home Page

! Click here to go logout

Add more to list:
Public post?

My list

< /html>

شرح کد:

  • - یک session ایجاد می کند. جهت آرایه ی متناظر $_SESSION[''] فراخوانی می شود.
  • header – کاربر را به آدرس مشخص شده هدایت می کند (redirect).

حال صفحه ی فعلی مرورگر را بروز آوری (refresh) کنید. ظاهری مشابه زیر خواهد داشت:

Home Page

حال که صفحه ی اصلی سایت (home) را پیاده سازی کردیم، جهت خروج کاربر از سایت (log out) صفحه ی logout.php را ایجاد کرده و بررسی می کنیم آیا session کاربر غیرفعال شده (از حافظه ی سرور حذف شده) یا خیر.

در واقع در فایل مزبور بررسی می کنیم که آیا کاربر از سایت خارج شده یا خیر (log-out). چنانچه کاربر log-out کرده باشد، طبیعتا دیگر نباید به صفحه ی اصلی سایت home.php دسترسی داشته باشد. در زیر محتوای فایل logout.php را مشاهده می کنید:

Home Page

< ?php
                                                   
                            
                            
? >

همان طور که می بینید کد این صفحه بسیار ساده است. تابعsession_destroy() مقدار $_SESSION[''] و کلیه ی اطلاعات مربوط به session جاری را از حافظه حذف می کند. تابع header() نیز صرفا کاربر را به صفحه ی index.php هدایت (redirect) می کند.

7. پیاده سازی مکانیزیمی ساده جهت تضمین امنیت صفحه (security)

اکنون صفحه ی اصلی سایت، home.php، را در مروگر بروز رسانی (مجدد بارگذاری) کنید و بعد بر روی لینک logout کلیک نمایید. حال سعی کنید به صفحه ی قبلی (home.php) برگردید. چه اتفاقی رخ می دهد؟

BackWard

همان طور که مشاهده می کنید، اپلیکیشن دیگر شما را به صفحه ی home.php بازگشت (redirect) نمی دهد چرا که با کلیک بر روی logout قبلا از سایت خارج شده اید. حال سعی کنید نشانی localhost/MyFirstWebsite/home.php را به صورت دستی در نوار آدرس مرورگر وارد کنید. خواهید دید که همین اتفاق تکرار می شود و ورود دستی آدرس فایل نیز اجازه ی دسترسی به صفحه ای که قبلا مجوزدهی شده (و کاربر وارد آن شده) را نمی دهد. قابلیتی که در اینجا پیاده سازی کردیم یک مکانیزم امنیتی ساده است که کاربران مجوزدهی نشده را به یک صفحه ی عمومی سایت هدایت می کند.

اکنون بار دیگر وارد سایت شده (login) و به صفحه ی home.php مراجعه نمایید.

8. پیاده سازی قابلیت افزودن آیتم جدید به لیست – user access only

در گام بعدی، می خواهیم قابلیت اضافه و درج آیتم جدید در لیست را به اپلیکیشن تحت وب خود اضافه کنیم. اگر به کد فرم html نگاهی بیاندازید متوجه می شوید که مقدار ویژگی action در تگ form برابر "add.php" قرار داده شده است. در واقع با این کد html، درخواست کاربر با متد post به صفحه ی add.php در سرور هدایت می شود. در زیر محتوای فایل add.php را مشاهده می کنید:

Add PHP

< ?php
                                                   
    if($_SESSION['user']){
    }
    else{ 
       header("location:index.php");
    }
    $details = mysql_real_escape_string($_POST['details']);
    $time = strftime("%X"); //time
    $date = strftime("%B %d, %Y"); //date
    Print "$time - $date - $details";
? >

لازم به ذکر است که اسکریپت بالا نسخه ی کامل و نهایی فایل add.php نیست. در این کد صرفا مقدار زمان و تاریخ را با فرمت صحیح نشان می دهیم و ورودی کاربر را دریافت می کنیم. مجددا به صفحه ی home.php مراجعه کرده و پس از افزودن آیتم جدید بر روی "Add to list" کلیک نمایید.

Home PHP

خروجی در صفحه ی add.php به صورت خواهد بود:

Add To PHP

همان طور که می بینید، زمان، تاریخ و مقدار ورودی شما در صفحه ی add.php نمایش داده شده است. در زیر به شرح کد می پردازیم:

  • strftime() – مقدار زمان جاری را بر اساس فرمت تعیین شده بازیابی می کند.
  • %X - زمان جاری سیستم
  • %B - مقدار ماه جاری را بر اساس محل جغرافیایی (مقدار ماه سیستم)
  • %d – مقدار روز جاری سیستم
  • %Y – مقدار سال جاری سیستم

حال زمان آن رسیده که محتوای فایل add.php خود را ویرایش کرده و داده های زیر را همراه با ورودی checkbox داخل جدول دیتابیس ذخیره کنیم:

Add

< ?php
                                              
    if($_SESSION['user']){
    }
    else{ 
       header("location:index.php");
    }
    if($_SERVER['REQUEST_METHOD'] == "POST")
    {
       $details = mysql_real_escape_string($_POST['details']);
       $time = strftime("%X"); //time
       $date = strftime("%B %d, %Y"); //date
       $decision = "no";
       mysql_connect("localhost","root","") or die(mysql_error()); //Connect to server
       mysql_select_db("first_db") or die("Cannot connect to database"); //Conect to database
       foreach($_POST['public'] in $each_check) //gets the data from the checkbox
       {
          if($each_check != null){ //checks if checkbox is checked
             $decision = "yes"; // sets the value
          }
       }
       mysql_query("INSERT INTO list(details, date_posted, time_posted, public) VALUES ('$details','$date','$time','$decision')"); //SQL query
       header("location:home.php");
    }
    else
    {
       header("location:home.php");
    }
? >

شرح کد:

  • foreach() – این تابع مقدار المان checkbox را بازیابی می کند. همان طور که می بینید، فرمت checkbox در فرم به این صورت است : name="checkbox []". بدین معنی که جهت دریافت مقدار از checkbox، باید به صورت یک آرایه از آن نمونه سازی شود. با این کار می توان همزمان از چندین checkbox مقدار دریافت کرد.

حال تعدادی داده وارد کرده و سپس بر روی لینک "Add to list" کلیک می نماییم. در این مثال بار دیگر مقدار fish را وارد می کنیم. حال به صفحه ی phpmyadmin مراجعه کرده و مطمئن می شویم که اطلاعات جدید اضافه شده اند. خروجی مثال ما به صورت زیر می باشد:

localhost/phpmyadmin:

PHP Admin

9. نمایش داده ها در صفحه ی اصلی سایت (home page)

پس از کسب اطمینان از اضافه شدن موفقیت آمیز داده های مورد نظر در دیتابیس، می خواهیم داده ها را در صفحه ی اصلی سایت برای کاربر به نمایش بگذاریم. برای این منظور محتوای home.php را ویرایش کرده و تعدادی ستون جدید برای تاریخ درج داده ها به جدول جاری اضافه می کنیم:

home.php:

Admin PHP

< html>
 
  My first PHP Website
   
     //starts the session
    if($_SESSION['user']){ // checks if the user is logged in  
    }
    else{
      header("location: index.php"); // redirects if user is not logged in
    }
    $user = $_SESSION['user']; //assigns user value
   ?>
    
     

Home Page

! Click here to go logout

Add more to list:
Public post?

My list

'; Print '"; Print '"; Print '"; Print '"; Print ''; Print ''; Print ''; Print ''; } ? >

Id
Details
Post Time
Edit Time
Edit
Delete
Public Post
'. $row['id'] . "
'. $row['details'] . "
'. $row[' date_posted'] . " - " . $row['time_posted'] . "
'. $row['date_edited'] . " - " . $row['time_edited'] ."
edit
delete
'. $row['public'] . '

< /body>
< /html>

شرح کد فوق بسیار ساده می باشد. این کد صرفا داده هایی که حلقه ی while از لیست می خواند را داخل جدول و با فرمت فوق نمایش می دهد. حال مرورگر را باز کرده و صفحه ی home.php را مجددا بارگذاری نمایید. چه اتفاقی رخ می دهد؟

Home.PHP

همان طور که در تصویر مشاهده می کنید، داده های مورد نظر در صفحه نمایش داده می شوند. تا به اینجای آموزش نحوه ی پیاده سازی عملیات Create و Read در دیتابیس را آموختیم. در جدول حاضر می بینید که ستون هایی ویژه ی update (ویرایش سطرهای جدول) و delete (حذف رکورد از جدول) در نظر گرفته شده است. برای شرح نحوه ی پیاده سازی این قابلیت ها یک آیتم دیگر (tuna) را به لیست اضافه می کنیم و این بار مقدار آیتم را در ستون public post بر روی no تنظیم می نماییم:

Mylist

10. بروز رسانی و ویرایش داده ها در دیتابیس

اکنون قصد داریم داده های موجود در دیتابیس را بروز رسانی کنیم و برای نیل به این هدف از امکانی به نام GET بهره می گیریم. اگر به خاطر داشته باشید در مثال های قبلی از متد POST برای ارسال درخواست HTTP به سرور استفاده می کردیم. اما این بار از متد GET برای ویرایش داده های اپلیکیشن و حذف رکورد از دیتابیس کمک می گیریم. در شروع به ویرایش کد موجود در فایل home.php پرداخته و مقداری کد به دو ستون اضافه می کنیم:

Updated

< html>
  
    My first PHP Website
      
        < ?php
                                 //starts the session
        if($_SESSION['user']){ // checks if the user is logged in  
        }
        else{
        header("location: index.php"); // redirects if user is not logged in
        }
        $user = $_SESSION['user']; //assigns user value
       ? >
          
            

Home Page

! Click here to go logout

Add more to list:
Public post?

My list

'; Print '"; Print '"; Print '"; Print '"; Print ''; Print ''; Print ''; Print ''; } ? >

Id
Details
Post Time
Edit Time
Edit
Delete
Public Post
'. $row['id'] . "
'. $row['details'] . "
'. $row['date_posted'] . " - " . $row['time_posted'] . "
'. $row['date_edited'] . " - " . $row['time_edited'] ."
edit
delete
'. $row['public'] . '

قطعا متوجه شده اید که فقط پارامترهایی را به URL (پارامتر id) برای ویرایش و حذف لینک ها به کد اضافه کردیم. بعدا از این پارامتر برای مدیریت داده ها استفاده خواهیم کرد. علت استفاده از پارامتر id این است که یک شناسه ی منحصر بفرد محسوب می شود. از آنجایی که کاربر می تواند مقدار تکراری را وارد ستون Details کند، توصیه نمی کنیم از ستون details به عنوان راهی برای ویرایش آتی داده ها استفاده نمایید.

اگر اشاره گر موس را بر روی لینک edit معلق نگه دارید، مقدار id در پایین، سمت چپ صفحه ی جاری به نمایش در می آید:

edit.php

اکنون زمان آن رسیده که صفحه ی edit.php را ایجاد و منطق آن را پیاده سازی کنیم:

edit.php:

PHP

< html>
  
    My first PHP Website
      
         //starts the session
        if($_SESSION['user']){ // checks if the user is logged in  
        }
   else{
        header("location: index.php"); // redirects if user is not logged in
   }
   $user = $_SESSION['user']; //assigns user value
   ? >
      
        

Home Page

! Click here to go logout

Return to home page

Currently Selected

0) { while($row = mysql_fetch_array($query)) {

شرح کد:

  • !empty() - این متد اطمینان حاصل می کند که مقدار پارامتر id تهی نباشد. می توان با حذف عملگر ! از ابتدای متد، سینتکس را معکوس کرده و اطمینان حاصل کرد که مقدار پارامتر تهی باشد.
  • $_GET[''] – مقدار پارامتر را بازیابی می کند. در مثال حاضر از id به عنوان پارامتر URL استفاده شده است. بنابراین دستور لازم برای بازیابی مقدار ارسالی به عنوان پارامتر URL، $_GET['id'] می باشد.
  • $id_exists - متغیری که بررسی می کند آیا id در دیتابیس وجود دارد یا خیر.
  • $_SESSION['id'] - مقدار پارمتر id را داخل متغیر session قرار می دهیم تا بتوانیم از آن در فایل دیگری استفاده کنیم.
Empty

Print "";
   Print '
"; Print '"; Print '"; Print '"; Print '"; Print ""; } } else { $id_exists = false; } } ? >

Id
Details
Post Time
Edit Time
Public Post
' . $row['id'] . "
' . $row['details'] . "
' . $row['date_posted'] . " - " . $row['time_posted']."
' . $row['date_edited'] . " - " . $row['time_edited']."
' . $row['public'] . "


Enter new detail:
public post? '; } else {

There is not data to be edited.

} ?> < /html> Click here for the complete edit.php code (Only refer to the front-end part. Github Sourced)

علت بررسی مقدار متغیر $id_exists این است که اگر کاربر مقدار پارامتر را به مقدار عددی ناموجودی (غیر از 1 یا 2) تغییر داد (در مثال جاری تنها دو rows/id)، بتوانیم یک پیغام مبنی بر عدم وجود داده ی مورد نظر برای کاربر نمایش دهیم.

حال بر روی لینک edit در سطر اول کلیک نمایید. خروجی زیر را نمایش خواهد داد:

Edit

محتوای فایل edit.php را به صورت کامل در زیر مشاهده می کنید:

< html>
  
    My first PHP Website
    
    < ?php
                            //starts the session
    if($_SESSION['user']){ // checks if the user is logged in  
    }
    else{
      header("location: index.php"); // redirects if user is not logged in
    }
    $user = $_SESSION['user']; //assigns user value
    ? >
    
      

Home Page

! Click here to go logout

Return to home page

Currently Selected

0) { while($row = mysql_fetch_array($query)) { Print ""; Print '"; Print '"; Print '"; Print '"; Print '"; Print ""; } } else { $id_exists = false; } } ? >

Id
Details
Post Time
Edit Time
Public Post
' . $row['id'] . "
' . $row['details'] . "
' . $row['date_posted'] . " - " . $row['time_posted']."
' . $row['date_edited'] . " - " . $row['time_edited']."
' . $row['public'] . "


Enter new detail:
public post? '; } else {

There is not data to be edited.

} ?> < /html> Click here for the complete edit.php code (Only refer to the front-end code. Github sourced)

اکنون پارامتر url را با حذف متغیر ?id=1 ویرایش نمایید.پس از حذف متغیر نام برده، url ظاهری مشابه زیر خواهد داشت: localhost/MyFirstWebsite/edit.php. این url را در نوار آدرس مرورگر مشاهده می کنید:

Title

حال مقداری بزرگتر از مقدار id تنظیم می کنیم. در این مثال، 5 را به عنوان پارامتر به متغیر query string (id) ارسال می کنیم. با ارسال مقدار ذکر شده به پارامتر id، url در نوار آدرس مرورگر ظاهری مشابه زیر خواهد داشت:

Alt

پس از تنظیم پارامترهای URL، دستور ویرایش داده ها در دیتابیس را می نویسیم. فایل edit.php را باز کرده و کد یا منطق لازم برای بروز رسانی داده ها در جدول را به صورت زیر در آن درج نمایید:

edit.php:

Request

< ?php
   if($_SERVER['REQUEST_METHOD'] == "POST")
   {
      mysql_connect("localhost", "root", "") or die (mysql_error()); //Connect to server
      mysql_select_db("first_db") or die ("Cannot connect to database"); //Connect to database
      $details = mysql_real_escape_string($_POST['details']);
      $public = "no";
      $id = $_SESSION['id'];
      $time = strftime("%X"); //time
      $date = strftime("%B %D, %Y"); //date
      foreach($_POST['public'] as $list)
      {
         if($list != null)
         {
            $public = "yes";
         }
      }
      mysql_query("UPDATE list SET details='$details', public='$public', date_edited='$date', time_edited='$time' WHERE id='$id'");
      header("location:home.php");
   }
? >

صفحه ی کنونی مرورگر را مجددا بارگذاری کرده (refresh) و به صفحه ی edit.php بازگردید. حال جدول را با داده های جدید بروز رسانی می کنیم. ما در این مثال از مقدار "Salmon" استفاده کرده (مقدار سطری با id=1 را به Salmon تغییر داده) و مقدار ستون Public Post را بر روی no تنظیم می کنیم:

edit.php?id=1:

Current

بر روی دکمه ی Update List کلیک نمایید. اپلیکیشن کاربر را به صفحه ی home.php هدایت کرده و لیست ویرایش شده را نمایش می دهد.

Mylist

همان طور که می بینید در این جدول زمان و تاریخ ویرایش داده ها در ستون Edit Time نمایش داده شده است. مقدار ستون Public Post بر روی no تنظیم شده و اولین فیلد ستون Details مقدار Salmon را نمایش می دهد.

قابلیت ویرایش و بروز رسانی داده ها در دیتابیس را با موفقیت پیاده سازی کردیم. حال به شرح نحوه ی حذف داده از جدول مورد نظر می پردازیم.

11. پیاده سازی قابلیت حذف رکورد از جدول (Delete)

پیاده سازی قابلیت Delete مشابه کدنویسی عملیات ویرایش و بروز رسانی داده ها است و تنها دستور SQL ای که بر روی دیتابیس اجرا می شود متفاوت است. بجای دستور UPDATE از دستور DELETE استفاده می کنیم.

لازم است به هنگام حذف دائمی یک رکورد از جدول، از کاربر پرسیده شود که آیا در این خصوص اطمینان کامل دارد یا خیر. برای این منظور از کمی کد جاوا اسکریپت در فایل home.php استفاده می کنیم.

کد فایل مذکور را به صورت زیر ویرایش می کنیم:

Delete

< table border="1px" width="100%">
       Id
       Details
       Post Time
       Edit Time
       Edit
       Delete
       Public Post
    ';
             Print ''. $row['id'] . "";
             Print ''. $row['details'] . "";
             Print ''. $row['date_posted'] . " - " . $row['time_posted'] . "";
             Print ''. $row['date_edited'] . " - " . $row['time_edited'] ."";
             Print 'edit';
             Print 'delete';
             Print ''. $row['public'] . '';
          Print '';
       }
    ? >
< script>
    function myFunction(id)
    {
       var r = confirm("Are you sure you want to delete this record?");
       if(r == true)
       {
          window.location.assign("delete.php?id=" + id);
       }
    }
< /script>

تغییراتی که در کد اعمال شده اند به شرح زیر می باشند:

  • لینک delete را ویرایش کردیم.
  • مقدار ویژگی href از تگ a را برابر "#" قرار دادیم
  • با افزودن ویژگی onclick و تنظیم آن بر روی مقدار myFunction، یک تابع JavaScript که id سطر مورد نظر به عنوان پارامتر به آن ارسال می شود را صدا زده و از کاربر می پرسیم آیا از حذف رکورد اطمینان کامل دارد یا خیر.

در زیر کد html، قطعه کد javascript را مشاهده می کنید که به هنگام حذف پاک کردن رکورد از دیتابیس از کاربر می پرسد آیا از حذف آن اطمینان کامل دارد یا خیر. زمانی که کاربر بر روی دکمه ی ok در کادر محاوره ای کلیک می کند، اپلیکیشن کاربر را به صفحه ی delete.php ارجاع داده و مقدار id سطر را به عنوان پارامتر ارسال می کند. در زیر به ایجاد صفحه ی delete.php و پیاده سازی منطق delete می پردازیم:

delete.php

                          < ?php
                           //starts the session
    if($_SESSION['user']){ //checks if user is logged in
    }
    else {
       header("location:index.php"); //redirects if user is not logged in.
    }
    if($_SERVER['REQUEST_METHOD'] == "GET")
    {
       mysql_connect("localhost", "root", "") or die(mysql_error()); //connect to server
       mysql_select_db("first_db") or die("cannot connect to database"); //Connect to database
       $id = $_GET['id'];
       mysql_query("DELETE FROM list WHERE id='$id'");
       header("location:home.php");
    }
? >

کد پیچیدگی چندانی ندارد و دستور کلی همانی است که در نمونه ی قبلی بکار بردیم. تنها تفاوت در استفاده از متد GET بجای POST برای ارسال درخواست HTTP است. به این خاطر از متد GET استفاده می کنیم که قصد داریم همراه با درخواست HTTP یک پارامتر URL به سرور ارسال نماییم. اکنون صفحه ی home.php را از نو بارگذاری کرده و رکورد اول از جدول را حذف می کنیم.

خروجی:

Output

نتیجه ی نهایی:

Last Result

12. نمایش داده هایی که مقدار ستون public post آن ها بر روی yes تنظیم شده است (نمایش داده های عمومی)

تنها بخشی که مانده نمایش داده هایی است که در جدول (صفحه ی index.php) مقدار ستون public post آن ها بر روی yes تنظیم شده است. اگر به خاطر داشته باشید در وب سایت خود یک صفحه به نام index.php داریم که کاربران احراز هویت نشده به آن هدایت می شوند. پیاده سازی این قابلیت بسیار ساده است. کافی سات محتوای صفحه ی index.php را ویرایش کرده و مقداری کد php و یک جدول html به آن اضافه کنیم. در زیر صفحه ی index.php بروز رسانی شده ی خود را مشاهده می کنیم:

Display

حال از سایت خارج شده (logout) تا اپلیکیشن شما را به صفحه ی پیش فرض سایت (index.php که برای کاربران ثبت نام و احراز هویت نشده نیز قابل دسترسی است) هدایت نماید. این صفحه ظاهری مشابه زیر خواهد داشت:

List

در این مرحله هنوز هیچ محتوایی برای شما قابل مشاهده نمی باشد چرا که هیچ رکوردی در جدول بر روی public تنظیم نشده است.

حال بار دیگر وارد سایت شده و این بار مقداری داده اضافه می کنیم. در این مثال ما مقادیر زیر را وارد جدول دیتابیس می کنیم:

  • Salad - public
  • Corn - non-public
  • Pasta - public
  • Chicken - public
  • Spaghetti - non-public

در کل 6 آیتم جدید به جدول اضافه کردیم که 3 تای آن ها برای عموم و کاربران احراز هویت نشده قابل مشاهده می باشد:

MList

حال با کلیک بر روی لینک مربوطه از سایت خارج شده (logout) و سپس به صفحه ی پیش فرض سایت (index.php) مراجعه نمایید. اکنون بایستی ظاهری مشابه زیر داشته باشد:

Log Out

همان طور که می بینید تنها داده هایی که بر روی public تنظیم شده اند (مقدار ستون public post آن ها بر روی yes تنظیم شده) در این صفحه قابل مشاهده می باشند.

در پایان شما بایستی فایل های زیر را در پروژه ی php خود داشته باشید:

Finaly
1396/03/10 2793 3246
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...