جلسه دهم PHP

نویسنده:

سجاد حسین زاده

Statistics-rafiki

تعداد بازدید:

3204

Calendar-amico (2)

تاریخ به‌روزرسانی:

1400-09-10

Work time-rafiki

زمان مطالعه:

5 دقیقه

جلسه دهم PHP: آموزش کامل زبان برنامه نویسی پی اچ پی مقدماتی تا پیشرفته

مقدمه

در این مقاله از آموزش پی اچ پی با جلسه دهم PHP در خدمت شما هستیم. در قسمت قبل در جلسه نهم PHP مبحث “متغیرهای از پیش تعریف‌شده” را بررسی کردیم. همچنین مبحثی تحت عنوان “مرتب کردن آرایه‌ها” در تکمیل جلسه چهارم PHP یعنی “آرایه‌ها در PHP” مطرح شد. در این جلسه با 2 متغیر سوپر گلوبال دیگر کار را پیش خواهیم برد. بنابراین فهرست مطالب زیر در این جلسه بررسی خواهد شد.

  1. یادآوری فرم در HTML
  2. فرم ها در PHP
  3. سوپرگلوبال‌های GET_$ و POST_$
  4. اعتبارسنجی فرم در PHP
  5. چه زمانی از POST استفاده کنیم؟
  6. سوپر گلوبال session در PHP
  7. سوپر گلوبال cookie در PHP

یادآوری فرم در HTML

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

به مثال زیر از جلسه دهم PHP توجه نمایید.
<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 :
register form in html
register form in html

نکته 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_$ می‌توان ب اطلاعات موجود در فرم دسترسی پیدا کرد.

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‌ را در نظر بگیرید.
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
<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
<?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 ایجاد کرده‌ام.
<?php
// Start the session
session_start();

$_SESSION['color'] = "red";
$_SESSION['name'] = "John";

نکته 1: حال متغیر‌های سشن، name و age در سراسر سشن ِ موردنظر، قابل دسترسی هستند.
نکته 2: حال در صفحات دیگر می‌توانیم از این مقادیر استفاده کنیم.
نکته 3: تابع session_start() باید در ابتدای پروژه و قبل از هرگونه تگ HTML قرار بگیرد.
نکته 4: من در فایل زیر که با نام info.php در پروژه تستی ِ خودم ذخیره دارم، از متغیرهای سشن استفاده می‌کنم.

<?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() از بین ببرید.

مثال زیر را از جلسه دهم پی اچ پی مشاهده کنید.
<?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 کوکی ها را تنظیم کنید.

<?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 ضروری می‌باشد. بقیه موارد اختیاری می‌باشند.

مثال زیر از جلسه دهم پی اچ پی را مشاهده نمایید.
<?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 ” را پشت سر بگذارید.
همچنین جلسات پی اچ پی مقدماتی در این جلسه به اتمام رسید. از جلسات آینده با پی اچ پی پیشرفته در خدمت شما خواهیم بود.

Picture of سجاد حسین زاده

سجاد حسین زاده

سجاد حسین زاده هستم متولد کرج, بنده از سال ۹۴ سابقه حضور در حوزه وب را دارم. و روزبه‌روز در حال رشد و ارتقای خودم تو این زمینه هستم. از علایقم که بخوام به گم: خب واضحه که عاشق کدنویسی هستم. و همچنین من از معدود افراد برنامه‌نویس ورزشکار هم به‌حساب میام.

تا کنون 264 نفر در کدپز ثبت نام کرده اند.

18 دیدگاه در “جلسه دهم PHP : فرم ها در پی اچ پی + GET POST SESSION COOKIE

  1. محمد گفت:

    سایت زیبایی دارین و مطالب رایگان مفیدی هم دارین. دیزاین سایت رو تحسین میکنم خیلی تکراری نیست و خاصه

    1. مرتضی افضلی گفت:

      تشکر نظر لطف شماست دوست عزیز

  2. احسان گفت:

    ببخشید باید توی قسمت اکشن چی وارد کنیم که درست کار کنه pst و get من هر کاری میکنم انجام نمیشه

    1. سجاد حسین زاده گفت:

      یک فایل با پسوند .php بسازید و نام آن را به صورت کامل در مقابل action وارد کنید.

  3. mahdi گفت:

    empty به چه معنی است؟و چه کاربردی دارد؟
    نمونه های دیگه ای مثل empty هم هست؟

    1. سجاد حسین زاده گفت:

      ما برای هر متغیر POST_$ یک عبارت شرطی if elseif else اضافه کرده ایم. حال دستور شرطی، بررسی می کند که آیا متغیر POST_$ خالی است (با استفاده از تابع ()empty) در این صورت متن خطای مورد نظر را در متغیر مربوطه قرار می دهد.

  4. مهرشاد گفت:

    سلام
    تو این برنامه ای که فرستادین کاربر میتونه دکمه های Male و Famle رو به صورت همزمان بزنه. چکار میتونم بکنم که نتونه این کار رو بکنه؟
    در ضمن نتونستم تو سایت ثبت نام کنم

    1. سجاد حسین زاده گفت:

      استفاده از لیست کشویی
      لیست های رادیویی انتخاب ها را محدود میسازد

  5. مهرشاد گفت:

    سلام
    تو این برنامه‌ای که فرستادین اگر کاربر میزان تحصیلاتش رو وارد کنه برنامه php باید از کجا میزان تحصیلاتش رو بفهمه؟

    1. سجاد حسین زاده گفت:

      سلام
      برای اینکار باید تمام تاییدیه ها به سمت پایگاه داده ارسال شود و برای مرور پایگاه داده چک شود

  6. مصطفی گفت:

    خیلی ممنون از آموزشتون.
    بسیار عالی و کاربردی بود

    1. سجاد حسین زاده گفت:

      بسیار از مشارکت شما سپاسگذارم.

  7. hadis گفت:

    سلام، خسته نباشید ببخشید واس طراحی فرم در php توضیحی بیشتری هست چون ما تو دانشگا امتحان داریم نصف برنامه هامون هم همینطوری، میخواستم اگ امکانش هست نحوه کدنویسی رو ارائه بدید ممنون 🙏🙏

    1. سجاد حسین زاده گفت:

      سلام…
      برای طراحی فرم در PHP شما به دو تا فایل نیاز دارید. یک فایل برای دریافت اطلاعات از کاربر است که می‌توانید آن را به پسوند.html ذخیره کنید. برای مثال: form.html
      .
      و یک فایل دیگر برای پردازش اطلاعات دریافت شده از کاربر و ثبت مقادیر در بانک اطلاعاتی، که باید آن را با پسوند.php ذخیره کنید. برای مثال file.php

      باقی موارد هم در همین آموزش توضیح داده‌ام.
      اگر سؤال دیگری داشتید درخدمتم.

  8. مصطفی مهرجو گفت:

    سلام ممنون از وقتی که گذاشتی بابت تمرین ها
    فقط یک سری مطالب خوب توضیح داده نشده و سریع از کنارش رد شدی _ موضوع بعدی شفافیت موضوع هست (شما ساده و روان توضیح دادین اما موضوع برای یک فرد مبتدی شفافیت ندارد)
    البته من خودم از مثال هاتون بیشتر استفاده کردم اما بخاطر دانش خودم مطالب شما رو تا اخر دارم میخونم .

  9. omid گفت:

    با سلام
    واقعا از زحماتتون ممنونم.
    تو همین تمرین جلسه 10 فایل html & php رو تو یه پوشه قرار دادم، فرم رو اجرا میکنم و بعد از کلیک بر روی ارسال بجای نمایش پیام ها تمامی کدهای مربوط به فایل php رو نمایش میده.
    میشه راهنمایی کنید

  10. سلام من یک فایل html و php ساختم ولی وقتی مرورگر میارم دستورات نمیاره کاری نمیکنه انگار

    1. محمدحسین گفت:

      سلام
      این فایل php که برای پردازش اطلاعات در کنار فایل html ایجاد میکنیم چطور اطلاعات رو پردازش میکنه؟
      چون من بعد از کلیک روی دکمه submit وقتی به اون فایل مراجعه میکنم هیچی توی اون ثبت نمیشه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *