آموزش PHP – متد GET و POST

  • آپدیت شده در تاریخ

آموزش PHP

در قسمت قبلی کار با توابع PHP را یاد گرفتیم. در این بخش از سری آموزش PHP قصد داریم به شما نحوه ارسال اطلاعات به سرور با متدهای GET و POST و دریافت آن توسط PHP را آموزش بدیم.

 

متدهای ارسال اطلاعات به سرور

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

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

 

متد GET (گت)

در متد GET داده ارسال شده بصورت پارامترهای URL که معمولا جفت های نام و مقدار آنها است و با علامت & جدا شده اند, هستند.

بطور معمول, یک URL با داده GET بصورت زیر است :

بخش های name و age در این آدرس URL همان پارامترهای GET هستند و بخش های جلوی عملامت مساوی مقادیر آن پارامترها می باشند.

 

مزیت و معایب استفاده از متد GET

  • از آنجا که داده های ارسالی با متد GET در URL نمایش داده می شوند, امکان بوکمارک کردن صفحه خاص با مقادیر query string آن وجود دارد.
  • متد GET برای ارسال داده های حساس مثل نام کاربری و رمزعبور مناسب نیستند, چراکه بطور کامل در URL قابل نمایش هستند و در تاریخچه مرورگر ذخیره می شوند.
  • از آنجا که متد GET داده ها را به متغیر محیطی سرور اختصاص می دهد, پس طول URL ما محدود است بنابراین یک محدودیت در حجم داده ارسالی داریم.

PHP متغیر سراسری $_GET را برای دسترسی به تمام اطلاعات ارسال شده توسط مرورگر یا فرم HTML که از method=”get” استفاده می کند, در اختیار ما قرار می دهد.

 

متد POST (پست)

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

 

مزیت و معایب استفاده از متد POST

  • امن تر از متد GET است چرا که اطلاعات وارد شده توسط کاربر در مرورگر قابل نمایش نیست یا در لاگ سرور ذخیره نمی شود.
  • محدودیت حجم داده ای که می توانیم ارسال کنیم بسیار بیشتر است و می توان داده متنی مثل باینری برای آپلود فایل را با POST ارسال کرد.
  • از آنجا که داده ارسال با متد POST در  URL قابل نمایش نیست, پس بوکمارک کردن صفحه با کویری مشخص امکان پذیر نیست.

همانند $_GET , PHP متغیر سراسری $_POST را برای دسترسی به تمام اطلاعات ارسال شده توسط مرورگر یا فرم HTML که از method=”post” استفاده می کند, در اختیار ما قرار می دهد.

 

متغیر $_REQUEST

PHP یک متغیر سوپرگلوبال دیگر $_REQUEST را که شامل هر دو مقدار متغیر $_GET و $_POST و همچنین $_COOKIE می باشد را در اختیار ما قرار می دهد.

در مورد کوکی ها و مدیریت فرم ها در بخش های بعدی بیشتر یاد می گیرید.

نکته : متغیرهای سوپرگلوبال $_GET, $_POST, $_REQUEST جزء متغیرهای از پیش ساخته شده هستند که در تمام اسکوپ ها داخل اسکریپت در دسترس هستند.

 

امیدوارم در این بخش آموزش PHP, از کار با متد GET و POST در php نهایت استفاده را برده باشید.

در بخش بعدی وارد بخش مباحث پیشرفته PHP می شویم و برای اولین مورد نحوه کار با توابع تاریخ و زمان در PHP را یاد می گیریم.

هر سوالی داشتید ، از قسمت نظرات ارسال کنید . سریعا ، پاسخگوی سوالات شما هستیم .

موفق باشید

حسن شفیعی علاقه خاصی به برنامه نویسی وب و موبایل دارم و هر روز تلاش می کنم به این حوزه مسلط تر شوم و اطلاعاتم را به شکل کاربردی برای علاقه مندان در وب به اشتراک بگذارم. توصیه من: هاست میهن وب‎هاست
دیدگاه کاربران (۳۲)

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

  1. امیر ۱۸ تیر ۱۳۹۹

    خوب بود

    پاسخ
  2. حسین ۱ اسفند ۱۳۹۸

    سلام استاد خوب هستین یه سوال داشتم. درمورد اتصال به دیتابیس به (سرور اصلی سایت) در قسمتی که لوکال هاست مینوشتیم باید چی نوشته بشه یه مثال عملی بفرمایید

    ;(“conn = mysqli_connect(“localhost”, “hossen”, “123456”, “table$

    پاسخ
    1. حسن شفیعی ۱ اسفند ۱۳۹۸

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

      پاسخ
  3. حسین ۳ بهمن ۱۳۹۸

    سلام استاد شفیعی خسته نباشید. یه سوال داشتم ،وقتی متغیری را به روش لینک به صفحه دیگری ارسال میکنم ودر ان با متد get دریافت میکنم محتویات متغیردرمرورگر نمایش داده میشود .حالا میخوام محتویات متغیر در مرورگر نمایش داده نشه .همین متغیر رو به روش post به صفحه دیگر ارسال کنم چه باید بکنم. لطفا نمونه مثالی بیاورید از لطف شما سپاسگذارم.

    <a href="./single.php?id=”>

    پاسخ
    1. حسن شفیعی ۳ بهمن ۱۳۹۸

      سلام. ممنون لطف دارید.
      به طور معمول نمی تونید با GET جوری ارسال کنید که در لینک مرورگر نمایش داده نشه.
      و اگر می خواهید کاربر متوجه نشه یا باید از متد POST استفاده کنید که نیاز است یک فرم HTML بسازید.
      یا اینکه اطلاعات داخل لینک مرورگر رو اینکد کنید و بعد در صفحه دریافت که اینجا مثلا برای شما single.php است اون اطلاعات رو از url دریافت و دیکد و استفاده کنید.
      البته با جاواسکریپت و ajax می توانید این مورد رو جوری بسازی که در پشت صحنه این اطلاعات ارسال شوند و لینک ظاهر شده برای کاربر فقط یک آبجکت نمایشی برای کلیک و ایجاد رویداد در پشت برای جاواسکریپت باشد.

      موفق باشید.

      پاسخ
      1. حسین ۳ بهمن ۱۳۹۸

        خیلی سپاسگذارم از محبت شما.

        پاسخ
  4. حسین ۲۶ دی ۱۳۹۸

    سلام استاد شفیعی خوب هستین. با زحمتای ما ، خیلی متشکرم که به سوالات بنده جواب میدین واقعاََ سپاسگذارم . یه سوال دیگه داشتم. کد php دارم که بازدید کننده ای که وارد پست صفحه میشه یه شماره میندازه که برای شمارش تعدادبازدیدگنندگان هست.حالا میخوام برای اولین بار که از پست صفحه بازدید میکنه شماره بندازه.دفعه بعد که میخواد مجدد بازدیدکنه شماره نندازه. برای این مشکل راه حلی سراغ دارین؟

    پاسخ
    1. حسن شفیعی ۲۶ دی ۱۳۹۸

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

      پاسخ
  5. حسین ۱۵ دی ۱۳۹۸

    سلام استاد خسته نباشید.برای پاسخ دادن به جواب (فرم تماس باما) که کاربران میفرستند. فرمی هست که بشه جواب رو به ایمیل کاربر فرستاد

    پاسخ
    1. حسن شفیعی ۱۷ دی ۱۳۹۸

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

      پاسخ
  6. حسین ۲۴ آذر ۱۳۹۸

    سلام استاد یه سوال داشتم . وقتی در یک فرم مقادیر را وارد میکنیم و سپس دکمه ارسال را میزنیم ارسال میشود.ولی اگر همان صفحه بدون زدن دکمه ارسال رفرش کنیم افزودن تکرار میشود. برای جلوگیری از تکرار چه باید کرد لطفا مثالی بیاورید متشکرم

    پاسخ
    1. حسن شفیعی ۲۹ آذر ۱۳۹۸

      سلام. اگر منظورتون ارسال و ثبت شدن این داده ها در دیتابیس است که باید حتما چک کنید که یک مقدار یکتا مثل ایمیل تکراری نباشد و در صورت تکرار خطایی برای کاربر نمایش داده شود که قبلا ثبت شده.
      نام کاربری یکتا در php
      موفق باشید

      پاسخ
  7. Saeeded ۷ آبان ۱۳۹۸

    سلام
    میشه در حالت cronjobs با استفاده از متد post داده ای رو به یک فایل دیگه فرستاد و فایل مقصد روی اون متغیر عملیاتی انجام بده ؟؟ بدون دخالت دست یا اجراشدن روی مرورگر خاصی ؟؟؟
    مثلا من با استفاده از cronjob داده ای رو داخل بانک اطلاعاتی جستجو کردم و فیلد های مشخصی رو پست کنم به url دیگه ای که متد post رو قبول میکنه.

    پاسخ
    1. حسن شفیعی ۸ آبان ۱۳۹۸

      سلام.
      متد های GET, POST, PUT, DELETE , .. برای HTTP هستند نه cron job . چرا که کرون جاب فقط فایل را اجرا می کند.
      آموزش cron job در php
      بنابراین اگر میخواید همچین موردی رو پیاده کنید باید داخل خود کدهای php این عملیات مربوط به دیتابیس رو انجام بدید
      موفق باشید.

      پاسخ
  8. علی ۵ آبان ۱۳۹۸

    سلام
    یک سوالی داشتم من از یک سایتی نام کاربری و پسورد دارم که اکانت اون شرکت برای من اومده فعال کرد و وقتی روی سیستم توی منزل می خوام وارد اکانت بشم اجازه بهم نمیده ولی با سیستم داخل مغازه می تونم وارد اکانت سایت بشم زبان سایت asp ولی می خوام بدونم چه جوری تونسه این قابلیت ایجاد کنه که فقط با سیستم داخل مغازه وارد اکانت بشم آیا مشخصه خاصی از سیستم من گرفته که اول اون query میگیری و در صورت برابری اجازه ورود میده؟
    ممنون میشم یک توضیحی در این مورد بهم بدین

    پاسخ
    1. حسن شفیعی ۸ آبان ۱۳۹۸

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

      پاسخ
  9. حسین ۲۰ شهریور ۱۳۹۸

    باسلام خدمت استاد. یک سوال در موردphp .مثلافقط یک دکمه داریم که من میخوام وقتی روی این لینگ کلیک شد یک کوئری رو مثل این که انجام بده (اول بنویسه سلام بعد بنویسه ممنون ) باید از چه دستوری استفاده کنم لطفا راهنماییم کنید

    پاسخ
    1. حسن شفیعی ۲۰ شهریور ۱۳۹۸

      سلام لطف دارید.
      منظورتون از کویری چی هست. شما دکمه رو باید داخل فرم بزارید (تگ input با type=submit در تگ form در html) تا بتونید اینجا با زدن این دکمه در سمت کد php بگید که دوتا echo پشت سر هم در تگ های مورد نظر قرار بده.
      کار با فرم ها در php

      پاسخ
      1. حسین ۲۰ شهریور ۱۳۹۸

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

        پاسخ
      2. حسین ۲۰ شهریور ۱۳۹۸

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

        پاسخ
      3. حسن شفیعی ۲۰ شهریور ۱۳۹۸
      4. حسین ۲۰ شهریور ۱۳۹۸

        خیلی سپاسگذارم

        پاسخ
      5. حسین ۲۰ شهریور ۱۳۹۸

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

        پاسخ
      6. حسن شفیعی ۲۰ شهریور ۱۳۹۸

        سلام. این مورد در ذخیره سازی مهم نیست. سعی کنید در دیتابیس بصورت timestamp ذخیره کنید استانداردتر هست و هرجایی که خواستید چه شمسی یا میلادی دیگه میتونید نمایش بدید
        آموزش مربوطه هم در این صفحه قرار داره : توابع تاریخ و زمان در php + تاریخ شمسی

        پاسخ
      7. حسین ۲۰ شهریور ۱۳۹۸

        ببخشید مهندس من به صورت timestamp ذخیره کردم الان هم به به تاریخ میلادی ثبت میکنه ولی میخوام تاریخ وزمان رو توی جدول دیتابیس به صورت شمسی ثبت کنه و نشون بده

        پاسخ
      8. حسن شفیعی ۲۰ شهریور ۱۳۹۸

        آموزش رو کامل بخونید و رو پروژتون اجرا کنید متوجه می شید

        پاسخ
      9. حسین ۲۱ شهریور ۱۳۹۸

        ببخشید مهندس منظورم روی پروژه نیست اون درست نشون میده. فقط توی php myadmin خوده دیتابیس رو میگم!

        پاسخ
      10. حسن شفیعی ۲۱ شهریور ۱۳۹۸

        داخل دیتابیس باید ستون مورد نظر که برای ذخیره تاریخ هست رو روی utf8_persian_ci بزارید خود تیبل هم به اینصورت.

        پاسخ
  10. ali ۱۳ شهریور ۱۳۹۸

    سلام خسته نباشید
    یک سوال داشتم
    چه جوری میتونم یک متنی فقط در نسخه موبایل نمایش دهیم؟یعنی وقتی با موبایل وارد سایت شد اون متن نمایش بدم؟

    پاسخ
    1. حسن شفیعی ۱۳ شهریور ۱۳۹۸

      سلام ممنون.
      از این آموزش استفاده کنید
      https://netparadis.com/mobile-device-detection-in-php
      داخل if($ua->is_mobile()){ میتونید متن دلخواه رو نمایش بدید
      موفق باشید.

      پاسخ
  11. محمد رخشانی ۱۲ شهریور ۱۳۹۸

    در قسمت “مزیت و معایب استفاده از متد های مختلف” دوبار از کلمه GET اشتباه استفاده شده! لطفا اصلاح فرمایید

    پاسخ
    1. حسن شفیعی ۱۲ شهریور ۱۳۹۸

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

      پاسخ
دوره های آموزشی