در این مطلب و در ادامه آموزش مفاهیم زبان پی اچ پی (بدون لاراول) می خواهیم در مورد پردازش فرم های اچ تی ام ال و دریافت داده ها از طریق فرم های اچ تی ام ال صحبت کنیم. همانطور که پیش از این نیز توضیح داده ایم، به دو روش ۱) از طریق آدرس های URL و متد GET و یا ۲) از طریق فرم های اچ تی ام ال و متد POST می توانند داده ها را به سایت بفرستیم. همچنین توضیح دادیم که هرگز نباید از متد GET برای پردازش فرم های اچ تی ام ال استفاده کنید، در عوض از متد POST باید استفاده شود.

مطابق شکل زیر فرم اچ تی ام ال توسط تگ form ایجاد می شود که هر فرم می تواند شامل یک تا چندین زیر تگ مانند input یا button باشد. خود تگ input می تواند انواع متفاوتی داشته باشد که در ادامه فهرست شده اند. همچنین می توانید آموزش سایت w3school را برای درک بهتر فرم های اچ تی ام ال مطالعه کنید. در ادامه آموزش می دهیم چگونه فرم اچ تی ام ال را برای کار با پی اچ پی آماده کنید و چگونه داده ها را درون کدهای پی اچ پی دریافت و پردازش کنید. فهرست زیر انوع متفاوت تگ input را نشان می دهد.

۱ – text : برای دریافت یک متن تک خطی ساده مانند نام و نام خانوادگی

۲ – password : برای دریافت متن گذرواژه به طوری که متن آشکارا نشان داده نشود.

۳ – textarea : برای دریافت یک متن بزرگ و چند خطی

۴ – checkbox : هر فرم می تواند یک تا چندین checkbox داشته باشد که همزمان می توانیم یک یا چندین یا تمامی آنها را انتخاب کنیم.

۵ – radio : هر فرم می تواند یک یا چندین radio داشته باشد ولی تنها یکی از آنها را می توان انتخاب کرد.

۶ – submit : نقش دگمه (Button) را دارد و برای واگذاری داده ها به اسکریپت اچ تی ام ال استفاده می شود.

شکل زیر نمونه ساده ای از یک فرم اچ تی ام را نشان می دهد. نخستین مواردی که باید تنظیم شوند، خصوصیت های action و method در تگ form هستند. خصوصیت action در تگ form نام (و مسیر) فایل پی اچ پی را دریافت می کند که می خواهیم پس کلیک روی دگمه فرم، داده ها به آن اسکریپت (فایل) پی اچ پی فرستاده شوند. تگ method باید یکی از متدهای HTTP مانند GET یا POST باشد ولی توضیح دادیم که برای پردازش فرم های اچ تی ام ال باید از متد POST استفاده شود.

در شکل زیر سه تگ input به ترتیب از نوع text و checkbox ایجاد کرده ایم. همانطور که می بینید برای تعیین نوع تگ input یا به عبارت بهتر نوع ورودی برای تگ input باید خصوصیت type را با یکی از نوع های تگ input مقدار دهی کنیم. توجه کنید نوع تگ ها به تعیین نوع ستون جدول پایگاه داده تاثیر گذار است. به طور مثال اگر نوع تگ input برابر با text باشد، معمولا رشته را می خواهیم بفرستیم، پس احتمالا نوع ستون ذخیره کننده داده برابر با VARCHAR خواهد بود. همچنین اگر نوع تگ input از نوع checkbox باشد، پس حالت TRUE یا FALSE (یا انتخاب شده یا نشده دارد) پس می خواهیم نوع بولی (Boolean) را درون پایگاه داده و به صورت نوع TINYINT ذخیره کنیم.

خصوصیت name از تگ های اچ تی ام ال، نامی را برای تگ input تعیین می کنند که سپس از آن به عنوان نام کلیدی در آرایه سراسری POST_$ استفاده می شود. بنابراین با توجه به آنچه که گفته شده، زمانی که روی دگمه یا تگ input از نوع submit کلیک می شود، تمامی داده های دریافتی از فرم به فایل پی اچ پی فرستاده می شوند که توسط خصوصیت action از تگ form تعیین شده است. سپس درون فایل مشخص شده، توسط آرایه سراسری POST_$ می توانیم به مقدارهای فرستاده شده دسترسی داشته باشیم. توجه کنید آرایه POST_$ به صورا انجمنی است که هر کلید آن، همنام با مقدار خصوصیت های name درون تگ های input است. همچنین زمانی که شما فرم را اصطلاحا واگذار یا Submit می کنید، اگر فرم را خالی بفرستید، بازهم کلیدی همنام با مقدار خصوصیت name ایجاد خواهد شد، ولی مقدار آن کلید در آرایه POST_$ خالی (Empty) خواهد بود.

در فرم بالا مقدار خصوصیت action برابر با فایل php_html_forms_1.php است ولی شما می توانید هر فایلی در هر مسیری را تعیین کنید. همانطور که گفتیم پس از واگذاری فرم، می توانیم توسط آرایه POST_$ به داده های فرستاده شده دسترسی داشته باشیم. در کد زیر محتوای اسکریپت پی اچ پی را نشان می دهد که به ازای هر سه تگ input سه بار بررسی شده آیا مقداری برای تگ تعیین شده است، اگر تعیین شده یعنی تگ input مربوطه خالی فرستاده نشده است، پس مقدار آنرا نمایش می دهد، در غیر این صورت یک رشته دیگر نشان داده خواهد شد.

شکل سمت چپ زیر خروجی برنامه بالا را پیش از واگذاری یا کلیک روی دگمه Submit را نشان می دهد. می بینید که با اینکه هنوز دگمه کلیک نشده، ولی پیغام های خطوط ۶ و ۱۲ و ۱۸ نشان داده می شوند، در صورتی که می خواهیم در صورتی این خطوط نشان داده شوند که برای تگ input مربوطه مقداری تعیین نشده باشد. شکل سمت راست نیز اجرای برنامه، ولی پس از واگذاری فرم اچ تی ام ال را نشان می دهد.

راهکار مشکل بالا

برای رفع مشکل بالا، یعنی نشان دادن پیغام هایی مربوط به خالی بودن یا هر خطای دیگری، پیش از فرستادن (واگذاری) فرم به اسکریپت پی اچ پی، نخست باید بررسی کنید که آیا دگمه submit کلیک شده و سپس بهتر است بررسی کنید آیا نوع متد HTTP برابر با نوع POST است. در خط  ۲۴ از کد شکل زیر، بر خلاف کد شکل بالا، برای تگ input از نوع submit نیز خصوصیت name را مقدار دهی کرده ایم، زیرا می خواهیم در خط ۲ از کد بالا بررسی کنیم که آیا کلیدی به همنام با خصوصیت name برای نوع submit وجود دارد. به عبارت دیگر هر گاه تگ input از نوع submit کلیک شود، یک کلید همنام با خصوصیت name آن در آرایه POST_$ ایجاد می شود. در شرط بعدی، توسط کلید REQUEST_METHOD از آرایه SERVER_$ بررسی کردیم که آیا درخواست HTTP از نوع POST است. (واژه POST حتما با حروف بزرگ نوشته شود). سپس در شرط بعدی در خط ۳ بررسی کردیم که آیا حداقل یکی از سه فیلد خالی فرستاده شده باشد، در این صورت متغیر message$ با پیغام خطایی پر می شود ولی در صورتی که تمامی فیلدها پر شده باشند، پس متغیر message$ با پیغام مناسب پر می شود. در نهایت متغیر message$ در انتهای فرم (خط ۲۶ از کد زیر) نشان داده می شود.

شکل سمت چپ، خروجی را نشان می دهد که دست کم یکی از ورودی ها را پر نکرده باشیم و شکل سمت راست زمانی را نشان می دهد که تمامی فیلدها پر شده اند. یک نکته مهم اینکه اگر checkbox ها را انتخاب کرده باشید، هر کدام مقدار رشته on (حروف کوچک) را برگشت می دهند. به عبارت دیگر اگر فرض کنید دو checkbox به نام های checkbox1 و checkbox2 داشته باشید، باید به صورت زی بررسی کنید که هر کدام انتخاب شده اند و سپس واکنش مناسب را بر اساس نیازتان انجام دهید.

در مطلب بعدی توضیح داده ایم که می بایست برای استفاده از checkbox ها، توسط خصوصیت vlaue مقداری را برای یک checkbox یا گروهی از checkbox تعیین کنیم. اما بدانید اگر خصوصیت value مانند بالا تعیین نشود، که البته از دید برنامه نویسی کار اشتباهی است، در صورتی که checkbox انتخاب شود، مقدار رشته on است و اگر انتخاب نشده باشد، مقدار خالی (Empty) برگشت داده می شود.