جلسه دهم PHP: آموزش کامل زبان برنامه نویسی پی اچ پی مقدماتی تا پیشرفته
مقدمه
در این مقاله از آموزش پی اچ پی با جلسه دهم PHP در خدمت شما هستیم. در قسمت قبل در جلسه نهم PHP مبحث “متغیرهای از پیش تعریفشده” را بررسی کردیم. همچنین مبحثی تحت عنوان “مرتب کردن آرایهها” در تکمیل جلسه چهارم PHP یعنی “آرایهها در PHP” مطرح شد. در این جلسه با 2 متغیر سوپر گلوبال دیگر کار را پیش خواهیم برد. بنابراین فهرست مطالب زیر در این جلسه بررسی خواهد شد.
- یادآوری فرم در HTML
- فرم ها در PHP
- سوپرگلوبالهای GET_$ و POST_$
- اعتبارسنجی فرم در PHP
- چه زمانی از POST استفاده کنیم؟
- سوپر گلوبال session در PHP
- سوپر گلوبال cookie در PHP
یادآوری فرم در HTML
پیشنهاد میشود که قبل از شروع این جلسه مبحث فرمها در HTML را فراگیرید. سپس به ادامهی مبحث توجه کنید. بااینحال، در مثال جامع زیر تقریباً تمامی بخشهای یک فرم در HTML را بررسی میکنیم.
فرمهایی که توسط HTML نوشته میشوند، میتوانند از کاربر مقادیری را دریافت کنند. این فرمها شامل یک یا چندین کنترل کادرِ متن، دکمههای انتخابی و منوهایی برای انتخاب گزینهی موردنظر میباشند. همانطور که میدانید فرم زیر یک فرم HTML میباشد.
به مثال زیر از جلسه دهم PHP توجه نمایید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
<html lang="en"> <head> <meta charset="UTF-8"> <title>form in php</title> </head> <body> <h2>form in html</h2> <form action="27.form.php" method="post"> <fieldset style="width: 600px;"> <legend>register form</legend> <input type="text" name="website" value="codepaz.com" readonly> <br> <h2>Specifications:</h2> fullname: <input type="text" name="fname" size="25px" maxlength="25"> <br> mail: <input type="email" value="example@gmail.com" name="mail"> <br> password: <input type="password" name="pass"> <br> <h2>choose your education:</h2> <select> <option value="diplom" name="diplom">diplom</option> <option value="kardani" name="kardani">kardani</option> <option value="karshenasi" name="karshenasi">karshenasi</option> <option value="arshad" name="arshad">arshad</option> </select> <h2>choose your age:</h2> <input type="range" name="age" min="8" max="100"> <h2>Gender:</h2> <input type="checkbox" name="gender" value="Male" checked>Male <input type="checkbox" name="gender" value="Famle">Famle <input type="radio" name="gender" value="Famle">Other <br><br> <textarea name="message" rows="10" cols="30">type your comment:>></textarea> <br><br> <input type="submit" value="Submit" name="submit"> <input type="reset" value="reset" name="reset"> </fieldset> </form> </body> </html> |
خروجی کد بالا از جلسه دهم PHP :
نکته 1: فرم بالا بخشهای زیادی دارد. سعی کنید تکبهتک بخشهای آن را بررسی کنید تاکمی برایتان یادآوری شود. اما اگر جایی از آن را مشکلدارید میتوانید در پایین همین بخش کامنت بگذارید.
فرم ها در PHP
فرم HTML بالا را ملاحظه نمودید. این فرم اطلاعات متعددی از کاربر دریافت میکند. اما:
اطلاعات دریافت شده از فرم کجا میروند؟
ذخیره دادهها از فرم چگونه است؟
پی اچ پی چه نقشی خواهد داشت؟
و سر آخر کار با فرمها در PHP چگونه است؟
آشنایی با متدهای GET_$ و POST_$
هر دو متغیر superglobal، در جلسه نهم PHP معرفی شدند. هدف سوپر گلوبالهای POST_$ و GET_$ جمعآوری اطلاعات از درون فرمهای HTML میباشد.
کمی بالاتر مثالی از یک فرم آورده شد. که تقریباً همه کار انجام میداد. اگر توجه کنید ما در آن مثال از متد POST استفاده کردیم. زمانی که کاربر تمامی کادرها را پرکرده و بر روی Submit کلیک میکند، اطلاعات پرشده برای پردازش به فایل بانام 27.form.php ارسال میشوند. این در حالی است که این ارسال به وسیلهی متد HTTP POST ارسالشده است. این متد اطلاعات را در URL نمایش نمیدهد. ضمناً دلیل ارسال اطلاعات به فایل 27.form.php این است که آدرس این فایل را در مقابل action قراردادهایم. تمامی بخشهای یک فرم در HTML دارای name میباشند. حال در فایل 27.form.php ، این اطلاعات با استفاده از name ها قابل دسترسی هستند.
نکته 1: مثال بالا را یک بار دیگر با متد GET اجرا کنید. ملاحظه میکنید که تمامی این اطلاعات در URL به نمایش درآمدهاند.
اعتبارسنجی فرم در PHP
یک مثال ساده از نحوهی کار با فرم
ابتدا مثالی که در ابتدای جلسه آورده شد را در نظر بگیرید. قطعه کد زیر را هم در فایلی با پسوند .php وارد کنید. من نیز فایلی با نام 27.form.php ساختهام. حال، مثال زیر از جلسه دهم PHP را در نظر بگیرید. با استفاده از آرایهی متناظر POST_$ میتوان ب اطلاعات موجود در فرم دسترسی پیدا کرد.
1 2 |
Welcome <?php echo $_POST["fname"]; ?><br> Your email address is: <?php echo $_POST["mail"]; ?> |
در هرکجای فرم، name برابر “fname” و “mail” باشد، مقدار آن چاپ میشود. درواقع در آرایهی متناظر POST_$ مقادیر بهصورت key/value ذخیرهشدهاند. key ها، همان name هستند و value ها، همان مقدار input درون ِ فرم HTML هستند که توسط کاربر واردشدهاند.
برای مثال من fullname را sajjadhosseinzadeh و mail را sajjadhosseinzadeh1997@gmail.com وارد کردهام.
خروجی کد بالا از جلسه دهم PHP
Welcome sajjadhosseinzadeh
Your email address is: sajjadhosseinzadeh1997@gmail.com
نکته 1: توجه داشته باشید که هر دو فایل، با پسوندهای .html و.php در کنار هم باشند. و برای اجرای فایل از قسمت localhost، فایل با پسوند.html را بازکنید.
نکته 2: برای نمایش همچین خروجیای تنها پر کردن fullname و mail کافی است.
نکته 3: توجه داشته باشید که اگر مقدار متد عبارت POST نبود. و مقدار GET را اختیار کرده بود، باید قطعه کد زیر اجرا میشد.
مثال زیر از جلسه دهم PHP را در نظر بگیرید.
1 2 |
Welcome <?php echo $_GET["fname"]; ?><br> Your email address is: <?php echo $_POST["mail"]; ?> |
جمع بندی
توجه داشته باشید که: GET_$ یک آرایه از متغیرهایی است که از طریق پارامترهای URL به اسکریپت فعلی منتقل میشود. و POST_$ یک آرایه از متغیرهایی است که از طریق روش HTTP POST به اسکریپت فعلی منتقلشده است. بنابراین هرگز از GET برای ارسال پسوردها و یا دیگر اطلاعات مهم استفاده نکنید.
چه زمانی از POST استفاده کنیم؟
توجه داشته باشید اطلاعاتی که با روش POST ارسال میشوند، به دیگران نشان داده نمیشوند. (یعنی تمامی مقادیر درون بدن ِ HTTP تعبیهشدهاند.) و همچنین هیچ محدودیتی برای مقدار اطلاعاتی که ارسال میشوند وجود ندارد. علاوه بر این، POST از قابلیتهای پیشرفته مانند پشتیبانی از ورودی باینری چند بخش در هنگام آپلود فایلها به سرور پشتیبانی میکند. ما نیز POST را برای ارسال اطلاعاتتان پیشنهاد میکنیم.
تمرین کار با فرم ها در PHP
تمرین: بهعنوان یک تمرین در جلسه دهم PHP شما نیز مانند من، کدِ فرمی را بنویسید که از دو کادر username و password تشکیلشده باشد. و فقط زمانی که کاربر دکمهی submit را میزند، متنی دلخواه را نمایش دهد. در غیر این صورت هیچگونه متنی وجود نداشته باشد. (از عبارتهای شرطی if….else….elseif استفاده کنید.)
توجه کنید اگر کاربر حتی یکی از دو کادر ِ فرم را پر کرد و submit را زد، اِروری مبنی بر کار نادرست کاربر نمایش دهید.
جواب تمرین
فایل HTML
1 2 3 4 5 6 7 8 9 10 11 |
<html> <body> <form action="29.exercise_form.php" method="post"> Username: <input type="text" name="name"><br> Password: <input type="password" name="pass"><br> <input type="submit" name="submit"> </form> </body> </html> |
فایل PHP
1 2 3 4 5 6 7 |
<?php if ($_POST['submit'] and !empty($_POST['name']) and !empty($_POST['pass'])){ echo 'Welcome '. $_POST["name"] .'<br>'; echo 'Your password address is : '. $_POST["pass"]; }elseif ($_POST['submit'] and empty($_POST['name']) or empty($_POST['password'])){ echo 'fill two section is necessary'; } |
اگر سؤالی از تمرین بالا داشتید میتونید در کامنت ها بپرسید.
سوپر گلوبال session در PHP
با استفاده از سشن ها میتوانیم اطلاعاتی را در متغیرها ذخیره کنیم و در چندین صفحه از آنها استفاده کنیم. این اطلاعات در سرور ذخیره میشوند. و نه در سیستم کاربر، که آن بخش مربوط به کوکیها میباشد. سشن ها تا زمانی که کاربر صفحهی مرورگر را ببندد کار میکنند. یک سشن با استفاده از تابع session_start() آغاز میشود. همچنین با استفاده از سوپر گلوبال SESSION_$ میتوان به متغیرهای سشن دسترسی پیدا کرد.
به مثال زیر از جلسه دهم PHP توجه کنید. من مثال زیر را در فایلی با نام index.php ایجاد کردهام.
1 2 3 4 5 6 |
<?php // Start the session session_start(); $_SESSION['color'] = "red"; $_SESSION['name'] = "John"; |
نکته 1: حال متغیرهای سشن، name و age در سراسر سشن ِ موردنظر، قابل دسترسی هستند.
نکته 2: حال در صفحات دیگر میتوانیم از این مقادیر استفاده کنیم.
نکته 3: تابع session_start() باید در ابتدای پروژه و قبل از هرگونه تگ HTML قرار بگیرد.
نکته 4: من در فایل زیر که با نام info.php در پروژه تستی ِ خودم ذخیره دارم، از متغیرهای سشن استفاده میکنم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php // Start the session session_start(); ?> <!DOCTYPE html> <html lang="en"> <body> <p>welcome <?php echo $_SESSION['name']; ?>, you are <?php echo $_SESSION['age']; ?> years old!</p> </body> </html> <!-- Outputs welcome sajjad, you are 24 years old! --> |
نکته 1: متغیرهای سشن شما تا زمانیکه session را ببندید، دردسترس هستند.
نکته 2: تمامی متغیرهای سشن میتوانند بهصورت دستی با استفادهاز تابع session_unset() پاک شوند.
نکته 3: همچنین خود سشن را هم نیز به صورت کلی میتوانید با استفاده از تابع session_destroy() از بین ببرید.
مثال زیر را از جلسه دهم پی اچ پی مشاهده کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php session_start(); ?> <!DOCTYPE html> <html lang="en"> <body> <?php // remove all session variables session_unset(); // destroy the session session_destroy(); ?> </body> </html> |
سوپر گلوبال cookie در PHP
کوکیها اغلب برای شناسایی کاربر مورداستفاده قرار میگیرند. کوکی یک فایل کوچک است که سرور آن را روی مرورگر کاربر ذخیره میکند. حال هر زمان که کاربر مجدداً وارد سایت شود، سرور از آن متغیرها درون فایل کوکی ِ مرورگر استفاده میکند. این متغیرها معمولاً اطلاعاتی مانند رمز عبور، ایمیل، نام کاربری و غیره میباشد. حال با استفاده از PHP میتوانیم کوکیها را بسازیم و در زمان مناسب آنها را باز پس گیریم. با استفاده از تابع setcookie کوکی ها را تنظیم کنید.
1 2 |
<?php setcookie(name, value, expire, path, domain, secure, httponly); |
name: نام کوکی را مشخص میکند.
value: مقدار value را مشخص میکند.
expire: زمان منقضی شدن کوکی (به ثانیه) را مشخص میکند. مقدار time()+86400*20، زمان منقضی شدن کوکی را 20 روز تعیین میکند. اگر عدد 20 را به صفر تغییر دهیم، بعد از بسته شدن session، عمر کوکی هم بهپایان میرسد. که در حالت پیشفرض، همین 0 تنظیم است.
path: مشخصکنندهی مسیر سرور کوکی میباشد. برای مثال اگر آن را بر روی “/” تنظیم کنیم، بر روی تمام دامنه اعمال میشود. و اگر آن را بر روی “/admin/” تنظیم کنیم، بر روی دایرکتوری admin و تمام زیرمجموعههایش اعمال میشود.
domain: مشخصکنندهی نام دامنهی کوکی میباشد. برای آنکه کوکی در تمام ساب دامنههای سایت فعال باشد، باید آن را روی “yourdomain.com” تنظیم کنید. همچنین بخش domain اختیاری میباشد.
secure: مشخص میکند که آیا کوکی فقط باید از یک اتصال امن ِ HTTPS منتقل شود یا خیر. مقدار TRUE نشان میدهد که فقط اگر اتصال امن وجود داشته باشد، کوکی تنظیم میشود. همچنین مقدار پیشفرض آن FALSE میباشد.
httponly: اگر مقدار TRUE تنظیم شود، کوکی فقط از طریق پروتکل HTTP قابلدسترسی خواهد بود.
نکته: تنها مقدار name ضروری میباشد. بقیه موارد اختیاری میباشند.
مثال زیر از جلسه دهم پی اچ پی را مشاهده نمایید.
1 2 3 4 5 6 7 8 9 10 |
<?php $fName = "sajjad"; setcookie("username", $fName, time() + (86400 * 20), '/'); if (isset($_COOKIE['username'])) { echo "fName is = " . $_COOKIE['username']; } // Outputs // fName is = sajjad |
نکته 1: در مثال بالا یک کوکی با name ِ
username که مقدار value آن، متغیر ِ fName_$ است را تنظیم کردیم. مقدار value ِ متغیر fName را پیشتر برابر sajjad قرار دادیم.
نکته 2: این کوکی در 20 روز منقضی خواهد شد.
نکته 3: همچنین این کوکی در تمامی domain قابل دسترسی میباشد.
نکته 4: با استفاده از دستور شرطی if و تابع isset() و همچنین آرایهی سوپر گلوبال COOKIE_$ بررسی کردیم که آیا مقدار username ست و یا تنظیم شدهاست یا خیر. ازآنجاییکه مقدار شرط TRUE است، خروجی مدنظر تولید شد.
نکته 5: تابع setcookie باید قبل از هرگونه تگ HTML ساخته شود.
نکته 6: مقدار کوکی بهطور خودکار زمانی که کوکی فرستاده میشود، رمزگذاری میشود و همچنین زمانی که دریافت میشود، بهصورت خودکار رمزگشایی خواهد شد. بااینوجود، هرگز اطلاعات حساس را در کوکیها ذخیره نکنید.
تبریک میگم شما موفق شدید تا جلسه دهم پی اچ پی ، مبحث ” کار با فرمها در PHP ” را پشت سر بگذارید.
همچنین جلسات پی اچ پی مقدماتی در این جلسه به اتمام رسید. از جلسات آینده با پی اچ پی پیشرفته در خدمت شما خواهیم بود.
18 Comments
Join the discussion and tell us your opinion.
سایت زیبایی دارین و مطالب رایگان مفیدی هم دارین. دیزاین سایت رو تحسین میکنم خیلی تکراری نیست و خاصه
تشکر نظر لطف شماست دوست عزیز
ببخشید باید توی قسمت اکشن چی وارد کنیم که درست کار کنه pst و get من هر کاری میکنم انجام نمیشه
یک فایل با پسوند .php بسازید و نام آن را به صورت کامل در مقابل action وارد کنید.
empty به چه معنی است؟و چه کاربردی دارد؟
نمونه های دیگه ای مثل empty هم هست؟
ما برای هر متغیر POST_$ یک عبارت شرطی if elseif else اضافه کرده ایم. حال دستور شرطی، بررسی می کند که آیا متغیر POST_$ خالی است (با استفاده از تابع ()empty) در این صورت متن خطای مورد نظر را در متغیر مربوطه قرار می دهد.
سلام
تو این برنامه ای که فرستادین کاربر میتونه دکمه های Male و Famle رو به صورت همزمان بزنه. چکار میتونم بکنم که نتونه این کار رو بکنه؟
در ضمن نتونستم تو سایت ثبت نام کنم
استفاده از لیست کشویی
لیست های رادیویی انتخاب ها را محدود میسازد
سلام
تو این برنامهای که فرستادین اگر کاربر میزان تحصیلاتش رو وارد کنه برنامه php باید از کجا میزان تحصیلاتش رو بفهمه؟
سلام
برای اینکار باید تمام تاییدیه ها به سمت پایگاه داده ارسال شود و برای مرور پایگاه داده چک شود
خیلی ممنون از آموزشتون.
بسیار عالی و کاربردی بود
بسیار از مشارکت شما سپاسگذارم.
سلام، خسته نباشید ببخشید واس طراحی فرم در php توضیحی بیشتری هست چون ما تو دانشگا امتحان داریم نصف برنامه هامون هم همینطوری، میخواستم اگ امکانش هست نحوه کدنویسی رو ارائه بدید ممنون 🙏🙏
سلام…
برای طراحی فرم در PHP شما به دو تا فایل نیاز دارید. یک فایل برای دریافت اطلاعات از کاربر است که میتوانید آن را به پسوند.html ذخیره کنید. برای مثال: form.html
.
و یک فایل دیگر برای پردازش اطلاعات دریافت شده از کاربر و ثبت مقادیر در بانک اطلاعاتی، که باید آن را با پسوند.php ذخیره کنید. برای مثال file.php
باقی موارد هم در همین آموزش توضیح دادهام.
اگر سؤال دیگری داشتید درخدمتم.
سلام ممنون از وقتی که گذاشتی بابت تمرین ها
فقط یک سری مطالب خوب توضیح داده نشده و سریع از کنارش رد شدی _ موضوع بعدی شفافیت موضوع هست (شما ساده و روان توضیح دادین اما موضوع برای یک فرد مبتدی شفافیت ندارد)
البته من خودم از مثال هاتون بیشتر استفاده کردم اما بخاطر دانش خودم مطالب شما رو تا اخر دارم میخونم .
با سلام
واقعا از زحماتتون ممنونم.
تو همین تمرین جلسه 10 فایل html & php رو تو یه پوشه قرار دادم، فرم رو اجرا میکنم و بعد از کلیک بر روی ارسال بجای نمایش پیام ها تمامی کدهای مربوط به فایل php رو نمایش میده.
میشه راهنمایی کنید
سلام من یک فایل html و php ساختم ولی وقتی مرورگر میارم دستورات نمیاره کاری نمیکنه انگار
سلام
این فایل php که برای پردازش اطلاعات در کنار فایل html ایجاد میکنیم چطور اطلاعات رو پردازش میکنه؟
چون من بعد از کلیک روی دکمه submit وقتی به اون فایل مراجعه میکنم هیچی توی اون ثبت نمیشه