در قسمت قبلی کار با توابع PHP را یاد گرفتیم. در این بخش از سری آموزش PHP قصد داریم به شما نحوه ارسال اطلاعات به سرور با متدهای GET و POST و دریافت آن توسط PHP را آموزش بدیم.
متدهای ارسال اطلاعات به سرور
ارتباطات مرورگر وب با سرور معمولا با یکی از دو متد HTTP به نام های GET و POST انجام می شود.
هر دو این متدها اطلاعات را بصورت متفاوت پاس می دهند و هر کدام مزیت و معایب خود را دارند که در زیر توضیح دادیم.
متد GET (گت)
در متد GET داده ارسال شده بصورت پارامترهای URL که معمولا جفت های نام و مقدار آنها است و با علامت &
جدا شده اند, هستند.
بطور معمول, یک URL با داده GET بصورت زیر است :
1 |
http://www.example.com/action.php?name=john&age=24 |
بخش های name و age در این آدرس URL همان پارامترهای GET هستند و بخش های جلوی عملامت مساوی مقادیر آن پارامترها می باشند.
مزیت و معایب استفاده از متد GET
- از آنجا که داده های ارسالی با متد GET در URL نمایش داده می شوند, امکان بوکمارک کردن صفحه خاص با مقادیر query string آن وجود دارد.
- متد GET برای ارسال داده های حساس مثل نام کاربری و رمزعبور مناسب نیستند, چراکه بطور کامل در URL قابل نمایش هستند و در تاریخچه مرورگر ذخیره می شوند.
- از آنجا که متد GET داده ها را به متغیر محیطی سرور اختصاص می دهد, پس طول URL ما محدود است بنابراین یک محدودیت در حجم داده ارسالی داریم.
PHP متغیر سراسری $_GET
را برای دسترسی به تمام اطلاعات ارسال شده توسط مرورگر یا فرم HTML که از method=”get”
استفاده می کند, در اختیار ما قرار می دهد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<!DOCTYPE html> <html lang="en"> <head> <title>Example of PHP GET method</title> </head> <body> <?php if(isset($_GET["name"])){ echo "<p>Hi, " . $_GET["name"] . "</p>"; } ?> <form method="get" action="<?php echo $_SERVER["PHP_SELF"];?>"> <label for="inputName">Name:</label> <input type="text" name="name" id="inputName"> <input type="submit" value="Submit"> </form> </body> |
متد POST (پست)
در متد POST داده ارسالی به سرور به عنوان یک پکیج در یک ارتباط جداگنه با پردازش اسکریپت می باشد. داده ارسالی با متد POST در URL قابل نمایش نیست.
مزیت و معایب استفاده از متد POST
- امن تر از متد GET است چرا که اطلاعات وارد شده توسط کاربر در مرورگر قابل نمایش نیست یا در لاگ سرور ذخیره نمی شود.
- محدودیت حجم داده ای که می توانیم ارسال کنیم بسیار بیشتر است و می توان داده متنی مثل باینری برای آپلود فایل را با POST ارسال کرد.
- از آنجا که داده ارسال با متد POST در URL قابل نمایش نیست, پس بوکمارک کردن صفحه با کویری مشخص امکان پذیر نیست.
همانند $_GET
, PHP متغیر سراسری $_POST
را برای دسترسی به تمام اطلاعات ارسال شده توسط مرورگر یا فرم HTML که از method=”post”
استفاده می کند, در اختیار ما قرار می دهد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<!DOCTYPE html> <html lang="en"> <head> <title>Example of PHP POST method</title> </head> <body> <?php if(isset($_POST["name"])){ echo "<p>Hi, " . $_POST["name"] . "</p>"; } ?> <form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>"> <label for="inputName">Name:</label> <input type="text" name="name" id="inputName"> <input type="submit" value="Submit"> </form> </body> |
متغیر $_REQUEST
PHP یک متغیر سوپرگلوبال دیگر $_REQUEST
را که شامل هر دو مقدار متغیر $_GET
و $_POST
و همچنین $_COOKIE
می باشد را در اختیار ما قرار می دهد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<!DOCTYPE html> <html lang="en"> <head> <title>Example of PHP $_REQUEST variable</title> </head> <body> <?php if(isset($_REQUEST["name"])){ echo "<p>Hi, " . $_REQUEST["name"] . "</p>"; } ?> <form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>"> <label for="inputName">Name:</label> <input type="text" name="name" id="inputName"> <input type="submit" value="Submit"> </form> </body> |
در مورد کوکی ها و مدیریت فرم ها در بخش های بعدی بیشتر یاد می گیرید.
نکته : متغیرهای سوپرگلوبال $_GET
, $_POST
, $_REQUEST
جزء متغیرهای از پیش ساخته شده هستند که در تمام اسکوپ ها داخل اسکریپت در دسترس هستند.
امیدوارم در این بخش آموزش PHP, از کار با متد GET و POST در php نهایت استفاده را برده باشید.
در بخش بعدی وارد بخش مباحث پیشرفته PHP می شویم و برای اولین مورد نحوه کار با توابع تاریخ و زمان در PHP را یاد می گیریم.
هر سوالی داشتید ، از قسمت نظرات ارسال کنید . سریعا ، پاسخگوی سوالات شما هستیم .
موفق باشید
خوب بود
سلام استاد خوب هستین یه سوال داشتم. درمورد اتصال به دیتابیس به (سرور اصلی سایت) در قسمتی که لوکال هاست مینوشتیم باید چی نوشته بشه یه مثال عملی بفرمایید
;(“conn = mysqli_connect(“localhost”, “hossen”, “123456”, “table$
سلام ممنون.
همان localhost باید قرار بدید و نیازی به تغییر نیست.
فقط در موارد خیلی خاصی که یک سرور جدا از هاست فعلی دارید که روی آن دیتابیس نصب است می توانید آیپی ریموت سرور خارجی رو وارد کنید وگرنه در تمام مثال های ارایه شده و حالت معمول این بخش فقط localhost نوشته می شود.
موفق باشید.
سلام استاد شفیعی خسته نباشید. یه سوال داشتم ،وقتی متغیری را به روش لینک به صفحه دیگری ارسال میکنم ودر ان با متد get دریافت میکنم محتویات متغیردرمرورگر نمایش داده میشود .حالا میخوام محتویات متغیر در مرورگر نمایش داده نشه .همین متغیر رو به روش post به صفحه دیگر ارسال کنم چه باید بکنم. لطفا نمونه مثالی بیاورید از لطف شما سپاسگذارم.
<a href="./single.php?id=”>
سلام. ممنون لطف دارید.
به طور معمول نمی تونید با GET جوری ارسال کنید که در لینک مرورگر نمایش داده نشه.
و اگر می خواهید کاربر متوجه نشه یا باید از متد POST استفاده کنید که نیاز است یک فرم HTML بسازید.
یا اینکه اطلاعات داخل لینک مرورگر رو اینکد کنید و بعد در صفحه دریافت که اینجا مثلا برای شما single.php است اون اطلاعات رو از url دریافت و دیکد و استفاده کنید.
البته با جاواسکریپت و ajax می توانید این مورد رو جوری بسازی که در پشت صحنه این اطلاعات ارسال شوند و لینک ظاهر شده برای کاربر فقط یک آبجکت نمایشی برای کلیک و ایجاد رویداد در پشت برای جاواسکریپت باشد.
موفق باشید.
خیلی سپاسگذارم از محبت شما.
سلام استاد شفیعی خوب هستین. با زحمتای ما ، خیلی متشکرم که به سوالات بنده جواب میدین واقعاََ سپاسگذارم . یه سوال دیگه داشتم. کد php دارم که بازدید کننده ای که وارد پست صفحه میشه یه شماره میندازه که برای شمارش تعدادبازدیدگنندگان هست.حالا میخوام برای اولین بار که از پست صفحه بازدید میکنه شماره بندازه.دفعه بعد که میخواد مجدد بازدیدکنه شماره نندازه. برای این مشکل راه حلی سراغ دارین؟
سلام. خوشحالیم که راهنمایی های ارایه شده مفید واقع شده.
شما باید اطلاعات کاربر مانند آی پی رو در جایی مثل دیتابیس ذخیره کنید و دفعه بعد که همان کاربر صفحه را مشاهده کرد اول باید یک شرط بزارید و داخل دیتابیس این سطر را جستجو کنید و اگر وجود نداشت بعد یک شماره اضافه کنید.
بجز آی پی می تونید یک کوکی ایجاد کنید که باز همان شرایط بالا باید قبل شماره انداختن صحت وجود کوکی در مرورگر کاربر را بررسی کنید.
موفق باشید.
سلام استاد خسته نباشید.برای پاسخ دادن به جواب (فرم تماس باما) که کاربران میفرستند. فرمی هست که بشه جواب رو به ایمیل کاربر فرستاد
سلام.
در ادامه کد شما کافیه یک تابع برای ارسال ایمیل صدا بزنید و داخل این تابع موضوع و متن پاسخ به همراه آدرس ایمیل رو پاس بدید تا در پشت صحنه این عملیات دلخواه شما انجام بشه.
ارسال ایمیل با php
موفق باشید.
سلام استاد یه سوال داشتم . وقتی در یک فرم مقادیر را وارد میکنیم و سپس دکمه ارسال را میزنیم ارسال میشود.ولی اگر همان صفحه بدون زدن دکمه ارسال رفرش کنیم افزودن تکرار میشود. برای جلوگیری از تکرار چه باید کرد لطفا مثالی بیاورید متشکرم
سلام. اگر منظورتون ارسال و ثبت شدن این داده ها در دیتابیس است که باید حتما چک کنید که یک مقدار یکتا مثل ایمیل تکراری نباشد و در صورت تکرار خطایی برای کاربر نمایش داده شود که قبلا ثبت شده.
نام کاربری یکتا در php
موفق باشید
سلام
میشه در حالت cronjobs با استفاده از متد post داده ای رو به یک فایل دیگه فرستاد و فایل مقصد روی اون متغیر عملیاتی انجام بده ؟؟ بدون دخالت دست یا اجراشدن روی مرورگر خاصی ؟؟؟
مثلا من با استفاده از cronjob داده ای رو داخل بانک اطلاعاتی جستجو کردم و فیلد های مشخصی رو پست کنم به url دیگه ای که متد post رو قبول میکنه.
سلام.
متد های GET, POST, PUT, DELETE , .. برای HTTP هستند نه cron job . چرا که کرون جاب فقط فایل را اجرا می کند.
آموزش cron job در php
بنابراین اگر میخواید همچین موردی رو پیاده کنید باید داخل خود کدهای php این عملیات مربوط به دیتابیس رو انجام بدید
موفق باشید.
سلام
یک سوالی داشتم من از یک سایتی نام کاربری و پسورد دارم که اکانت اون شرکت برای من اومده فعال کرد و وقتی روی سیستم توی منزل می خوام وارد اکانت بشم اجازه بهم نمیده ولی با سیستم داخل مغازه می تونم وارد اکانت سایت بشم زبان سایت asp ولی می خوام بدونم چه جوری تونسه این قابلیت ایجاد کنه که فقط با سیستم داخل مغازه وارد اکانت بشم آیا مشخصه خاصی از سیستم من گرفته که اول اون query میگیری و در صورت برابری اجازه ورود میده؟
ممنون میشم یک توضیحی در این مورد بهم بدین
سلام. احتمالا روی آیپی یا رنج خاصی از آیپی این مورد رو ست کردند.
موفق باشید.
باسلام خدمت استاد. یک سوال در موردphp .مثلافقط یک دکمه داریم که من میخوام وقتی روی این لینگ کلیک شد یک کوئری رو مثل این که انجام بده (اول بنویسه سلام بعد بنویسه ممنون ) باید از چه دستوری استفاده کنم لطفا راهنماییم کنید
سلام لطف دارید.
منظورتون از کویری چی هست. شما دکمه رو باید داخل فرم بزارید (تگ input با type=submit در تگ form در html) تا بتونید اینجا با زدن این دکمه در سمت کد php بگید که دوتا echo پشت سر هم در تگ های مورد نظر قرار بده.
کار با فرم ها در php
وقتی که روی لینک کلیک شد اول اکو کنه سلام و بااستفاده از دستور اپدیت عدد یک رو بفرسته به جدول دیتابیس که تعداد بازدید کنندگان رو میشموره
ببخشید یادم رفت در ادامه بنویسم . اسم دکمه همان(ادامه مطلب) است
ساخت لینک ادامه مطلب با php
خیلی سپاسگذارم
سلام ببخشید یه سوال دیگه دارم در مورد تعقیر دادن تاریخ دیتابیس لوکال هاست ومپ. از میلادی به شمسی چه طور میشه تعقیرش داد
سلام. این مورد در ذخیره سازی مهم نیست. سعی کنید در دیتابیس بصورت timestamp ذخیره کنید استانداردتر هست و هرجایی که خواستید چه شمسی یا میلادی دیگه میتونید نمایش بدید
آموزش مربوطه هم در این صفحه قرار داره : توابع تاریخ و زمان در php + تاریخ شمسی
ببخشید مهندس من به صورت timestamp ذخیره کردم الان هم به به تاریخ میلادی ثبت میکنه ولی میخوام تاریخ وزمان رو توی جدول دیتابیس به صورت شمسی ثبت کنه و نشون بده
آموزش رو کامل بخونید و رو پروژتون اجرا کنید متوجه می شید
ببخشید مهندس منظورم روی پروژه نیست اون درست نشون میده. فقط توی php myadmin خوده دیتابیس رو میگم!
داخل دیتابیس باید ستون مورد نظر که برای ذخیره تاریخ هست رو روی utf8_persian_ci بزارید خود تیبل هم به اینصورت.
سلام خسته نباشید
یک سوال داشتم
چه جوری میتونم یک متنی فقط در نسخه موبایل نمایش دهیم؟یعنی وقتی با موبایل وارد سایت شد اون متن نمایش بدم؟
سلام ممنون.
از این آموزش استفاده کنید
https://netparadis.com/mobile-device-detection-in-php
داخل if($ua->is_mobile()){ میتونید متن دلخواه رو نمایش بدید
موفق باشید.
در قسمت “مزیت و معایب استفاده از متد های مختلف” دوبار از کلمه GET اشتباه استفاده شده! لطفا اصلاح فرمایید
سلام. ممنون از توجهتون.
اصلاح شد.
موفق باشید.