آموزش برنامه نویسی PHP-جلسه هشتم

آموزش برنامه نویسی PHP-جلسه هشتم

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

در جلسات قبلی آموزش PHP با متغیرها و سوپرگلوبال‌های PHP آشنا شدیم. در این جلسه قصد داریم یکی از مهم‌ترین روش‌های دریافت اطلاعات از کاربر یعنی متد POST در PHP و متغیر سوپرگلوبال $_POST را بررسی کنیم.

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

در این آموزش یاد می‌گیریم متد POST چیست، چگونه در فرم HTML از آن استفاده کنیم، چگونه اطلاعات ارسال‌شده را با $_POST دریافت کنیم و چگونه بررسی کنیم که درخواست کاربر با متد POST ارسال شده است.

متد POST در PHP چیست؟

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

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

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

نکته امنیتی: استفاده از POST به‌تنهایی به معنی رمزنگاری اطلاعات نیست. اگر ارتباط سایت با HTTPS برقرار باشد، اطلاعات هنگام انتقال بین مرورگر و سرور به کمک TLS رمزنگاری می‌شوند. بنابراین برای ارسال اطلاعات حساس مانند رمز عبور، استفاده از HTTPS ضروری است.


PHP $_POST چیست؟

در PHP، $_POST یک آرایه سوپرگلوبال (Superglobal Array) است که اطلاعات ارسال‌شده از طریق متد POST را در اختیار برنامه قرار می‌دهد.

به زبان ساده، زمانی که کاربر اطلاعات یک فرم را با method="post" ارسال می‌کند، PHP این اطلاعات را در متغیر $_POST قرار می‌دهد و ما می‌توانیم با استفاده از نام فیلد فرم، مقدار آن را دریافت کنیم.

برای مثال اگر در فرم خود فیلدی با نام fname داشته باشیم:

<input type=text name=fname>

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

$name = $_POST['fname'];

در اینجا fname همان مقداری است که در ویژگی name فیلد HTML تعریف کرده‌ایم.


ساخت یک فرم ساده با متد POST

در مثال زیر یک فرم ساده ایجاد می‌کنیم که کاربر می‌تواند نام خود را وارد کند و سپس این مقدار با استفاده از متد POST به PHP ارسال می‌شود.

<html>
<body>

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    Name:
    <input type=text name=fname>
    <input type=submit>
</form>

<?php

if ($_SERVER["REQUEST_METHOD"] == "POST") {

    // دریافت مقدار فیلد ورودی
    $name = $_POST['fname'];

    if (empty($name)) {
        echo "Name is empty";
    } else {
        echo $name;
    }
}

?>

</body>
</html>

در ادامه بخش‌های مهم این کد را مرحله‌به‌مرحله بررسی می‌کنیم.


استفاده از method="post"

در تگ form مشخص می‌کنیم که اطلاعات فرم باید با چه روشی ارسال شوند:

<form method="post">

عبارت method="post" به مرورگر اعلام می‌کند که اطلاعات فرم هنگام ارسال، با روش POST به مقصد مشخص‌شده ارسال شوند.

در HTML معمولاً دو متد مهم برای ارسال اطلاعات فرم را مشاهده می‌کنیم:

  • GET
  • POST

در متد GET اطلاعات معمولاً در URL قابل مشاهده هستند، در حالی که در POST اطلاعات فرم در URL نمایش داده نمی‌شوند.


ویژگی action در فرم چیست؟

در فرم بالا از عبارت زیر استفاده کرده‌ایم:

action="<?php echo $_SERVER['PHP_SELF']; ?>"

ویژگی action مشخص می‌کند که اطلاعات فرم باید به چه آدرسی ارسال شوند.

در این مثال از سوپرگلوبال زیر استفاده کرده‌ایم:

$_SERVER['PHP_SELF']

سپس با echo مقدار آن را در ویژگی action قرار داده‌ایم:

<?php echo $_SERVER['PHP_SELF']; ?>

هدف این کار این است که فرم اطلاعات را به همان صفحه‌ای که فرم در آن قرار دارد ارسال کند.

در برخی شرایط می‌توان ویژگی action را خالی نیز قرار داد تا فرم به همان صفحه ارسال شود، اما استفاده از $_SERVER['PHP_SELF'] یکی از روش‌هایی است که برای مشخص کردن مسیر صفحه فعلی در مثال‌های آموزشی PHP مورد استفاده قرار می‌گیرد.

یک نکته امنیتی مهم درباره PHP_SELF

در پروژه‌های واقعی باید در استفاده مستقیم از $_SERVER['PHP_SELF'] دقت کرد، زیرا در بعضی شرایط می‌تواند زمینه حملات XSS را ایجاد کند. بنابراین در پروژه‌های حرفه‌ای بهتر است خروجی‌های مربوط به URL یا داده‌های دریافت‌شده از کاربر به شکل مناسب اعتبارسنجی و Escape شوند.


چرا برای فیلدهای فرم باید name تعریف کنیم؟

یکی از نکات بسیار مهم در ارسال اطلاعات فرم این است که هر فیلدی که قرار است در PHP دریافت شود، باید یک ویژگی name داشته باشد.

برای مثال:

<input type=text name=fname>

در اینجا:

name="fname"

نامی است که PHP برای شناسایی این فیلد از آن استفاده می‌کند.

بنابراین در PHP می‌توانیم مقدار آن را با کد زیر دریافت کنیم:

$name = $_POST['fname'];

در واقع ارتباط بین فرم HTML و PHP از طریق همین name برقرار می‌شود.


بررسی REQUEST_METHOD

در کد مثال، قبل از دریافت اطلاعات فرم، این شرط را بررسی کرده‌ایم:

if ($_SERVER["REQUEST_METHOD"] == "POST")

متغیر $_SERVER اطلاعات مختلفی درباره درخواست و محیط سرور در اختیار PHP قرار می‌دهد.

در اینجا:

$_SERVER["REQUEST_METHOD"]

مشخص می‌کند درخواست HTTP با چه متدی ارسال شده است.

اگر مقدار آن برابر با POST باشد، یعنی فرم با متد POST ارسال شده است و می‌توانیم اطلاعات موردنظر را از $_POST دریافت کنیم.

ساختار کلی این بررسی به شکل زیر است:

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // پردازش اطلاعات فرم
}

این روش باعث می‌شود کد PHP فقط زمانی اطلاعات فرم را پردازش کند که واقعاً یک درخواست POST دریافت شده باشد.


دریافت اطلاعات فرم با $_POST

فرض کنیم کاربر در فیلد نام، عبارت زیر را وارد کرده است:

Ali

فرم دارای این فیلد است:

<input type=text name=fname>

پس از ارسال فرم، PHP می‌تواند مقدار واردشده را با استفاده از $_POST دریافت کند:

$name = $_POST['fname'];

در نتیجه مقدار متغیر $name برابر با مقدار واردشده توسط کاربر خواهد بود.

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

echo $name;

بررسی خالی بودن مقدار با empty()

در مثال آموزشی از تابع empty() نیز استفاده کرده‌ایم:

if (empty($name)) {
    echo "Name is empty";
}

تابع empty() برای بررسی خالی بودن یک متغیر یا مقدار استفاده می‌شود.

بنابراین اگر کاربر بدون وارد کردن نام، فرم را ارسال کند، شرط بالا برقرار شده و پیام زیر نمایش داده می‌شود:

Name is empty

اما اگر کاربر نامی وارد کرده باشد، بخش else اجرا می‌شود:

else {
    echo $name;
}

و نام واردشده نمایش داده خواهد شد.


ساختار کامل دریافت اطلاعات از فرم

فرآیند دریافت اطلاعات یک فرم POST در PHP را می‌توان به شکل زیر خلاصه کرد:

۱. ایجاد فرم HTML

<form method="post">

۲. ایجاد فیلد ورودی

<input type=text name=fname>

۳. ارسال فرم توسط کاربر

<input type=submit>

۴. بررسی نوع درخواست در PHP

if ($_SERVER["REQUEST_METHOD"] == "POST")

۵. دریافت مقدار فیلد

$name = $_POST['fname'];

۶. بررسی و پردازش اطلاعات

if (empty($name)) {
    echo "Name is empty";
} else {
    echo $name;
}

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


تفاوت POST و GET در PHP

دو متد GET و POST از پرکاربردترین روش‌های ارسال اطلاعات در وب هستند.

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

اما در POST، داده‌های فرم در بدنه درخواست HTTP ارسال می‌شوند و در URL نمایش داده نمی‌شوند.

به همین دلیل POST معمولاً برای فرم‌هایی مانند ورود، ثبت‌نام، ارسال اطلاعات کاربر و ایجاد یا تغییر داده‌ها مناسب‌تر است.

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


نکات مهم هنگام استفاده از $_POST

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

برای مثال، اگر کاربر یک نام وارد می‌کند، بهتر است ابتدا بررسی کنیم که مقدار ارسال شده وجود دارد و سپس آن را اعتبارسنجی یا پاک‌سازی کنیم.

یک نمونه ساده:

if ($_SERVER["REQUEST_METHOD"] == "POST") {

    $name = $_POST['fname'] ?? '';

    if (empty($name)) {
        echo "Name is empty";
    } else {
        echo htmlspecialchars($name);
    }
}

استفاده از ?? در این مثال باعث می‌شود اگر کلید fname در درخواست وجود نداشته باشد، به جای ایجاد خطای Undefined array key، مقدار پیش‌فرض '' در نظر گرفته شود.

همچنین htmlspecialchars() می‌تواند هنگام نمایش داده‌ای که از کاربر دریافت شده، از تفسیر برخی کاراکترهای HTML جلوگیری کند.


کاربردهای متد POST در پروژه‌های واقعی

متد POST فقط برای مثال‌های ساده آموزشی استفاده نمی‌شود؛ بلکه در بسیاری از بخش‌های وب‌سایت‌ها کاربرد دارد.

از جمله:

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

به همین دلیل یادگیری صحیح POST و $_POST یکی از مهارت‌های پایه و ضروری برای برنامه‌نویسی PHP و توسعه وب است.


جمع‌بندی آموزش PHP جلسه هشتم

در این جلسه با متد POST در PHP و نحوه دریافت اطلاعات فرم با استفاده از $_POST آشنا شدیم.

یاد گرفتیم که برای ارسال اطلاعات فرم می‌توانیم از:

method="post"

استفاده کنیم و برای دریافت اطلاعات در PHP نیز از:

$_POST['field_name']

استفاده می‌کنیم.

همچنین با $_SERVER['REQUEST_METHOD'] آشنا شدیم و دیدیم چگونه می‌توان بررسی کرد که درخواست با متد POST ارسال شده است.

در کنار این موارد، با نقش name در فیلدهای فرم، ویژگی action، متغیر $_SERVER['PHP_SELF'] و تابع empty() نیز آشنا شدیم.

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

اشتراک گذاری :
مریم گوهرزاد
نویسنده

مریم گوهرزاد

مدرس و بنیانگذار هلدینگ آرتا رسانه. برنامه نویس و محقق حوزه بلاکچین و توسعه‌دهنده بلاکچین | متخصص Solidity | توسعه‌دهنده وب Full-Stackمن یک توسعه‌دهنده علاقه‌مند به فناوری‌های بلاکچین و وب ۳ هستم و در زمینه Solidity، توسعه قراردادهای هوشمند و ساخت برنامه‌های غیرمتمرکز (DApps) فعالیت می‌کنم. تمرکز من بر طراحی و پیاده‌سازی راهکارهایی است که در کنار بهره‌گیری از فناوری‌های نوین، عملکرد مناسب، امنیت و تجربه کاربری مطلوبی ارائه دهند.در کنار تخصص در حوزه بلاکچین، به عنوان یک توسعه‌دهنده وب Full-Stack نیز در طراحی و توسعه وب‌سایت‌ها و برنامه‌های تحت وب فعالیت می‌کنم. تجربه کار در بخش‌های Front-End و Back-End به من این امکان را داده است که پروژه‌ها را از مرحله ایده و طراحی تا توسعه و اجرا، با دیدی جامع دنبال کنم. در فرآیند توسعه، توجه ویژه‌ای به کدنویسی تمیز، معماری مناسب، طراحی واکنش‌گرا، عملکرد مطلوب و تجربه کاربری روان دارم.

TEST_VALUE_123
https://t.me/artarasaneh
tel:09193426251
https://wa.me/+989193426251
https://instagram.com/artarasaneh_com