
سر و کله زدن با فرم در PHP از اون مبحثهایی هست که زیاد درباره اش سوال پیش میاد مخصوصا برای کاربران تازه کار. توی این مقاله میخوایم همه سوراخ سمبه های فرمها رو با PHP کشف کنیم. انواع فیلد و ورودی رو معرفی می کنم و شیوه دسترسی به مقدارشون در PHP رو هم توضیح میدم.
اول از تگ form شروع می کنیم. تگ form چند تا attribute اصلی برای کار ما داره:
- action: باید حاوی آدرسی باشه که قراره اطلاعات فرم به اونجا ارسال بشه. مثلا یک فایل PHP ساختیم که قراره اطلاعات این فرم رو پردازش کنه، پس اینجا باید آدرس اون فایل رو بنویسیم تا بعد از فشار دادن دکمه Submit اطلاعات فرم به اونجا بره.
اگر این attribute رو خالی بذاریم یا اصلا استفاده اش نکنیم، بصورت پیش فرض، روی آدرسی که فرم درش قرار داره تنظیم میشه. مثلا form.html.
- method: روش ارسال اطلاعات بصورت GET یا POST. این مشخصه بصورت پیش فرض روی GET تنظیم شده. در هر دو اطلاعات سالم و سلامت به سرور فرستاده میشوند ولی با در نظر گرفتن مواردی. مقایسه این دو روش به این صورته:
- GET: اطلاعات بصورت ساده و کد نشده منتقل میشه. این روش دقیقا مشابه اینه که اطلاعات رو بصورت Query به URL اضافه کرده باشیم و وقتی فرم رو Submit می کنیم، این اطلاعات خودش به URL اضافه میشه و قابل دیدن میشه. باید توجه داشت که اطلاعات حساسی مثل Password نباید در معرض دید قرار بگیره پس نباید برای فرمی که اطلاعات مهمی داره از GET استفاده کنیم تا اطلاعات فرم توی Address Bar قابل رویت نشه. به اضافه اینکه IE توی حجم اطلاعات GET محدودیت داره. به این صورت که وقتی اطلاعات فرم بصورت Query به URL اضافه میشه، طول این URL حداکثر میتونه ۲۰۸۳ کاراکتر باشه.
در روش GET، چون اطلاعات فرم کد نمیشوند و ساده منتقل میشوند پس یک مقدار ناچیزی سبکتره!. اطلاعات فرم در این حالت، توسط آرایه GET_$ در PHP قابل دسترسیه. همچنین در روش GET از Upload خبری نیست، یعنی با GET نمیشه آپلود کرد.
- POST: این روش اطلاعات رو کد می کنه. چیزی به URL اضافه نمی کنه. محدودیت خاصی نداره و امکان آپلود فقط از طریق این روش ممکنه. اطلاعات این روش در PHP توسط آرایه POST_$ قابل دسترسیه.
enctype: روش کد کردن اطلاعات که یکی از مقادیر زیر میتونه باشه:
- application/x-www-form-urlencoded: این حالت پیش فرض روش POST.
- multipart/form-data: ارسال اطلاعات بدون کد کردن. آپلود فقط با این روش امکانپذیره!
- text/plain: شبیه حالت اول ولی کاراکترهای اسکی رو کد نمی کنه.
این مشخصه تقریبا هیچوقت بکار نمیاد غیر از زمان آپلود که از حالت دومش استفاده میشه.
یک توضیح کوتاه: توابع معمول برای چک کردن اطلاعات isset و empty هستند. اگر دقیق نمی دونی، تابع isset فقط موجود بودن یا null بودن متغیر رو چک می کنه. یعنی اگر متغیری اصلا وجود نداشته باشه یا برابر null باشه، این تابع FALSE میده و در غیر اینصورت همیشه TRUE میده. تابع empty با مقدار هم کار داره یعنی مقدار خالی یا صفر رو هم تشخیص میده
حالا فرم زیر رو ببین. این فرم همه جور فیلد و ورودی به دردبخور رو به انواع مختلف داره. میخوایم این فرم رو در PHP پردازش کنیم. روش چیدمان فیلدها، براساس نوع رفتار PHP با اونهاست. لطفا خوب، خط به خط این فرم رو مطالعه کن (مهمه!).