آموزش برنامه نویسی PHP بطور مرحله به مرحله

این تاپیک 0 مشارکت کننده و 0 پاسخ دارد .

۴۷ visibility
نویسنده پست
سه شنبه ، ۲۲ آبان ۱۳۹۷     ۶:۴۴ ب.ظ #


معین تفضلی

Subscriber
7 پست68 تاپیک

آموزش مقدماتی تا پیشرفته برنامه نویسی PHP و MYSQL

در این نوشته تلاش داریم راهنمای فشرده ولی جامعی در خصوص زبان برنامه‌نویسی PHP از معرفی و تاریخچه آن تا مراحل نصب و مفاهیم برنامه‌نویسی به شما خواننده عزیز ارائه دهیم. مطالب این نوشته در 7 بخش کلی مقدمه، نخستین برنامه (Hello World)، فرم‌ها، پایگاه‌های داده، دریافت محتوا از پایگاه‌داده، احرار هویت و نتیجه گیری تنظیم شده است. اگر مایل به یادگیری زبان PHP هستید، حتما با ما در این نوشته همراه باشید.
1. مقدمه
شاید شما نیز جزو آن دسته از افراد باشید که در زمان مدرسه به درس هنر و کلاً علوم انسانی علاقه زیادی داشته‌اید. برخی افراد فکر کنند که چنین موضوعاتی ماهیت مبهم و پیش‌پاافتاده‌ای دارند اما در هر صورت افراد زیادی به چنین موضوعاتی علاقه‌مند هستند، چون دوست دارند خلاق باشند.

مسلماً هیچ یک از ما در دوران تحصیل، کلاس‌های درس فناوری اطلاعات را همانند کلاس‌های ادبیات و هنر تصور نمی‌کردیم، چرا که علوم انسانی همواره نیازمند استفاده از خلاقیت ناب است.
1.1 تاریخچه پی‌اچ‌پی
در زمان ابتدای ظهور اینترنت، همه چیز تا حدودی ساده‌تر بود. سایت‌ها تعاملی نبودند و افرادی که از این سایت‌ها بازدید می‌کردند، تجربه‌ای نسبتاً تک‌بعدی داشتند. ایجاد ساده‌ترین جنبه‌های سرگرمی برای کاربران کاری بسیار دشوار بود و در حیطه تخصص دانشمندان رایانه و متخصصین برنامه‌نویسی قرار داشت.

در این زمان بود که شخصی به نام راسموس لِردورف (Rasmus Lerdorf) وارد عرصه شد. این فرد کانادایی-گرینلندی زبان برنامه‌نویسی پی‌اچ‌پی را خلق کرد که به شیوه ساده‌ای امکان افزودن جنبه‌های تعاملی به صفحات وب را ارائه می‌کرد. این زبان جدید و جسور بود و تقریباً بی‌درنگ مورد استقبال قرار گرفت.
1.4 راه‌اندازی محیط توسعه
راه‌اندازی محیط توسعه پی‌اچ‌پی برخلاف برخی از زبان‌های برنامه‌نویسی دیگر کاملاً آسان است. در واقع بسته‌های آماده‌ای وجود دارند که تقریباً همه مراحل را برای شما انجام می‌دهند و دشواری نصب جداگانه هر یک از اجزا (PHP، MySQL و Apache) را از دوش شما بر می‌دارند.
ویندوز
ساده‌ترین روش راه‌اندازی یک محیط توسعه پی‌اچ‌پی در ویندوز به وسیله XAMPP است که طرفداران وب‌سرور آپاچی توسعه داده‌اند. این بسته شامل مای‌اس‌کیوال، یک کپی از زبان برنامه‌نویسی PHP و وب‌سرور آپاچی است. همچنین یک کنترل پنل مدیریتی و افزونه‌هایی برای SSL (پروتکل مورد استفاده برای رمزنگاری ترافیک روی یک شبکه) و همچنین ارسال ایمیل در آن وجود دارد.

XAMPP رایگان است و آن را می‌توان از سایت طرفداران آپاچی دانلود کرد. البته باید تأکید کنیم که دو نسخه از XAMPP وجود دارد. یکی از نسخه‌ها 1.8.2 است و نسخه قدیمی‌تری از زبان برنامه‌نویسی پی‌اچ‌پی را اجرا می‌کند و نسخه دیگر 1.8.3 است که نسخه کنونی PHP را اجرا می‌کند. با این‌که به شدت توصیه می‌شود آخرین نسخه را دانلود کنید، اما راهنمایی‌های ارائه شده در این نوشته بر روی هر دو نسخه قابلیت اجرا دارند.
لینوکس
راه‌اندازی محیط توسعه پی‌اچ‌پی روی لینوکس به کمی تلاش بیشتر نیاز دارد. چند سیستم‌عامل وجود دارند که زیر عنوان لینوکس قرار می‌گیرند. اما هر یک از این سیستم‌عامل‌ها روش نصب متفاوتی برای بسته‌های نرم‌افزاری دارند.

اگر قصد دارید از اوبونتو یا هر توزیع دیگر لینوکس که از ریپازیتری اوبونتو استفاده می‌کند، برای راه‌اندازی محیط توسعه پی‌اچ‌پی بهره بگیرید، می‌توانید دستور زیر را اجرا کنید:

دستور فوق یک سرور LAMP و همه اجزای لازم برای پیگیری این راهنما را نصب می‌کند. این فرایند در ادامه نوشته بیشتر توضیح داده شده است و در آن بخش مشخص می‌کنیم که چگونه می‌توانید یک سرور LAMP را به عنوان بخشی از پلتفرم بلاگنویسی وردپرس نصب کنید.

این دستورالعمل‌ها در توزیع‌هایی که از YUM یا RPM برای مدیریت بسته‌ها استفاده می‌کنند، کار نمی‌کنند و در چنان توزیع‌هایی از لینوکس باید به روش کاملاً متفاوتی LAMP را راه‌اندازی کنید. توصیه می‌کنیم که نگاهی به مستندات خود سیستم‌عامل داشته باشید.

با این حال گزینه دیگری نیز وجود دارد. در محیط لینوکس نیز همچون ویندوز می‌توان Xampp را دانلود کرده و روی لینوکس نصب نمود. با این حال در صورت امکان توصیه می‌شود که سرور LAMP از طریق ابزار مدیریت بسته‌ها نصب شود.

چند دلیل برای این توصیه وجود دارد. نخست این‌که بدین ترتیب LAMP بهتر با سیستم‌عامل ادغام می‌شود و آسان‌تر می‌توان آن را ارتقا داد. به علاوه نصب PHP از طریق خط فرمان رویه مناسبی برای توزیع برنامه بر روی یک سرور VPS محسوب می‌شود.
سیستم‌عامل مک‌اواس ایکس
اگر از سیستم‌عامل مک به عنوان پلتفرم اصلی خود برای توسعه برنامه‌ها استفاده می‌کنید، باید بدانید که این سیستم‌عامل انعطاف‌پذیری خوبی دارد و راه‌اندازی محیط توسعه PHP بر روی آن کاملاً آسان است.

بر روی این سیستم می‌توانید از بسته MAMP استفاده کنید که یک نسخه آن رایگان و نسخه دیگر پولی است و قیمت آن 59 دلار است. با این حال نسخه رایگان نیز برای اهدافی که در این نوشته ارائه می‌شوند، کاملاً کافی است.

برای نصب MAMP کافی است فایل فشرده آن را از آدرس فوق دانلود کرده و با دابل کلیک روی فایل pkg و فشردن دکمه continue باقی مراحل نصب را طی کنید.

اندروید
خب اندروید برای پیام فرستادن و تلف کردن زمان در بازی‌های مختلف عالی است؛ اما آیا می‌توان از آن برای توسعه نرم‌افزار استفاده کرد؟ پاسخ مثبت است
1.5 انتخاب ویرایشگر متن مناسب
احتمالاً با برخی نرم‌افزارهای واژه‌پرداز آشنایی دارید. احتمال بالایی وجود دارد که با نرم‌افزار مایکروسافت ورد، اوپن آفیس یا گوگل داکز برای نوشتن برخی مطالب، تکالیف مدرسه یا سندهای تجاری کار کرده باشید.
1.6 پیش‌نیازها
اینک آماده هستیم که به مقوله یادگیری پی‌اچ‌پی بپردازیم. اما قبل از ورود به این حوزه چند نکته هستند که باید بدانید.

پیش از این‌که وارد بحث برنامه‌نویسی پی‌اچ‌پی بشویم از شما انتظار می‌رود که با نحوه ساختاربندی یک وب‌سایت در زبان HTML آشنا باشید. البته اگر فرق تگ <p> و تگ <span>را نمی‌دانید می‌توانید برای آشنایی ابتدایی با HTML از «آموزش طراحی وب با HTML – مقدماتی» استفاده کنید. حتی اگر حس می‌کنید آشنایی اندکی با Html دارید، بهتر است ابتدا این آموزش را بگذرانید و سپس وارد موضوع برنامه‌نویسی با PHP بشوید.

همچنین می‌توانید از «آموزش طراحی وب با HTML – تکمیلی» برای افزودن بر اطلاعات خود در مورد زبان برنامه‌نویسی HTML به خصوص نسخه 5 استفاده کنید. باید بدانید که هر چقدر اطلاعات شما در مورد HTML بیشتر باشد برنامه‌نویس موفق‌تری در زبان پی‌اچ‌پی خواهید بود.
2. Hello World
زمان آشنایی با پی‌اچ‌پی فرارسیده است و برای این آشنایی چه چیزی بهتر از نوشتن یک برنامه سنتی Hello World است؟

اما در ابتدا باید بدانیم که چگونه می‌توانیم فایل‌های پی‌اچ‌پی را ذخیره کنیم. فایل‌های پی‌اچ‌پی یک وب‌سایت در محلی به نام ‘Document Root’ یا ریشه سند ذخیره می‌شوند. که گرچه تا حدودی پیچیده به نظر می‌رسد؛ ولی کاملاً آسان است. معنی این ریشه سند یک دایرکتوری است که هرچه در آن ذخیره شود برای هر کسی که از آدرس آی‌پی رایانه بر روی شبکه و به وسیله مرورگر وب بازدید می‌کند، در دسترس خواهد بود.

موقعیت ریشه سند بسته به این‌که چه محیطی برای توسعه پی‌اچ‌پی ایجاد کرده‌اید، متفاوت خواهد بود. اگر از MAMP روی مک استفاده می‌کنید می‌توانید آن را در آدرس /Applications/MAMP/htdocs ببینید. اگر سرور LAMP را روی لینوکس و با استفاده از ابزار مدیریت بسته نصب کرده‌اید، در این صورت دایرکتوری ریشه سند احتمالاً در /var/www خواهد بود. بر روی XAMPP دایرکتوری ریشه در آدرس /C:/xampp/htdocs قرار دارد.

زمانی که پوشه ریشه سند را یافتید یک فایل به نام index.php ایجاد کنید و خطوط زیر را به آن اضافه کنید.

1
2
3
4
5
6
7
8
9

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Microblogging Site</title>
</head>
<body>
</body>
</html>

 

با این‌که چیز خاصی در این کد دیده نمی‌شود؛ اما در واقع اسکلت یک وب‌سایت در آن نوشته شده است. این صفحه اصلی وب‌سایت در آدرس ‘localhost’ قابل مشاهده است. برخی اوقات لازم است که شماره پورت را که معمولاً 80، 8888، یا 8080 است را نیز پس از آدرس فوق وارد کید. این شماره‌های پورت بسته به محیط توسعه‌ی پی‌اچ‌پی که استفاده می‌کنید، متغیر هستند. اگر مطمئن نیستید به مستندات بسته توسعه خود مراجعه کنید.

اینک نخستین خطوط پی‌اچ‌پی را می‌نویسیم. کد زیر را بین تگ‌های <body> و </body> بنویسید.

1

<?php echo(Hello World!);?>

 

کد فوق را کمی بیشتر باز می‌کنیم. همه کدهای PHP باید بین دو عبارت php؟> و <? نوشته شوند. اگر چنین کاری صورت نگیرد، وب‌سرور آن‌ها را اجرا نمی‌کند. سپس عبارت echo را داریم که همان‌طور که حدس زده می‌شود، محتوایی را در مرورگر نمایش می‌دهد. در نهایت خود محتوایی که قرار است نمایش یابد را می‌بینیم. لازم به ذکر است که پرانتزها (در اغلب موارد) هنگام فراخوانی یک تابع اختیاری هستند.

وقتی عبارت echo پایان یافت آن را با یک نقطه‌ویرگول (;) می‌بندیم. اگر این نقطه‌ویرگول جا بیفتد، کد اجرا نمی‌شود.

اگر کد شما به طور صحیحی اجرا شود، در مرورگر وب خود عبارت Hello World را خواهید دید.

2.1 آیا لازم است کدهای پی‌اچ‌پی درون HTML قرار گیرند؟
پاسخ منفی است.
2.2 مفاهیم اصلی زبان پی‌اچ‌پی
متغیرها
متغیرها مفهومی هستند که تقریباً در هر زبان برنامه‌نویسی وجود دارند. از آن‌ها برای ذخیره کردن یک مقدار استفاده می‌شود. این مقدار را بعدتر می‌توان بازیابی، مورد استفاده و تغییر قرار داد.

در برخی زبان‌های برنامه‌نویسی تعیین کردن یک مقدار برای متغیر الزامی است. مثلاً در زبان‌های C++ ،C#، C و جاوا تعیین مقدار متغیر پیش از استفاده از آن ضروری است و شکلی شبیه به مثال زیر دارد:

اگر با جاوا اسکریپت آشنایی داشته باشید، می‌دانید که متغیرها با کلیدواژه var اعلان می‌شوند.

در زبان پی‌اچ‌پی متغیرها با استفاده از نماد دلار ($) اعلان می‌شوند.

در متغیرهای پی‌اچ‌پی نمی‌توان از عدد یا کاراکترهای خاص به جز کاراکتر (_) در ابتدای نام متغیر استفاده نمود. به علاوه نام متغیر نمی‌تواند this باشد چون این عبارت جز کلیدواژه‌های رزرو شده خود زبان است.
عبارت‌های if
عبارت‌های if بسیار کارآمد هستند. این عبارت‌ها امکان اجرای یک کد در زمان برآورده شدن یک شرط خاص را ایجاد می‌کنند. کد زیر را در نظر بگیرید:

1
2
3
4
5
6
7
8

$x = 5;
if ($x == 4) {
echo(Hello World);
} elseif ($x == 3) {
echo(Hello Dave);
} else {
echo(Hello Brian);
}

 

در کد فوق، شرط اولی که بررسی می‌شود این است که آیا x$ برابر چهار است یا نه (به علامت‌های دوگانه مساوی توجه کنید). چون چنین شرطی برقرار نیست، مفسر کد پی‌اچ‌پی به عبارت شرطی دوم نگاه می‌کند که آیا x$ برابر 3 است یا نه؟ اگر چنین نباشد به عبارت آخر می‌رود که نوشته «Hello Brian» را نمایش می‌دهد و در این صورت هیچ یک از شرط‌ها برقرار نشده‌اند.

با افزودن! به ابتدای یک متغیر در عبارت if می‌توان بررسی کرد که آیا یک متغیر خالی است یا نه (چنین متغیری null یا null value نامیده می‌شود). برای مثال:

1
2
3
4
5

if (!$x){

echo(x is empty);

}

 

عبارت‌های while
عبارت‌های while باعث اجرای مکرر کد تا زمان برقراری یک شرط خاص می‌شوند. کد زیر را در نظر بگیرید:

1
2
3
4
5

$x = 10;
while ($x > 1) {
echo($x);
$x = $x - 1;
}

 

کد فوق به مقدار x$ نگاه می‌کند و اگر این مقدار بزرگ‌تر از 1 باشد، مقدار متغیر x$ را نمایش می‌دهد؛ در غیر این صورت یکی از آن کم می‌کند. کد فوق این کار را تا زمانی که شرط x > 1 $ برقرار است، تکرار می‌کند.
حلقه‌های For
حلقه‌های For مفهومی در برنامه‌نویسی هستند که اغلب افراد مبتدی از دیدن آن‌ها وحشت می‌کنند، در حالی که اصولاً نباید چنین حالتی وجود داشته باشد. با این‌که آن‌ها ممکن است کاملاً پیچیده به نظر برسند؛ اما درک آن‌ها وقتی تجزیه می‌شوند، کاملاً آسان است. در مثال زیر یک حلقه for ساده نوشته‌ایم که از یک تا ده می‌شمارد.

1
2
3
4
5

for($i = 0; $i < 10; $i++){

echo($i);

}

 

در این کد چه اتفاقی می‌افتد؟ ابتدا یک متغیر با مقدار 0 ایجاد می‌شود (;i = 0 $). سپس شرط می‌کنیم اگر i$ کمتر از 10 بود به اجرای کد ادامه بده (;i < 10 $). سپس 1 را به i اضافه می‌کنیم (++i$) و محتوای درون آکولادها را اجرا می‌کنیم و به کد خط اول بر می‌گردیم.
تابع‌ها
تابع‌ها ابزار مفیدی در برنامه‌نویسی هستند. تابع‌ها امکان نوشتن کدی را ایجاد می‌کنند که منسجم است و باعث صرفه‌جویی در زمان برای نوشتن مجدد کدهایی که به صورت تکراری هستند، می‌شود. روش کار بدین ترتیب است که تابع‌ها کدهای تکراری را درون یک قطعه کد بسته‌بندی می‌کنند که در هر بار که نیاز باشد می‌توان آن را فراخوانی کرد.

ایجاد تابع نیز آسان است. در مثال زیر تابعی برای نمایش عبارت «Hello World» نوشته شده و سپس فراخوانی می‌شود. این تابع «()sayHello» نام دارد.

1
2
3

function sayHello(){
echo(Hello World);
}

 

همچنین می‌توانید مقادیری را به تابع ارسال کنید. این مقادیر پارامتر نامیده می‌شوند و درون دو پرانتز در خط نخست اعلان تابع قرار می‌گیرند. برای مثال:

1
2
3

function sayHello($hello){
echo($hello);
}

 

آن‌ها را به روش زیر می‌توان فراخوانی کرد:

در نهایت از توابع می‌توان انتظار داشت مقادیری را بازگردانند.

function returnHello

1
2
3

(){
returnHello World;
}

 

مقادیر بازگشتی را به صورت زیر می‌توان مورد استفاده قرار داد:

1
2

x = returnHello();
echo(returnHello());

2.3 حرکت روبه‌جلو
3. فرم‌ها
3.1 شیوه کار فرم‌ها در HTML3.2 ایجاد نخستین فرم
احتمالاً تاکنون با توییتر آشنا شده‌اید.

بخش اصلی هر توییت، یک کادر متنی پند خطی و یک دکمه است که این پیام را به سرورهای توییتر ارسال می‌کند. بنابراین آیا فکر می‌کنید می‌توانید نسخه‌ای شبیه به آن را در HTML ایجاد کنید؟ فرم تصویر فوق با کدی شبیه زیر قابل ایجاد است.

1
2
3
4
5
6
7
8

body>
<form action="postForm.php" method="post">
<TextArea name="microBlog" id="microBlog" cols="30" rows=10">
</br>
</TextArea>
<input type="submit">
</form>
</body>
3.3 مدیریت ورودی‌ها در پی‌اچ‌پی
در این بخش از راهنمای خود نگاهی خواهیم داشت به این‌که چگونه می‌توانیم ورودی فرم‌ها را دریافت کنیم و سپس آن‌ها را روی صفحه نمایش دهیم. روش حفظ مقادیر ورودی و ذخیره‌سازی آن‌ها در پایگاه داده در بخش‌های بعدی بررسی می‌شود.

برای این کار باید فایل podtForm.php را در ریشه سند وب‌سایت ایجاد کنیم. سپس خطوط کد زیر را به آن اضافه می‌کنیم.

1
2
3
4

<?php
$microBlog = $_POST['microBlog'];
echo $microBlog;
?>
 

4. پایگاه‌های داده

4.3 روش اشتباه کوئری زدن به دیتابیس
سؤالی که در این بخش ایجاد می‌شود این است که چگونه می‌توانیم یک پست را درون پایگاه داده درج کنیم. روش معمولی انجام این کار در php چیزی مانند زیر است:

ابتدا باید یک اتصال به سرور با استفاده از نام میزبان (hostname)، رمز عبور پایگاه داده و نام پایگاه داده ایجاد کرده و آن را به یک شی انتساب دهیم. در مثال فوق ما آن را conn$ نام‌گذاری کرده‌ایم.

سپس کوئری دیتابیسی را که می‌خواهیم تعریف می‌کنیم.

و در نهایت اتصال به پایگاه داده را می‌بندیم

اما اشکال این کار کجاست. اشکال رویه فوق این است که بر روی فرضیه‌ای استوار شده است که چندان پایدار نیست. فرضیه این است که به همه ورودی‌های پایگاه داده می‌توان اعتماد کرد.

در همه موارد چنین وضعیتی وجود ندارد. اگر دقت کافی به کار نگیرید، این احتمال وجود دارد که برخی کدهای اس‌کیوال مخرب وارد پایگاه داده شوند و در نتیجه باعث نشت داده‌ها یا تغییر دادن رکوردهای ذخیره شده درون پایگاه داده شوند.

شبکه‌ی اجتماعی LinkedIn تجربه تلخی در این خصوص داشت. عدم دقت کافی به ورودی‌های پایگاه داده منجر به انتشار ناخواسته و غیرمجاز هزاران رکورد مرتبط با کاربران این وب‌سایت شد. این رخداد هزینه بسیار بالایی برای لینکدین داشت، هم با توجه به هزینه‌های مالی جبران این اشتباه و هم از دست رفتن حسن اعتماد میلیون‌ها کاربر به دلیل افشای اطلاعات شخصی افراد. چگونه می‌توانیم از یک دیتابیس به صورت امن در php استفاده کنیم؟
4.4 استفاده از MeekroDB
MeekroDB کتابخانه‌ای است که موجب تسهیل امکان تعامل با دیتابیس می‌شود و همزمان از قرار گرفتن آن در معرض تهدیدات بیرونی جلوگیری می‌کند. این کتابخانه از ابتدا برای بهبود حملات تزریق SQL طراحی شده است. استفاده غیرتجاری از آن رایگان است؛ اما اگر قصد دارید از آن برای یک پروژه تجاری استفاده کنید، باید هزینه‌ای برای لایسنس پرداخت کنید.

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

اینک به ویرایشگر متنی مراجعه کنید. فایل postForm.php را باز کنید و خطوط کد زیر را به آن اضافه کنید.

1
2
3
4

require_once 'meekrodb.2.2.class.php';
DB::$user = 'user';
DB::$password = 'password';
DB::$dbName =database';

 

مقادیر ‘user’, ‘password’ و ‘database’ را بر اساس مقادیر واقعی نام کاربری، رمز عبور و نام دیتابیس خود وارد کنید.

اینک زمان درج پست‌ها در دیتابیس فرا رسیده است. خطوط کد زیر را به فایل اضافه کنید.

1
2
3
4
5

DB::debugMode();
$microBlog = $_POST['microBlog'];
DB::insert('MicroBlog', array(
'post' => $microBlog)
);

 

کد فوق را توضیح می‌دهیم. بخش ()DB::debugMode در صورتی که کاری را اشتباه انجام دهیم، خطایی تولید می‌کند. در نتیجه قرار دادن آن در کد بسیار کارآمد است، زیرا فرایند توسعه را آسان‌تر می‌سازد.

بخش DB::insert زمانی فراخوانی می‌شود که باید یک یا چند آیتم در پایگاه داده درج شوند. ‘MicroBlog’ به نام جدول مربوطه در دیتابیس اشاره دارد و ‘post’ حاوی پیامی است که در وب‌سایت ما پست شده است.

می‌توانید با باز کردن PHPMyAdmin ببینید که پست‌های ما به دیتابیس رسیده‌اند.

اگر از مای‌اس‌کیو‌ال روی لینوکس استفاده می‌کنید و آن را از طریق ابزار مدیریت بسته‌ها نصب کرده‌اید، می‌توانید مای‌اس‌کیو‌ال را از پنجره ترمینال باز کنید و دستورهای زیر را اجرا کنید.

1
2

Use MicroBlog;
Select * from MicroBlog;

 

می‌بینید که کار آسانی است. در مرحله بعد به نمایش پست‌ها در صفحه اصلی وب‌سایت می‌پردازیم. مطمئن باشید که این کار نیز چندان دشوار نیست.
5. دریافت محتوا از پایگاه داده
در بخش قبل میکرودی‌بی را معرفی کردیم که کتابخانه‌ای برای پایگاه داده است که امکان تعامل امن با پایگاه داده مای‌اس‌کیو‌ال را در چارچوب برنامه php ممکن می‌سازد.

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

می‌دانیم که می‌توان از زبان SQL در پایگاه داده مای‌اس‌کیو‌ال برای کوئری زدن به پایگاه داده استفاده کرد. با این‌که میکرودی‌بی امکان درج محتوا در پایگاه داده را بدون استفاده از SQL فراهم کرده است، اما برای بازیابی رکوردها باید از مقداری اس‌کیوال استفاده کنید.
5.1 انتخاب کردن و ارائه نتایج
دستوری که به این منظور استفاده می‌شود ‘Select Statement’ است. ما قبلاً از آن برای دیدن این‌که فایل‌ها در پایگاه داده قرار گرفته‌اند یا نه، استفاده کرده‌ایم. یک بار دیگر از آن استفاده می‌کنیم.

در کد زیر در بین دو تگ php؟> و <? خطوط کد زیر را درج کرده‌ایم:

1
2
3
4
5
6
7
8
9
10

<?php
require_once 'meekrodb.2.2.class.php';
DB::$user = 'root';
DB::$password = 'root';
DB::$dbName = 'MicroBlog';
$results = DB::query("SELECT post FROM MicroBlog");
foreach ($results as $row){
echo "<div class='microBlog'>". $row['post']. "</div>";
}
?>

 

نگاهی دقیق‌تر به کد فوق خواهیم داشت. می‌دانیم که پنج خط نخست چه کار می‌کنند. قبلاً آن‌ها را به عنوان بخشی از کد درج پست در پایگاه داده دیده‌ایم.

این خط همه پست‌ها را از جدول ‘MicroBlog’ انتخاب می‌کند و سپس آن‌ها را به متغیر results$ کپی می‌کند.

حالا روند کار جالب‌تر می‌شود. پس متغیر results$ حاوی چند آیتم است. این بدان معنی است که می‌توانیم با چیزی که تقریباً شبیه حلقه‌های for است و قبلاً در این نوشته معرفی کرده‌ایم، آیتم‌های این متغیر را یک‌به‌یک بررسی کنیم.

1
2
3

foreach ($results as $row){
echo "<div class='microBlog'>". $row['post']. "</div>";
}

 

در کد فوق هر یک از آیتم‌های متغیر results$ را یک‌به‌یک بررسی می‌کنیم و آن‌ها را به یک متغیر نگاشت می‌کنیم. سپس آن‌ها را بین دو تگ ‘div’ نمایش می‌دهیم. این کار امکان کپسوله سازی هر پست و اعمال استایل‌بندی‌های خاص به هر یک را به دست می‌دهد.

البته در تصویر فوق استایل‌بندی خاصی مشاهده نمی‌کنیم. در ادامه نوشته در این مورد بیشتر توضیح می‌دهیم.
5.2 استایل‌بندی
یک فایل جدید به نام ‘style.css’ ایجاد کنید. خطوط کد HTML زیر را بین دو تگ ‘Head’ در آن وارد کنید.

اینک زمان آن رسیده است که هر پست را به طرز متفاوت و قابل‌توجهی نمایش دهیم. در فایل ‘style.css’ خطوط کد زیر را وارد کنید.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

body {
background-color: #99CCFF;
}
form {
text-align: center;
margin-left: 300px;
margin-right: 300px;
}
.microBlog {
text-align: center;
margin-left: 300px;
margin-right: 300px;
margin-bottom: 10px;
border-style:solid;
border-width:5px;
}

 

قصد نداریم کد فوق را خط به خط توضیح دهیم، چون احتمالاً با توجه به اطلاعاتی که تا اینجای نوشته کسب کرده‌اید می‌توانید با خواندن آن‌ها متوجه کاری که انجام می‌دهند بشوید. به هر پست یک فاصله (padding) داده شده و در وسط صفحه نمایش قرار گرفته است. همچنین به آن یک حاشیه (boarder) داده شده و با مرکز صفحه نمایش هم‌راستا شده است.

رویه فوق منجر به تولید نمایش زیر شده است.

اینک در بخش نهایی آموزش خود قصد داریم همه‌ چیزهایی را که آموخته‌ایم یک‌جا گردآوری کنیم و ببینیم چگونه می‌توانیم بحث ورود (login) را مدیریت کنیم.
6. ورود و احراز هویت
تصور کنید بخواهیم فقط یک نفر خاص بتواند پست‌هایی را روی وب‌سایت ما ارسال کند. می‌توان آن را به یک توییتر خیلی شخصی تشبیه کرد.

6.1 جدول کاربران
نخست یک جدول برای مدیریت اطلاعات ورود ایجاد می‌کنیم. این جدول دو فیلد خواهد داشت. فیلد نخست برای نام کاربر و فیلد دوم برای رمز عبور. این وضعیت را در زبان SQL به صورت زیر می‌توان نوشت:

1
2
3
4
5

CREATE TABLE Credentials (
username varchar(255),
password varchar(255),
PRIMARY KEY (username)
);

 

همانند قبل این کد را روی پایگاه داده از طریق ترمینال یا PHPMyAdmin اجرا می‌کنیم.

6.2 جلسات session) PHP)
اینک باید بحث ورود و ثبت‌نام را مدیریت کنیم. این کار با استفاده از مفهومی به نام جلسه‌های PHP انجام می‌گیرد. روش انجام این کار تقریباً ساده است. چند متغیر وجود دارند که در سراسر یک برنامه وب استفاده می‌شوند و این متغیرها را می‌توان در حالت حضور یا عدم حضور، بسته به این‌که کاربر وارد وب‌سایت شده یا نه قرار داد.

پیش از این‌که بتوانید جلسه‌ها را مدیریت کنید، نخست باید یک جلسه را ایجاد کنید. خط کد زیر را به ابتدای فایل index.php اضافه کنید.

این خط در ابتدای هر فایلی که به جلسه‌ها دسترسی دارد دیده می‌شود.

اینک باید مطمئن شویم که دکمه ارسال پست تنها برای افرادی قابل مشاهده است که وارد وب‌سایت شده‌اند. فایل فرمی را که قبلاً ایجاد کردیم به صورت زیر تغییر دهید.

1
2
3
4
5
6
7
8
9

<?php if(isset($_SESSION[loggedin])){
echo<form action="postForm.php" method="post">
<TextArea name="microBlog" id="microBlog" cols="30" rows="10">
</TextArea>
</br>
<input type="submit">
</form>;
}
?>

 

SESSION[‘loggedin’]_$ یک متغیر جلسه است. زمانی که این متغیر تعیین شود، کاربر قادر به مشاهده فرم مورد استفاده برای نوشتن پست خواهد بود. در ادامه بخش‌های دیگری به آن می‌افزاییم.

1
2
3
4
5
6
7

else {
echo<form action=login.php" method=“post”>
Username: <input type=“text" name=usernameid="username" /> </br>
Password: <input type=text" name=“password” id="password" />
<input type="submit">
</form>;
}

 

در حال حاضر وقتی به آدرس localhost/index.php بروید، می‌بینید که دیگر نمی‌توانید هیچ پستی ارسال کنید و از شما خواسته می‌شود که وارد وب‌سایت شوید. پس کد ما کار می‌کند.

اما در ابتدا باید حسابی داشته باشیم تا بتوانیم با آن وارد وب‌سایت شویم. پس خطوط کد زیرا را به صفحه index اضافه می‌کنیم.

1
2
3
4
5

if (isset($_SESSION['loggedin'])){
echo '<a rel="nofollow" href="logout.php">Log Out</a>';
} else {
echo '<a rel="nofollow" href="register.php">Register</a>';
}

 

اگر کاربر وارد وب‌سایت شده باشد گزینه‌ای برای خروج مشاهده می‌کند. همچنین اگر کاربر وارد وب‌سایت نشده باشد، گزینه‌ای برای ثبت‌نام نیز نمایش می‌یابد.

اینک باید یک فرم ثبت‌نام ایجاد کنیم. فایل جدیدی به نام register.php ایجاد می‌کنیم و کدهای زیر را به آن اضافه می‌کنیم:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

<?php session_start();?>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Register</title>
<link rel="stylesheet" type="text/css" rel="nofollow" href="style.css">
</head>
<body>
<h2>Register</h2>
<form action=registerForm.php" method=“post”>
<p>Username: <input type=“text" name=usernameid="username"></p>
<p>Password: <input type=text" name=“password” id="password"></p>
<input type="submit">
</form>
</body>
</html>

 

همزمان کد زیر را به فایل style.css اضافه کنید.

1
2
3

h2 {
text-align: center;
}

 

6.3 ثبت‌نام کاربران
اینک باید بخش منطقی ثبت‌نام یک کاربر را بنویسیم. فایل جدیدی به نام registerForm.php ایجاد می‌کنیم و خطوط کد زیر را در آن قرار می‌دهیم:

1
2
3
4
5
6
7
8
9
10
11
12
13
14

<?php
require_once 'meekrodb.2.2.class.php';
DB::$user = 'root';
DB::$password = 'root';
DB::$dbName = 'MicroBlog';
$username = $_POST['username'];
$password = $_POST['password'];
$hash = password_hash($password, PASSWORD_DEFAULT);
DB::insert('Credentials', array(
'username' => $username,
'password' => $hash
));
header('Location: http://localhost:8888/index.php');
?>

 

بخش زیادی از این کد باید برای شما آشنا باشد، اما بخش‌های جدیدی نیز در آن وجود دارند. این بخش‌ها را در ادامه توضیح می‌دهیم.

امنیت همیشه باید در اولویت یک توسعه‌دهنده برنامه باشد. همیشه این احتمال وجود دارد که بر اثر یک خطای امنیتی اطلاعات مشتری‌ها درز کند که به هیچ وجه واقعه خوشایندی محسوب نمی‌شود.

از آنجایی که کاربران معمولاً از رمزهای عبور مشابه استفاده می‌کنند، اگر وب‌سایت شما هک شود و هکر به رمزهای عبور کاربران دسترسی پیدا بکند، ممکن است منجر به این وضعیت شود که حساب‌های کاربری این افراد در وب‌سایت‌های دیگر نیز در معرض خطر قرار بگیرد.

هَش کردن رمزهای عبور امکان رمزنگاری رمزهای عبور با استفاده از یک الگوریتم رمزگذاری را امکان‌پذیر می‌کند و بدین ترتیب بازگرداندن آن‌ها به وضعیت اولیه را به کاری بسیار دشوار تبدیل می‌کند. این کار را با استفاده از یک خط کد در PHP می‌توان انجام داد.

با این حال این وضعیت نیز کافی نیست و به رمزهای عبور باید نمک (Salt) نیز زد! شاید بپرسید معنی این حرف چیست؟ در واقع این هم یک مرحله دفاعی بیشتر برای جلوگیری از موفقیت هکرها است. با افزودن Salt به پسوردهای هش شده در واقع امکان رمزگشایی آن‌ها به طور کامل از بین می‌رود. توضیح دلایل فنی این وضعیت از حوصله این نوشته خارج است؛ اما برای توضیحات بیشتر می‌توانید به «آموزش درهم سازی در ساختمان داده» و «آموزش مروری بر توابع Hash و خطر تصادم در آن‌ها» مراجعه کنید.

در نهایت خط کد پایانی زیر را داریم:

این کد یک کار انجام می‌دهد و آن این است که مرورگر را به صفحه اصلی وب‌سایت هدایت می‌کند. این کار بسیار ساده است.
6.4 ورود به وب‌سایت
یک فایل به نام ‘login.php’ ایجاد کنید و خطوط کد زیر را در آن وارد نمایید.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

<?php
session_start();
ob_start();
require_once 'meekrodb.2.2.class.php';
DB::$user = 'root';
DB::$password = 'root';
DB::$dbName = 'MicroBlog';
$username = $_POST['username'];
$password = $_POST['password'];
$result = DB::queryFirstRow("SELECT * FROM Credentials where username = %s", $username);
$hash = $result['password'];
if (password_verify($password, $hash)) {
$_SESSION['loggedin'] = 1;
header('Location: http://localhost:8888/');
} else {
echo "Login failed";
}
?>

 

همانند قبل چیز ناآشنایی در این کد به چشم نمی‌خورد. DB::queryFirstRow را قبلاً معرفی کرده‌ایم. با این حال کاملاً مشخص است که این کد چه کار انجام می‌دهد و نخستین ردیف پایگاه داده را بازیابی می‌کند. این روش بسیار سریع‌تر از DB::query است و یک شی ایجاد می‌کند که لازم نیست حلقه For را روی آن اجرا کنیم.

مفهوم دیگری که معرفی شده است تابع تأیید اعتبار رمز عبور (()password_verify) است. این تابع امکان مقایسه رمزهای عبور هش شده و نشده را فراهم می‌کند و می‌توان بررسی کرد که با هم مطابقت دارند یا نه. اگر دو رمز عبور با هم منطبق باشند در این صورت مقدار متغیر SESSION[‘loggedin’]_$ را به یک واحد (در این مورد مثلاً 1) تنظیم می‌کنیم و سپس کاربر را به صفحه اصلی وب‌سایت هدایت می‌کنیم. در آن صفحه امکان خروج از وب‌سایت و نوشتن پست وجود دارد.

اینک می‌توانیم با بررسی قابلیت ورود به وب‌سایت و ارسال پست برنامه خود را تست کنیم.

6.5 خروج از وب‌سایت
خروج از وب‌سایت کاملاً آسان است. یک فایل جدید به نام logout.php ایجاد کنید. درون این فایل کد زیر را قرار دهید:

1
2
3
4
5

<?php
session_start();
session_destroy();
header('Location: http://localhost:8888/');
?>

 

در کد فوق جلسه‌ای که متغیر loggedin درون آن قرار گرفته بود تخریب می‌شود و کاربر به طور عملی از وب‌سایت خارج می‌شود. زمانی که متغیر فوق از بین برود کاربر دوباره به صفحه اصلی هدایت می‌شد.
7. نتیجه‌گیری و معرفی منابعی برای مطالعه بیشتر
امیدواریم از خواندن این راهنمای جامع زبان برنامه‌نویسی PHP استفاده کرده باشید. شاید فکر کنید این نوشته خیلی کوتاه بوده یا در جای نامناسبی تمام شده است. اما باید توجه داشته باشید که این نوشته تنها آغازی برای ایجاد انگیزه در شما جهت یادگیری زبان برنامه‌نویسی PHP بوده است.

منابع:118فایل
فرادرس

پست 1 تا 1 (از مجموع 1 پست)

برای پاسخ دادن به این تاپیک باید وارد سایت شوید .