برنامهنویسی PHP و هر آنچه برای شروع باید بدانید – آموزش جامع


در این نوشته تلاش داریم راهنمای فشرده ولی جامعی در خصوص زبان برنامهنویسی PHP از معرفی و تاریخچه آن تا مراحل نصب و مفاهیم برنامهنویسی به شما خواننده عزیز ارائه دهیم. یکی از کاربردهای PHP در آموزش برنامه نویسی USSD است. مطالب این نوشته در 7 بخش کلی مقدمه، نخستین برنامه (Hello World)، فرمها، پایگاههای داده، دریافت محتوا از پایگاهداده، احرار هویت و نتیجه گیری تنظیم شده است. اگر مایل به یادگیری زبان PHP هستید، حتما با ما در این نوشته همراه باشید.
1. مقدمه
شاید شما نیز جزو آن دسته از افراد باشید که در زمان مدرسه به درس هنر و کلاً علوم انسانی علاقه زیادی داشتهاید. برخی افراد فکر کنند که چنین موضوعاتی ماهیت مبهم و پیشپاافتادهای دارند اما در هر صورت افراد زیادی به چنین موضوعاتی علاقهمند هستند، چون دوست دارند خلاق باشند.
مسلماً هیچ یک از ما در دوران تحصیل، کلاسهای درس فناوری اطلاعات را همانند کلاسهای ادبیات و هنر تصور نمیکردیم، چرا که علوم انسانی همواره نیازمند استفاده از خلاقیت ناب است.
البته این یک تصور اشتباه است، چرا که یادگیری برنامهنویسی تا حدودی شبیه کلاسهای خلاقانه ادبیات است. در ابتدا یک ایده وجود دارد و شما میتوانید هر نوع که دوست دارید آن را اجرایی کنید. این خلاقیت محض است؛ اما به جای اینکه حس و حال درونی خود را بر روی کاغذ بیاورید، به یک رایانه دستوراتی میدهید تا خواستههای شما را اجرا کند. اگر بتوانید ایده خود را تصور کنید و همچنین بتوانید آن را طوری توصیف کنید که رایانه بتواند درک کند، در این صورت میتوانید آن را بسازید.
روشی که ما با رایانه صحبت میکنیم، یک روش انتزاعی به نام زبان برنامهنویسی است. تعداد بسیار زیادی زبان برنامهنویسی مختلف وجود دارند که هر یک مزایا و معایب و خصوصیات عجیب و غریب خود را دارند. همه این زبانها ماهیت ناکاملی دارند؛ اما افراد مختلف از آنها برای ایجاد چیزهایی خارقالعاده و شگفتانگیز استفاده میکنند. یکی از این زبانها، پیاچپی (PHP) نام دارد.
شاید قبلاً نام این زبان را شنیده باشید. این همان زبانی است که فیسبوک، وردپرس و ویکیپدیا برای خدمترسانی به میلیاردها درخواست روزانه استفاده میکنند. پیاچپی یک زبان سنتی برای تدریس برنامهنویسی وب محسوب میشود. با اینکه این زبان برنامهنویسی ساده و زیباست اما در عین حال بسیار قدرتمند است.
در این نوشته تلاش خواهیم کرد با کمک هم این زبان را یاد گرفته و نحوه استفاده از آن برای ساخت یک وبسایت را بیاموزیم.
شاید در ذهن خود یک ایده استارتاپی عالی دارید؛ اما نمیدانید چگونه باید آن را اجرا کنید. آیا میخواهید زبانی بیاموزید که بتوانید با آن امکانات وردپرس را گسترش دهید؟ شاید فقط میخواهید مهارتهای مورد نیاز برای باسواد بودن را در روزگاری که دانش، مبتنی بر فناوری مدرن است، کسب کنید. انگیزه شما هر کدام از موارد فوق که باشد میتوانید از این نوشته برای یادگیری مفاهیم اساسی زبان برنامهنویسی پیاچپی استفاده کنید. اما در ابتدا کمی به تاریخچه این زبان میپردازیم.
1.1 تاریخچه پیاچپی
در زمان ابتدای ظهور اینترنت، همه چیز تا حدودی سادهتر بود. سایتها تعاملی نبودند و افرادی که از این سایتها بازدید میکردند، تجربهای نسبتاً تکبعدی داشتند. ایجاد سادهترین جنبههای سرگرمی برای کاربران کاری بسیار دشوار بود و در حیطه تخصص دانشمندان رایانه و متخصصین برنامهنویسی قرار داشت.
در این زمان بود که شخصی به نام راسموس لِردورف (Rasmus Lerdorf) وارد عرصه شد. این فرد کانادایی-گرینلندی زبان برنامهنویسی پیاچپی را خلق کرد که به شیوه سادهای امکان افزودن جنبههای تعاملی به صفحات وب را ارائه میکرد. این زبان جدید و جسور بود و تقریباً بیدرنگ مورد استقبال قرار گرفت.
راسموس لردورف نمیتوانست تأثیر ایده خود را بر روی دنیا تا این حد پیشبینی کند. جامعهای از برنامهنویسان و کمپینهای مختلف ایجاد شد که زمان و پول خود را صرف توسعه این زبان نمودند. پیاچپی به کندی اما به طور استوار تبدیل به یک چالش جدی برای شرکت Sun (شرکت اورکل فعلی) و مایکروسافت شد که قصد داشتند با پلتفرمهای جاوا و asp بر بازار توسعه وب سلطه یابند. ظهور زبان برنامهنویسی پیاچپی را میتوان یک شروع طوفانی توصیف کرد.
از آن زمان ۲۰ سال گذشته است و این مدت در دنیای رایانه، زمان بسیار زیادی محسوب میشود. از زمان ورود زبان برنامهنویسی پیاچپی این زبان به روش ترجیحی میلیونها برنامهنویس تبدیل شده است که از آن در شغلهای خود استفاده میکنند تا ایدههای خود را عملی سازند. پیاچپی اینک به محور دنیای دیجیتال تبدیل شده است.
شما نیز میتوانید به خیل میلیونی برنامهنویسان زبان پیاچپی تبدیل شوید. کافی است در ادامه این نوشته با ما همراه باشید.
1.2 در این نوشته چه خواهید آموخت؟
با اینکه این نوشته چندان طولانی نیست؛ اما مطالب زیادی را در آن ارائه کردهایم. در بخشهای بعدی یاد میگیریم که چگونه برنامه سادهای شبیه به توییتر بسازیم.
با اینکه برنامه ما همه ویژگیهای توییتر را نخواهد داشت و به اندازه این سایت میکروبلاگینگ محبوب صیقل یافته نیست؛ اما میتوانید در این برنامه وارد حساب خود شده و پیامهای ۱۴۰ کاراکتری را پست کنید.
1.3 همه چیز در مورد LAMP
تا به اینجا دانستیم که پیاچپی یک زبان خارقالعاده برای ایجاد صفحات وب تعاملی است. اما هنوز نگفتهایم که چگونه میتوانیم این کد را به یک محصول واقعی تبدیل کنیم. در ادامه به این موضوع خواهیم پرداخت.
کدهای پیاچپی در اغلب موارد بر روی یک وبسرور اجرا میشوند. وبسرور مسئول ارسال صفحههای وب به هر کسی است که وارد یک نام دامنه یا آدرس آیپی خاص شده است.
متداولترین انتخاب برای وبسرور، استفاده از نرمافزار محبوب آپاچی است. این پروژه نرمافزاری اوپنسورس و چند پلتفرمی بخش عمده سایتهای اینترنتی دنیا را تشکیل میدهد. به عبارت دقیقتر ۴۵ درصد از همه وبسایتهای روی اینترنت با استفاده از وبسرور آپاچی صفحههای خود را سرویسدهی میکنند. با این حال باید اشاره کنیم که وبسرورهای دیگری مانند LightTTPD و IIS مایکروسافت نیز وجود دارند.
عبارت LAMP معادل اختصاری واژههای Linux ،Apache ،MySQL و PHP است که حرف دوم آن اشاره به وبسرور آپاچی دارد. اینک میدانید که PHP چیست. با آپاچی نیز آشنا شدید. احتمالاً در مورد لینوکس نیز چیزهایی شنیدهاید. اما در مورد حرف M یعنی مایاسکیوال چه میدانیم؟
مسلماً همه وبسایتها مجبور هستند اطلاعاتی را که برنامه تحت وب تولید میکند، ذخیرهسازی نمایند. قطعاً بهتر است که این اطلاعات به روشی ساختیافته، امن و سازماندهی شده ذخیره شوند. همه اینها باعث میشود که ما به چیزی به نام پایگاه داده نیاز داشته باشیم و در اغلب موارد بهترین انتخاب برای یک پایگاه داده، استفاده از مایاسکیوال است. در این مورد در ادامه بیشتر توضیح خواهیم داد.
در نهایت در مورد لینوکس نیز کمی توضیح میدهیم. اغلب وبسایتهای پیاچپی بر روی سیستمهایی ارائه میشوند که از سیستمعامل متنباز لینوکس بهره میگیرند. با این حال لزومی نیست که از لینوکس به عنوان محیط توسعه خود استفاده کنید. همه راهنماییهایی که در این نوشته ارائه میشوند در سیستمهای ویندوز، اندروید و مک قابل پیادهسازی هستند.
داشتن سیستمعامل، آپاچی، مایاسکیوال و نصب زبان برنامهنویسی، چهار جزء اساسی برای اغلب پیکربندیهای رایج پیاچپی محسوب میشوند. در ادامه در مورد روش استفاده از این پیکربندی بیشتر توضیح میدهیم.
1.4 راهاندازی محیط توسعه
راهاندازی محیط توسعه پیاچپی برخلاف برخی از زبانهای برنامهنویسی دیگر کاملاً آسان است. در واقع بستههای آمادهای وجود دارند که تقریباً همه مراحل را برای شما انجام میدهند و دشواری نصب جداگانه هر یک از اجزا (PHP، MySQL و Apache) را از دوش شما بر میدارند.
ویندوز
سادهترین روش راهاندازی یک محیط توسعه پیاچپی در ویندوز به وسیله XAMPP است که طرفداران وبسرور آپاچی توسعه دادهاند. این بسته شامل مایاسکیوال، یک کپی از زبان برنامهنویسی PHP و وبسرور آپاچی است. همچنین یک کنترل پنل مدیریتی و افزونههایی برای SSL (پروتکل مورد استفاده برای رمزنگاری ترافیک روی یک شبکه) و همچنین ارسال ایمیل در آن وجود دارد.
XAMPP رایگان است و آن را میتوان از سایت طرفداران آپاچی دانلود کرد. البته باید تأکید کنیم که دو نسخه از XAMPP وجود دارد. یکی از نسخهها 1.8.2 است و نسخه قدیمیتری از زبان برنامهنویسی پیاچپی را اجرا میکند و نسخه دیگر 1.8.3 است که نسخه کنونی PHP را اجرا میکند. با اینکه به شدت توصیه میشود آخرین نسخه را دانلود کنید، اما راهنماییهای ارائه شده در این نوشته بر روی هر دو نسخه قابلیت اجرا دارند.
لینوکس
راهاندازی محیط توسعه پیاچپی روی لینوکس به کمی تلاش بیشتر نیاز دارد. چند سیستمعامل وجود دارند که زیر عنوان لینوکس قرار میگیرند. اما هر یک از این سیستمعاملها روش نصب متفاوتی برای بستههای نرمافزاری دارند.
اگر قصد دارید از اوبونتو یا هر توزیع دیگر لینوکس که از ریپازیتری اوبونتو استفاده میکند، برای راهاندازی محیط توسعه پیاچپی بهره بگیرید، میتوانید دستور زیر را اجرا کنید:
sudo apt-get install lamp-server^
دستور فوق یک سرور LAMP و همه اجزای لازم برای پیگیری این راهنما را نصب میکند. این فرایند در ادامه نوشته بیشتر توضیح داده شده است و در آن بخش مشخص میکنیم که چگونه میتوانید یک سرور LAMP را به عنوان بخشی از پلتفرم بلاگنویسی وردپرس نصب کنید.
این دستورالعملها در توزیعهایی که از YUM یا RPM برای مدیریت بستهها استفاده میکنند، کار نمیکنند و در چنان توزیعهایی از لینوکس باید به روش کاملاً متفاوتی LAMP را راهاندازی کنید. توصیه میکنیم که نگاهی به مستندات خود سیستمعامل داشته باشید.
با این حال گزینه دیگری نیز وجود دارد. در محیط لینوکس نیز همچون ویندوز میتوان Xampp را دانلود کرده و روی لینوکس نصب نمود. با این حال در صورت امکان توصیه میشود که سرور LAMP از طریق ابزار مدیریت بستهها نصب شود.
چند دلیل برای این توصیه وجود دارد. نخست اینکه بدین ترتیب LAMP بهتر با سیستمعامل ادغام میشود و آسانتر میتوان آن را ارتقا داد. به علاوه نصب PHP از طریق خط فرمان رویه مناسبی برای توزیع برنامه بر روی یک سرور VPS محسوب میشود.
سیستمعامل مکاواس ایکس
اگر از سیستمعامل مک به عنوان پلتفرم اصلی خود برای توسعه برنامهها استفاده میکنید، باید بدانید که این سیستمعامل انعطافپذیری خوبی دارد و راهاندازی محیط توسعه PHP بر روی آن کاملاً آسان است.
بر روی این سیستم میتوانید از بسته MAMP استفاده کنید که یک نسخه آن رایگان و نسخه دیگر پولی است و قیمت آن 59 دلار است. با این حال نسخه رایگان نیز برای اهدافی که در این نوشته ارائه میشوند، کاملاً کافی است.
برای نصب MAMP کافی است فایل فشرده آن را از آدرس فوق دانلود کرده و با دابل کلیک روی فایل pkg و فشردن دکمه continue باقی مراحل نصب را طی کنید.
همانند مواردی قبلی این امکان وجود دارد که یک محیط توسعه پیاچپی را با استفاده از XAMPP که برای مک نیز پورت شده است، راهاندازی کنید. اما مراحل این کار را بر عهده خود شما میگذاریم.
اندروید
خب اندروید برای پیام فرستادن و تلف کردن زمان در بازیهای مختلف عالی است؛ اما آیا میتوان از آن برای توسعه نرمافزار استفاده کرد؟ پاسخ مثبت است.
اگر گوشی اندرویدی شما متعلق به یکی دو سال اخیر باشد، پردازنده مرکزی آن به همان اندازه یک VPS که با بهایی زیر 10 دلار میتوان تهیه کرد، کارایی دارد. بنابراین چنین تلفن همراهی برای اجرای پیاچپی، آپاچی و مایاسکیوال به قدر کافی مناسب است.
سرورهای LAMP زیادی برای اندروید وجود دارند؛ اما Palapa Server گزینه مناسبتری محسوب میشود. این سرور بر روی یک تلبت نکسوس 7 قدیمی اجرا میشود و حتی میتوان بدون هیچ مشکلی اندروید را روی اجرا آن اجرا کرد. گرچه اندروید یک محیط توسعه ایدهآل محسوب نمیشود؛ اما توسعه به زبان پیاچپی روی آن کاملاً عملی است.
1.5 انتخاب ویرایشگر متن مناسب
احتمالاً با برخی نرمافزارهای واژهپرداز آشنایی دارید. احتمال بالایی وجود دارد که با نرمافزار مایکروسافت ورد، اوپن آفیس یا گوگل داکز برای نوشتن برخی مطالب، تکالیف مدرسه یا سندهای تجاری کار کرده باشید.
اما شاید اطلاع نداشته باشید که نمیتوان از یک واژهپرداز معمولی برای توسعه نرمافزار و وبسایت استفاده کرد. دلیل این مسئله آن است که هنگام نوشتن یک فایل در چنین نرمافزارهایی انواع قالببندیها و نشانهگذاریهای اضافی درون فایل قرار میگیرند. نتیجه کار تنها واژههایی که نوشتهاید، نیستند؛ بلکه همه قالببندیها و سبکهای مختلفی که در متن استفاده شدهاند نیز در فایل ذخیره میشوند.
در نتیجه وقتی کدی مینویسید باید از ویرایشگرهای متنی استفاده کنید. به بیان سادهتر استفاده از این نرمافزارها باعث میشود که فایلهایی که نوشتهاید به صورت متن ساده ذخیره شوند. در این فایلها تنها حروف متن ذخیره میشوند.
یکی از بهترین ویرایشگرهای متن نرمافزار Sublime Text 2 است. این ویرایشگر یک نسخه رایگان برای مدت نامشخص دارد (که گاهی اوقات در خصوص ارتقا به نسخی پولی به شما هشدار میدهد) و با توجه به امکاناتی که ارائه میکند نوشتن نرمافزار در آن به کاری لذتبخش تبدیل میشود.
این نرمافزار به طور خاص امکان هایلایت کردن سینتکس زبان پیاچپی، جاوا اسکریپت، و HTML را دارد. بدین ترتیب امکان خواندن کد بسیار راحتتر میشود. نرمافزار سابلایم تکست 2 را میتوانید در این لینک دانلود کنید و نسخههای مختلفی برای لینوکس، ویندوز و مک ارائه شده است.
اگر از اندروید استفاده میکنید، احتمالاً گزینههایی که میتوانید انتخاب کنید محدود هستند. برای انتخاب یک ویرایشگر کد مناسب میتوانید به مقاله «۷ نرمافزار برتر ویرایشگر کد برای اندروید» مراجعه کنید. یکی از نرمافزارهایی که توصیه میشود و به طور رایگان نیز از پلیاستور گوگل قابل دانلود است، ویرایشگر متنی VimTouch است. یادگیری این نرمافزار شاید کمی دشوار باشد؛ اما قطعاً ارزش صرف وقت را دارد.
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 ایجاد کنید و خطوط زیر را به آن اضافه کنید.
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Microblogging Site</title> </head> <body> </body> </html>
با اینکه چیز خاصی در این کد دیده نمیشود؛ اما در واقع اسکلت یک وبسایت در آن نوشته شده است. این صفحه اصلی وبسایت در آدرس ‘localhost’ قابل مشاهده است. برخی اوقات لازم است که شماره پورت را که معمولاً 80، 8888، یا 8080 است را نیز پس از آدرس فوق وارد کید. این شمارههای پورت بسته به محیط توسعهی پیاچپی که استفاده میکنید، متغیر هستند. اگر مطمئن نیستید به مستندات بسته توسعه خود مراجعه کنید.
اینک نخستین خطوط پیاچپی را مینویسیم. کد زیر را بین تگهای <body> و </body> بنویسید.
<?php echo(“Hello World!”);?>
کد فوق را کمی بیشتر باز میکنیم. همه کدهای PHP باید بین دو عبارت php؟> و <? نوشته شوند. اگر چنین کاری صورت نگیرد، وبسرور آنها را اجرا نمیکند. سپس عبارت echo را داریم که همانطور که حدس زده میشود، محتوایی را در مرورگر نمایش میدهد. در نهایت خود محتوایی که قرار است نمایش یابد را میبینیم. لازم به ذکر است که پرانتزها (در اغلب موارد) هنگام فراخوانی یک تابع اختیاری هستند.
وقتی عبارت echo پایان یافت آن را با یک نقطهویرگول (;) میبندیم. اگر این نقطهویرگول جا بیفتد، کد اجرا نمیشود.
اگر کد شما به طور صحیحی اجرا شود، در مرورگر وب خود عبارت Hello World را خواهید دید.
2.1 آیا لازم است کدهای پیاچپی درون HTML قرار گیرند؟
پاسخ منفی است. اگر لازم باشد کاری را برنامهنویسی کنید که نتیجه آن بیدرنگ در مرورگر وب نمایش مییابد، بهتر است آن را درون سند HTML بگنجانیم. به این کار کدنویسی درونخطی (inline) پیاچپی گفته میشود و از همین روش در کدنویسی نمایش Hello World روی صفحه استفاده کردیم.
با این حال در موارد پیچیدهتر همواره باید کد را درون سند PHP خاص خود قرار دهیم. همانند مثال قبل این فایل سند باید پسوند .php داشته باشد و همه کدها باید با بین عبارتهای php؟> و <? قرار گیرند.
2.2 مفاهیم اصلی زبان پیاچپی
پیش از اینکه بیشتر توضیح بدهیم نگاهی به برخی مفاهیم زبان برنامهنویسی PHP خواهیم داشت. با اینکه فهرست ما کامل نیست اما برای اینکه یک برنامهنویس کاربلد پیاچپی باشید کفایت میکند. پس از اینکه این فهرست مفاهیم پایه را مرور کردیم به استفاده از برخی از این مفاهیم در حوزه فرمها خواهیم پرداخت.
متغیرها
متغیرها مفهومی هستند که تقریباً در هر زبان برنامهنویسی وجود دارند. از آنها برای ذخیره کردن یک مقدار استفاده میشود. این مقدار را بعدتر میتوان بازیابی، مورد استفاده و تغییر قرار داد.
در برخی زبانهای برنامهنویسی تعیین کردن یک مقدار برای متغیر الزامی است. مثلاً در زبانهای C++ ،C#، C و جاوا تعیین مقدار متغیر پیش از استفاده از آن ضروری است و شکلی شبیه به مثال زیر دارد:
int x = 10;
اگر با جاوا اسکریپت آشنایی داشته باشید، میدانید که متغیرها با کلیدواژه var اعلان میشوند.
var x = 10;
در زبان پیاچپی متغیرها با استفاده از نماد دلار ($) اعلان میشوند.
$x = 10;
در متغیرهای پیاچپی نمیتوان از عدد یا کاراکترهای خاص به جز کاراکتر (_) در ابتدای نام متغیر استفاده نمود. به علاوه نام متغیر نمیتواند this باشد چون این عبارت جز کلیدواژههای رزرو شده خود زبان است.
عبارتهای if
عبارتهای if بسیار کارآمد هستند. این عبارتها امکان اجرای یک کد در زمان برآورده شدن یک شرط خاص را ایجاد میکنند. کد زیر را در نظر بگیرید:
$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 نامیده میشود). برای مثال:
if (!$x){ echo(“x is empty”); }
عبارتهای while
عبارتهای while باعث اجرای مکرر کد تا زمان برقراری یک شرط خاص میشوند. کد زیر را در نظر بگیرید:
$x = 10; while ($x > 1) { echo($x); $x = $x - 1; }
کد فوق به مقدار x$ نگاه میکند و اگر این مقدار بزرگتر از 1 باشد، مقدار متغیر x$ را نمایش میدهد؛ در غیر این صورت یکی از آن کم میکند. کد فوق این کار را تا زمانی که شرط x > 1 $ برقرار است، تکرار میکند.
حلقههای For
حلقههای For مفهومی در برنامهنویسی هستند که اغلب افراد مبتدی از دیدن آنها وحشت میکنند، در حالی که اصولاً نباید چنین حالتی وجود داشته باشد. با اینکه آنها ممکن است کاملاً پیچیده به نظر برسند؛ اما درک آنها وقتی تجزیه میشوند، کاملاً آسان است. در مثال زیر یک حلقه for ساده نوشتهایم که از یک تا ده میشمارد.
for($i = 0; $i < 10; $i++){ echo($i); }
در این کد چه اتفاقی میافتد؟ ابتدا یک متغیر با مقدار 0 ایجاد میشود (;i = 0 $). سپس شرط میکنیم اگر i$ کمتر از 10 بود به اجرای کد ادامه بده (;i < 10 $). سپس 1 را به i اضافه میکنیم (++i$) و محتوای درون آکولادها را اجرا میکنیم و به کد خط اول بر میگردیم.
تابعها
تابعها ابزار مفیدی در برنامهنویسی هستند. تابعها امکان نوشتن کدی را ایجاد میکنند که منسجم است و باعث صرفهجویی در زمان برای نوشتن مجدد کدهایی که به صورت تکراری هستند، میشود. روش کار بدین ترتیب است که تابعها کدهای تکراری را درون یک قطعه کد بستهبندی میکنند که در هر بار که نیاز باشد میتوان آن را فراخوانی کرد.
ایجاد تابع نیز آسان است. در مثال زیر تابعی برای نمایش عبارت «Hello World» نوشته شده و سپس فراخوانی میشود. این تابع «()sayHello» نام دارد.
function sayHello(){ echo(“Hello World”); }
همچنین میتوانید مقادیری را به تابع ارسال کنید. این مقادیر پارامتر نامیده میشوند و درون دو پرانتز در خط نخست اعلان تابع قرار میگیرند. برای مثال:
function sayHello($hello){ echo($hello); }
آنها را به روش زیر میتوان فراخوانی کرد:
sayHello(“Hello World”);
در نهایت از توابع میتوان انتظار داشت مقادیری را بازگردانند.
function returnHello
(){ return “Hello World”; }
مقادیر بازگشتی را به صورت زیر میتوان مورد استفاده قرار داد:
x = returnHello(); echo(returnHello());
2.3 حرکت روبهجلو
اینک که با مفاهیم پایه کنترل گردش برنامه در زبان پیاچپی آشنا شدیم و میتوانیم از متغیرها و توابع برای ذخیرهسازی و بازیابی مقادیر و اسنیپستها برای استفادههای آتی خود بهره بگیریم. در بخش بعد درک خود از زبان برنامهنویسی پیاچپی را با معرفی نحوه دریافت دادهها از فرمها گسترش میدهیم و نخستین بخش از شبیهسازی برنامه توییتر را کامل میکنیم.
3. فرمها
3.1 شیوه کار فرمها در HTML
فرمها همه جا هستند. وقتی یک نظر در زیر همین نوشته وبسایت فرادرس مینویسید، وقتی چیزی از یک فروشگاه اینترنتی میخرید و آدرس و اطلاعات کارت بانکی خود را در آن وبسایت وارد میکنید و هنگامی که یک پیام در نسخه وب هر پیامرسانی ارسال میکنید در واقع در حال پر کردن یک فرم هستید.
اگر فکر میکنید کد تصویر فوق تا حدودی مبهم است بهتر است آموزش html5 فرادرس را بگذرانید. گرچه این آموزش برای ادراک این راهنما ضروری نیست اما در آن نکتههای خوبی در مورد فرمها در آخرین نسخه از زبان نشانهگذاری HTML ارائه شده است.
3.2 ایجاد نخستین فرم
احتمالاً تاکنون با توییتر آشنا شدهاید.
بخش اصلی هر توییت، یک کادر متنی پند خطی و یک دکمه است که این پیام را به سرورهای توییتر ارسال میکند. بنابراین آیا فکر میکنید میتوانید نسخهای شبیه به آن را در HTML ایجاد کنید؟ فرم تصویر فوق با کدی شبیه زیر قابل ایجاد است.
body> <form action="postForm.php" method="post"> <TextArea name="microBlog" id="microBlog" cols="30" rows=“10"> </br> </TextArea> <input type="submit"> </form> </body>
اجزای کد فوق را بررسی میکنیم. یک فرم درون تگهای form محصور شده است. فرمها دو آرگومان میگیرند. آرگومان نخست یک لینک به یک فایل PHP است که فرم ما را مدیریت میکند. آرگومان دوم یک متد است و این متد شیوه ارسال دادهها به سرور وب را تعیین میکند. این دو آرگومان میتوانند از نوع post یا get باشند.
درون فرم یک عنصر TextArea وجود دارد. آیا میدانید تفاوت بین یک TextArea و عنصر ورودی چیست؟ در واقع این دو تفاوت ظریفی دارند. این دو تقریباً مفهوم مشابهی دارند؛ ولی عنصر TextArea امکان وارد کردن محتوای چندخطی را ایجاد میکند، در حالی که عنصر Input (وقتی برای تحویل یک فرم استفاده نشود) تنها یک خط نوشته میپذیرد.
از آنجا که ما میخواهیم یک نسخه شبیهسازیشده از توییتر بسازیم، از عنصر TextArea برای دریافت post استفاده میکنیم. این عنصر چند آرگومان دارد. دو آرگومان نخست به ترتیب «name» و «id» هستند که به آنها مقدار «microBlog» را میدهیم. دو آرگومان بعدی «cols» و «rows» هستند که به ترتیب مقادیر 30 و 10 دارند. این دو مقدار را میتوان تغییر داد.
در نهایت یک عنصر Input داریم. این عنصر از نوع submit است و در مرورگر به صورت یک دکمه نمایش مییابد زمانی که این دکمه زده شود محتوای فرم به فایلpostForm.php ارسال میشود.
در نهایت کد ما به صورت شکل فوق خواهد بود. گرچه زیباترین صفحه وب دنیا محسوب نمیشود، ولی فعلاً لازم نیست نگران زیبایی آن باشیم.
3.3 مدیریت ورودیها در پیاچپی
در این بخش از راهنمای خود نگاهی خواهیم داشت به اینکه چگونه میتوانیم ورودی فرمها را دریافت کنیم و سپس آنها را روی صفحه نمایش دهیم. روش حفظ مقادیر ورودی و ذخیرهسازی آنها در پایگاه داده در بخشهای بعدی بررسی میشود.
برای این کار باید فایل podtForm.php را در ریشه سند وبسایت ایجاد کنیم. سپس خطوط کد زیر را به آن اضافه میکنیم.
<?php $microBlog = $_POST['microBlog']; echo $microBlog; ?>
شاید برایتان سؤال شده باشد که $_POST در کد فوق چه نقشی دارد؟ این مفهومی است که آن را متغیر فراسراسری (super-global) مینامیم. این مفهوم ممکن است تا حدودی پیچیده به نظر بیاید، ولی چنین نیست. این مفهوم به بیان ساده به چیزی گفته میشود که هر بار هنگام اشاره به ورودی فرم باید از آن استفاده کنیم. در انتهای POST_$ ما ID ورودی فرمی را که به آن اشاره کردهایم مینویسیم. این کار درون دو آکولاد و گیومه انجام میگیرد.
محتوای microBlog به یک متغیر انتساب مییابد و سپس روی صفحه نمایش مییابد. روند کار کاملاً ساده است. در ادامه بررسی میکنیم که آیا این کد اجرا میشود یا نه.
به صفحه اصلی وبسایت خود میرویم و چیزی در فرم مینویسیم. سپس دکمه submit را میزنیم.
همانطور که میبینید ورودی ما به خودمان بازگردانده میشود. اما یک سؤال پیش میآید. اگر مرورگر را بسته و localhost/postForm.php را مجدد باز کنیم چه رخ میدهد؟
میبینیم که هیچ چیز وجود ندارد. دلیل این مسئله آن است که مقدار ورودی در هیچ کجا جز حافظه کوتاهمدت مرورگر وب ذخیره نشده است. وقتی مرورگر بسته شود، این مقادیر نیز پاک میشوند.
با این حال روش آسانی برای تضمین حفظ دادهها برای همیشه وجود دارد. این دادهها باید در یک پایگاه داده قرار گیرند. با اینکه پایگاههای داده در ابتدا چندان هیجانانگیز به نظر نمیرسند؛ اما یادگیری شیوه استفاده از آنها کاملاً آسان است.
در بخش بعدی روش ذخیرهسازی توییت ها در پایگاه داده را بررسی خواهیم کرد.
4. پایگاههای داده
پایگاههای داده بسیار محبوب هستند. از زمانی که رایانهها اختراع شدهاند، همواره به پایگاه داده برای ذخیرهسازی محتوا نیاز بوده است. هر چیزی که تصور کنید، از رمز عبوری که برای ورود به فیسبوک استفاده میشود تا پیکربندی یک رایانه، و اطلاعات حساب بانکی، همگی در یک پایگاه داده ذخیره میشوند. نسخههای اولیه پایگاههای داده بسیار ساده و محدود بودند. اما در طی زمان بسیار تکامل یافتهاند و پیشرفت کردهاند و سرعت و پایداری کارکرد آنها بهبود یافته است. همه اینها نتیجه 50 سال توسعه پایگاههای داده است.
یک روش ذخیرهسازی داده، استفاده از پایگاههای دادهای رابطهای است. این پارادایم ذخیرهسازی دادهها در دهه 1980 معرفی شده است و بر مفهوم ارتباط متقابل جداول استوار است. در این پایگاههای داده، اطلاعات در ردیفها و ستونهای جداول مختلف ذخیره میشود.
تعداد زیادی از سیستمهای مدیریت پایگاه داده وجود دارند که از این پارادایم (به نام RDBMS شناخته میشود) استفاده میکنند. از جمله آنها اوراکل (Oracle)، اماسکیوال (MsSQL)، و ماریادیبی (MariaDB) هستند. اما ما تنها به بررسی یکی از آنها یعنی مایاسکیوال (MySQL) میپردازیم.
مایاسکیوال یک سیستم مدیریت پایگاه داده مدرن است. تعداد وبسایتهایی که از آن استفاده میکنند، بسیار زیاد است. وردپرس از آن استفاده میکند و نسخههای اولیه فیسبوک نیز از آن استفاده میکردند. این پایگاه داده بر اساس پارادایم پایگاههای داده رابطهای عمل میکند.
مزیتهای پایگاه داده مایاسکیوال آن قدر زیاد هستند که نمیتوان به همه آنها اشاره کرد. مزیت نخست آن است که این پایگاه داده رایگان است. یعنی هم هزینهای ندارد و هم لایسنس استفاده از آن آزاد است. از آن بر روی هر پلتفرمی میتوان استفاده کرد و حتی به برخی سیستمعاملهای منسوخ دنیا نیز پورت شده است.
به علاوه مایاسکیوال یک بسته نرمافزاری سبک است و میتواند در اغلب سیستمهای VPS با توان پایین مورد استفاده قرار گیرد.
همچنین یادگیری آغاز کار با مایاسکیوال بسیار ساده است و حجم اطلاعات زیادی در مورد آن برای افرادی که میخواهند آن را بیاموزند، وجود دارد. برخی از منابع آموزشی آن مستندات دقیق و پرجزییاتی هستند که کاربران برایش ایجاد کردهاند.
برای تعامل با مایاسکیوال باید از زبان برنامهنویسی SQL (زبان کوئری ساختیافته) استفاده کنیم. این زبان امکان اجرای کوئریهای پیچیدهای را بر روی یک پایگاه داده فراهم میکند و ساختار آن نیز شبیه یک زبان معمولی انسانی است و نه یک زبان ماشینی. در نتیجه آغاز یادگیری آن برای مبتدیها آسان است.
اما پیش از آن که با این پایگاه داده آشنا شویم، در مورد انواع دادههای مایاسکیوال توضیح میدهیم.
4.1 انواع داده مایاسکیوال
مایاسکیوال این الزام را دارد که هر ستون در یک جدول با نوع داده مشخصی تعریف شده باشد. برای مثال نوع سن یک نفر را میتوان به صورت عددی تعریف کرد؛ در حالی که نام فرد میتواند شامل انواع مختلفی از کاراکترهای الفبایی باشد.
برای تضمین انسجام دادههای ذخیره شده در یک جدول، باید نوع دادهها از قبل مشخص شوند. با اینکه این کار تا حدودی پیچیده به نظر میرسد؛ اما مطمئن باشید که بسیار ساده است. تنها کاری که باید بکنیم این است که از قبل بدانیم که قرار است چه نوع دادههایی را در یک ستون جدول داده ذخیره کنیم.
انواع دادههای بسیار زیادی در مایاسکیوال وجود دارند. ما تنها در مورد دو مورد از آنها توضیح میدهیم که برای منظور این نوشته کفایت میکنند.
Varchar(x)
وقتی محتوایی را در پایگاه داده وارد میکنید که میتواند شامل انواع عدد، کاراکترهای خاص و حروف مختلف باشد، بهتر است از یک فیلد varchar استفاده کنید. این نوع داده میتواند طول متغیری داشته باشد. اندازه فیلد با طول بیشینه 30 کاراکتر را میتوان به صورت varchar(30) تعریف کرد.
Integer
وقتی قصد داریم اعداد را در پایگاه داده خود ذخیره کنیم، میتوانیم از این نوع داده استفاده کنیم. این نوع داده میتواند اعدادی از-2147483648 تا 2147483647 را در خود جای دهد. با این حال اگر قصد دارید اعداد بزرگتری ذخیرهسازی کنید، میتوانید از انواع دادهای دیگری که به این منظور وجود دارند استفاده نمایید.
انواع داده دیگر مایاسکیوال
تعداد زیادی انواع دادی مختلف وجود دارند که میتوان برای نمایش و ذخیرهسازی دستههای مختلفی از دادهها استفاده کرد. دستههای مختلف دادهها شامل بخشهای بزرگ متنی، مقادیر درست یا نادرست و فایلهای باینری هستند. اگر علاقهمند هستید در این مورد اطلاعات بیشتری کسب کنید، میتوانید به مستندات مایاسکیوال مراجعه کنید.
4.2 ایجاد پایگاه داده
اینک زمان آن رسیده است که یک پایگاه داده برای نسخه شبیهسازیشده برنامه توییتری خودمان بسازیم. ابتدا باید به مایاسکیوال وصل شویم. اگر از لینوکس استفاده میکنید و مایاسکیوال را از طریق ابزار مدیریت بسته نصب کردهاید، در این صورت میتوانید از طریق ترمینال و با اجرای دستور زیر به این پایگاه داده وصل شوید.
mysql-u root-p
به محض اجرای دستور فوق درخواستی مبنی بر وارد کردن رمز عبور برای شما به نمایش در میآید. کاربران XAMPP و MAMP میتوانند از PHPMyAdmin استفاده کنند که درون این بستهها قرار دارد و امکان ویرایش پایگاه داده از طریق یک رابط کاربری تحت وب زیبا را فراهم میکند.
ابتدا باید یک پایگاه داده برای وبسایت خود بسازیم و درون این پایگاه داده جدولی برای نگهداری پستهای میکروبلاگ ایجاد کنیم.
شما میتوانید وارد PHPMyAdmin شوید و یا از طریق کنسول مایاسکیوال دستورات زیر را اجرا کنید:
CREATE DATABASE MicroBlog;
USE MicroBlog;
CREATE TABLE MicroBlog ( id integer auto_increment, post varchar(255), primary key (id) );
در صورتی که با خطایی مواجه نشوید، جدول شما بدون هیچ گونه اشکالی ایجاد شده است.
چند نکته وجود دارد که احتمالاً متوجه آن شدهاید. نکته نخست این است که همه دستورات با یک نقطهویرگول (;) بسته میشود و این وضعیت همانند نوشتن کدهای زبان برنامهنویسی php است.
نکته دوم آن است که همه دستورات اسکیوال کاملاً واضح هستند، دقیقاً مانند اینکه به زبان انگلیسی چیزی را مینویسید. به این ترتیب درک وقایعی که اتفاق میافتد کاملاً آسان است.
البته چیزهای زیادی در عبارتCREATE TABLE وجود دارند که ممکن است با آنها ناآشنا باشید. مثلاً باید بدانید که عبارت auto_increment چه کار میکند. ابتدا باید بدانید ID فیلدی است که به طور منحصربهفرد هر پست را مشخص میکند. زمانی که این فیلد را ایجاد میکنیم، به آن خصوصیت auto_increment میدهیم تا هر بار که ردیف جدیدی به پایگاه داده اضافه میشود، مقدار ID به طور خودکار یک واحد اضافه شود و بدین ترتیب همه ردیفها با عدد منحصربهفردی مشخص شوند.
در مورد عبارت primary key (id) نیز باید توضیح دهیم که چون میخواهیم مقدار id منحصربهفرد باشد، بنابراین میخواهیم که هر ردیف به وسیله این فیلد منحصربهفرد شناسایی شود. با تعیین خصوصیت primary key برای این فیلد اطمینان حاصل میشود که این شرایط ایجاد شده است.
4.3 روش اشتباه کوئری زدن به دیتابیس
سؤالی که در این بخش ایجاد میشود این است که چگونه میتوانیم یک پست را درون پایگاه داده درج کنیم. روش معمولی انجام این کار در php چیزی مانند زیر است:
$conn = mysqli_connect($DBServer, $DBUser, $DBPass, $DBName);
ابتدا باید یک اتصال به سرور با استفاده از نام میزبان (hostname)، رمز عبور پایگاه داده و نام پایگاه داده ایجاد کرده و آن را به یک شی انتساب دهیم. در مثال فوق ما آن را conn$ نامگذاری کردهایم.
سپس کوئری دیتابیسی را که میخواهیم تعریف میکنیم.
$query = mysqli_query($conn, “INSERT INTO MicroBlog VALUES (‘$post’)”);
و در نهایت اتصال به پایگاه داده را میبندیم
mysqli_close($conn);
اما اشکال این کار کجاست. اشکال رویه فوق این است که بر روی فرضیهای استوار شده است که چندان پایدار نیست. فرضیه این است که به همه ورودیهای پایگاه داده میتوان اعتماد کرد.
در همه موارد چنین وضعیتی وجود ندارد. اگر دقت کافی به کار نگیرید، این احتمال وجود دارد که برخی کدهای اسکیوال مخرب وارد پایگاه داده شوند و در نتیجه باعث نشت دادهها یا تغییر دادن رکوردهای ذخیره شده درون پایگاه داده شوند.
شبکهی اجتماعی LinkedIn تجربه تلخی در این خصوص داشت. عدم دقت کافی به ورودیهای پایگاه داده منجر به انتشار ناخواسته و غیرمجاز هزاران رکورد مرتبط با کاربران این وبسایت شد. این رخداد هزینه بسیار بالایی برای لینکدین داشت، هم با توجه به هزینههای مالی جبران این اشتباه و هم از دست رفتن حسن اعتماد میلیونها کاربر به دلیل افشای اطلاعات شخصی افراد. چگونه میتوانیم از یک دیتابیس به صورت امن در php استفاده کنیم؟
4.4 استفاده از MeekroDB
MeekroDB کتابخانهای است که موجب تسهیل امکان تعامل با دیتابیس میشود و همزمان از قرار گرفتن آن در معرض تهدیدات بیرونی جلوگیری میکند. این کتابخانه از ابتدا برای بهبود حملات تزریق SQL طراحی شده است. استفاده غیرتجاری از آن رایگان است؛ اما اگر قصد دارید از آن برای یک پروژه تجاری استفاده کنید، باید هزینهای برای لایسنس پرداخت کنید.
یک کپی از میکرودیبی را از سایت رسمی آن دانلود کنید. زمانی که دانلود پایان یافت، آن را از حالت فشرده خارج کنید و در سندی در دایرکتوری ریشه وبسایت قرار دهید.
اینک به ویرایشگر متنی مراجعه کنید. فایل postForm.php را باز کنید و خطوط کد زیر را به آن اضافه کنید.
require_once 'meekrodb.2.2.class.php'; DB::$user = 'user'; DB::$password = 'password'; DB::$dbName = ‘database';
مقادیر ‘user’, ‘password’ و ‘database’ را بر اساس مقادیر واقعی نام کاربری، رمز عبور و نام دیتابیس خود وارد کنید.
اینک زمان درج پستها در دیتابیس فرا رسیده است. خطوط کد زیر را به فایل اضافه کنید.
DB::debugMode(); $microBlog = $_POST['microBlog']; DB::insert('MicroBlog', array( 'post' => $microBlog) );
کد فوق را توضیح میدهیم. بخش ()DB::debugMode در صورتی که کاری را اشتباه انجام دهیم، خطایی تولید میکند. در نتیجه قرار دادن آن در کد بسیار کارآمد است، زیرا فرایند توسعه را آسانتر میسازد.
بخش DB::insert زمانی فراخوانی میشود که باید یک یا چند آیتم در پایگاه داده درج شوند. ‘MicroBlog’ به نام جدول مربوطه در دیتابیس اشاره دارد و ‘post’ حاوی پیامی است که در وبسایت ما پست شده است.
میتوانید با باز کردن PHPMyAdmin ببینید که پستهای ما به دیتابیس رسیدهاند.
اگر از مایاسکیوال روی لینوکس استفاده میکنید و آن را از طریق ابزار مدیریت بستهها نصب کردهاید، میتوانید مایاسکیوال را از پنجره ترمینال باز کنید و دستورهای زیر را اجرا کنید.
Use MicroBlog; Select * from MicroBlog;
میبینید که کار آسانی است. در مرحله بعد به نمایش پستها در صفحه اصلی وبسایت میپردازیم. مطمئن باشید که این کار نیز چندان دشوار نیست.
5. دریافت محتوا از پایگاه داده
در بخش قبل میکرودیبی را معرفی کردیم که کتابخانهای برای پایگاه داده است که امکان تعامل امن با پایگاه داده مایاسکیوال را در چارچوب برنامه php ممکن میسازد.
اگر فصل قبل را به پایان برده باشید، اینک باید چند پست در پایگاه داده خود داشته باشید. با این حال این پستها که درون پایگاه داده قرار گرفتهاند، هنوز استفاده نشدهاند. بنابراین در ادامه نگاهی خواهیم داشت به شیوه نمایش درآوردن آنها در مرورگر.
میدانیم که میتوان از زبان SQL در پایگاه داده مایاسکیوال برای کوئری زدن به پایگاه داده استفاده کرد. با اینکه میکرودیبی امکان درج محتوا در پایگاه داده را بدون استفاده از SQL فراهم کرده است، اما برای بازیابی رکوردها باید از مقداری اسکیوال استفاده کنید.
5.1 انتخاب کردن و ارائه نتایج
دستوری که به این منظور استفاده میشود ‘Select Statement’ است. ما قبلاً از آن برای دیدن اینکه فایلها در پایگاه داده قرار گرفتهاند یا نه، استفاده کردهایم. یک بار دیگر از آن استفاده میکنیم.
در کد زیر در بین دو تگ php؟> و <? خطوط کد زیر را درج کردهایم:
<?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>"; } ?>
نگاهی دقیقتر به کد فوق خواهیم داشت. میدانیم که پنج خط نخست چه کار میکنند. قبلاً آنها را به عنوان بخشی از کد درج پست در پایگاه داده دیدهایم.
$results = DB::query(“SELECT post FROM MicroBlog”);
این خط همه پستها را از جدول ‘MicroBlog’ انتخاب میکند و سپس آنها را به متغیر results$ کپی میکند.
حالا روند کار جالبتر میشود. پس متغیر results$ حاوی چند آیتم است. این بدان معنی است که میتوانیم با چیزی که تقریباً شبیه حلقههای for است و قبلاً در این نوشته معرفی کردهایم، آیتمهای این متغیر را یکبهیک بررسی کنیم.
foreach ($results as $row){ echo "<div class='microBlog'>". $row['post']. "</div>"; }
در کد فوق هر یک از آیتمهای متغیر results$ را یکبهیک بررسی میکنیم و آنها را به یک متغیر نگاشت میکنیم. سپس آنها را بین دو تگ ‘div’ نمایش میدهیم. این کار امکان کپسوله سازی هر پست و اعمال استایلبندیهای خاص به هر یک را به دست میدهد.
البته در تصویر فوق استایلبندی خاصی مشاهده نمیکنیم. در ادامه نوشته در این مورد بیشتر توضیح میدهیم.
5.2 استایلبندی
یک فایل جدید به نام ‘style.css’ ایجاد کنید. خطوط کد HTML زیر را بین دو تگ ‘Head’ در آن وارد کنید.
<link rel=”stylesheet” type=”text/css” href=”style.css”>
اینک زمان آن رسیده است که هر پست را به طرز متفاوت و قابلتوجهی نمایش دهیم. در فایل ‘style.css’ خطوط کد زیر را وارد کنید.
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 به صورت زیر میتوان نوشت:
CREATE TABLE Credentials ( username varchar(255), password varchar(255), PRIMARY KEY (username) );
همانند قبل این کد را روی پایگاه داده از طریق ترمینال یا PHPMyAdmin اجرا میکنیم.
6.2 جلسات session) PHP)
اینک باید بحث ورود و ثبتنام را مدیریت کنیم. این کار با استفاده از مفهومی به نام جلسههای PHP انجام میگیرد. روش انجام این کار تقریباً ساده است. چند متغیر وجود دارند که در سراسر یک برنامه وب استفاده میشوند و این متغیرها را میتوان در حالت حضور یا عدم حضور، بسته به اینکه کاربر وارد وبسایت شده یا نه قرار داد.
پیش از اینکه بتوانید جلسهها را مدیریت کنید، نخست باید یک جلسه را ایجاد کنید. خط کد زیر را به ابتدای فایل index.php اضافه کنید.
<?php session_start();?>
این خط در ابتدای هر فایلی که به جلسهها دسترسی دارد دیده میشود.
اینک باید مطمئن شویم که دکمه ارسال پست تنها برای افرادی قابل مشاهده است که وارد وبسایت شدهاند. فایل فرمی را که قبلاً ایجاد کردیم به صورت زیر تغییر دهید.
<?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’]_$ یک متغیر جلسه است. زمانی که این متغیر تعیین شود، کاربر قادر به مشاهده فرم مورد استفاده برای نوشتن پست خواهد بود. در ادامه بخشهای دیگری به آن میافزاییم.
else { echo ‘<form action=“login.php" method=“post”> Username: <input type=“text" name=“username” id="username" /> </br> Password: <input type=“text" name=“password” id="password" /> <input type="submit"> </form>’; }
در حال حاضر وقتی به آدرس localhost/index.php بروید، میبینید که دیگر نمیتوانید هیچ پستی ارسال کنید و از شما خواسته میشود که وارد وبسایت شوید. پس کد ما کار میکند.
اما در ابتدا باید حسابی داشته باشیم تا بتوانیم با آن وارد وبسایت شویم. پس خطوط کد زیرا را به صفحه index اضافه میکنیم.
if (isset($_SESSION['loggedin'])){ echo '<a href="logout.php">Log Out</a>'; } else { echo '<a href="register.php">Register</a>'; }
اگر کاربر وارد وبسایت شده باشد گزینهای برای خروج مشاهده میکند. همچنین اگر کاربر وارد وبسایت نشده باشد، گزینهای برای ثبتنام نیز نمایش مییابد.
اینک باید یک فرم ثبتنام ایجاد کنیم. فایل جدیدی به نام register.php ایجاد میکنیم و کدهای زیر را به آن اضافه میکنیم:
<?php session_start();?> <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Register</title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <h2>Register</h2> <form action=“registerForm.php" method=“post”> <p>Username: <input type=“text" name=“username” id="username"></p> <p>Password: <input type=“text" name=“password” id="password"></p> <input type="submit"> </form> </body> </html>
همزمان کد زیر را به فایل style.css اضافه کنید.
h2 { text-align: center; }
6.3 ثبتنام کاربران
اینک باید بخش منطقی ثبتنام یک کاربر را بنویسیم. فایل جدیدی به نام registerForm.php ایجاد میکنیم و خطوط کد زیر را در آن قرار میدهیم:
<?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 میتوان انجام داد.
$hash = password_hash($password, PASSWORD_DEFAULT);
با این حال این وضعیت نیز کافی نیست و به رمزهای عبور باید نمک (Salt) نیز زد! شاید بپرسید معنی این حرف چیست؟ در واقع این هم یک مرحله دفاعی بیشتر برای جلوگیری از موفقیت هکرها است. با افزودن Salt به پسوردهای هش شده در واقع امکان رمزگشایی آنها به طور کامل از بین میرود. توضیح دلایل فنی این وضعیت از حوصله این نوشته خارج است؛ اما برای توضیحات بیشتر میتوانید به «آموزش درهم سازی در ساختمان داده» و «آموزش مروری بر توابع Hash و خطر تصادم در آنها» مراجعه کنید.
در نهایت خط کد پایانی زیر را داریم:
header(‘Location: http://localhost:8888/index.php’);
این کد یک کار انجام میدهد و آن این است که مرورگر را به صفحه اصلی وبسایت هدایت میکند. این کار بسیار ساده است.
6.4 ورود به وبسایت
یک فایل به نام ‘login.php’ ایجاد کنید و خطوط کد زیر را در آن وارد نمایید.
<?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 ایجاد کنید. درون این فایل کد زیر را قرار دهید:
<?php session_start(); session_destroy(); header('Location: http://localhost:8888/'); ?>
در کد فوق جلسهای که متغیر loggedin درون آن قرار گرفته بود تخریب میشود و کاربر به طور عملی از وبسایت خارج میشود. زمانی که متغیر فوق از بین برود کاربر دوباره به صفحه اصلی هدایت میشد.
7. نتیجهگیری و معرفی منابعی برای مطالعه بیشتر
امیدواریم از خواندن این راهنمای جامع زبان برنامهنویسی PHP استفاده کرده باشید. شاید فکر کنید این نوشته خیلی کوتاه بوده یا در جای نامناسبی تمام شده است. اما باید توجه داشته باشید که این نوشته تنها آغازی برای ایجاد انگیزه در شما جهت یادگیری زبان برنامهنویسی PHP بوده است.
زبان برنامهنویسی PHP، ابزاری جالب و قدرتمند محسوب میشود. اگر قصد دارید در این مورد بیشتر یاد بگیرید میتوانید از آموزشهای زیر استفاده کنید:
- آموزش برنامهنویسی PHP
- گنجینه برنامهنویسی PHP
- آموزش مقدماتی ساخت ربات تلگرام با PHP
- آموزش فریمورک لاراول PHP Laravel برای ساخت فروشگاه اینترنتی
- آموزش کامل MVC در PHP — از صفر تا صد و به زبان ساده
- آموزش برنامه نویسی USSD | راهنمای شروع به کار — رایگان و به زبان ساده
==