کار با فرم PHP
نوبت آن رسیده که کدهای PHP را بنویسیم که اطلاعات ارسال شده توسط فرم را پردازش کند. در برخی منابع به این کار، گرفتن ورودی از کاربر در PHP نیز گفته میشود که ما بیشتر با هموان عنوان پردازش فرم در موردش صحبت میکنیم.
مقادیری که در فیلدهای فرم وارد شده و ارسال میشود به صورت متغیرهایی در PHP در دسترس ما خواهند بود. ما این اطلاعات را میگیریم و هر بلایی که خواستیم سرشان در میآوریم. 🙂
از نمایش همان دادهها گرفته، تا ذخیره آنها در دیتابیس. پس از دریافت اطلاعات فرم، بسته به برنامه و کاری که میخواهیم انجام دهیم، پیش خواهیم رفت. من در این آموزش اعتبارسنجی فرم PHP را بررسی کرده و در نهایت مثالی برای ثبت اطلاعات در پایگاه داده میزنم.
دریافت اطلاعات فرم در php
اطلاعاتی که توسط فرمها به PHP ارسال میشوند در یکی از د متغیر $_POST
یا $_GET
قرار میگیرند. بسته به اینکه روش (method) ارسال فرم را چگونه تعریف کردهایم، باید از یکی از این متغیرها استفاده کنیم.
دسترسی به این متغیرها مشابه آرایه انجمنی در PHP است. در مثال ما، متغیر $_POST
یک نوع آرایه است که کلید هر عنصر درون آن همان ویژگی name فیلدهای فرمی که ساختیم خواهد بود.
در نتیجه برای خواندن فیلد نام کاربر از $_POST['name']
و برای سن او از $_POST['age']
استفاده میکنیم.
اگر از متد get برای فرم خود استفاده کنید، دسترسی به دادهها دقیقاً مشابه POST است با این تفاوت که نام متغیر اصلی متفاوت خواهد بود.
درون فایل process.php
کد زیر را قرار میدهم. این کد در یک خط، نام و سن کاربر را با دستور echo (چاپ در php) نمایش میدهد.
<?php
echo $_POST['name'];
echo ' عزیز، شما ';
echo $_POST['age'];
echo ' سال سن دارید!';
ساده شده قطعه کد بالا به صورت زیر خواهد بود. در این کد از عملگر .
برای اتصال چند رشته PHP بهم استفاده کردهام:
echo $_POST['name'] . ' عزیز، شما ' . $_POST['age'] . ' سال سن دارید!';
اگر فرم را تکمیل و ارسال کنم، خروجی برنامه چیزی شبیه تصویر زیر میشود.
اعتبارسنجی فرم PHP
با اینکه در HTML5
میتوان اعتبارسنجیهای سادهای انجام داد، اما بهتر است اگر لازم است اعتبارسنجی فرم را با PHP انجام دهیم.
بررسی وجود یک فیلد در فرم
اگر یک فیلد توسط کاربر پر نشده باشد، اگر آن را با $_POST
یا $_GET
فراخوانی کنیم، با خطا مواجه خواهیم شد. دلیلش این است که هیچ عنصری در آرایه با نام مورد نظرمان وجود ندارد.
برای اینکه قبل از دسترسی به مقدار فیلد فرم PHP از وجود داشتن آن مطمئن شویم، از تابع isset()
استفاده میکنیم. این تابع یک ورودی گرفته و اگر آن مقدار تعریف شده باشد (وجود داشته باشد) به ما true میدهد.
در مثالی که زدیم، برای جلوگیری از بروز خطا، میتوان به صورت زیر عمل کرد:
<?php
if( isset( $_POST['name'] ) && isset( $_POST['age'] ) ){
echo $_POST['name'] . ' عزیز، شما ' . $_POST['age'] . ' سال سن دارید!';
}
این یک مثال برای کاربرد بررسی وجود مقدار در فیلد است. این کد را میتوان به کمک شرطهای یک خطی به صورت حرفهایتری نوشت.
اعتبارسنجی فیلدها
اعتبارسنجی فرم با PHP بستگی به نوع فیلدها دارد. برای فیلدهای متنی معمولاً کاراکترهای سفید ابتدا و انتهای آن را با تابع trim()
حذف کرده و سپس کاراکترهای غیرمجاز را در آن بررسی میکنند.
استفاده از تابع زیر که فیلد را به عنوان ورودی گرفته و اصلاحاتی روی آن انجام میدهد، میتواند به پاکسازی مقدار فیلد و افزایش امنیت فرم در PHP کمک زیادی کند.
function cleaned_input( $data ){
$data = trim( $data );
$data = stripslashes( $data );
$data = htmlspecialchars( $data );
return $data;
}
در این تابع، پس از حذف کاراکترهای خالی ابتدا و انتهای داده، کاراکترهای غیرمجاز در فیلد را غیرفعال میکنیم.
اگر چند فیلد اجباری در فرم PHP خود داشته باشید، باید آنها را در سمت سرور نیز بررسی کنید. یاد گرفتیم که به کمک تابع isset()
وجود آن را بررسی کنیم. همچنین با تابع empty()
میتوان خالی بودن یا نبودن مقدار را هم چک کرد.
اگر بخواهید فیلد ایمیل یا شماره موبایل را اعتبارسنجی کنید، میتوانید از الگوها (patterns) نیز استفاده کنید. توضیح این موارد خارج از بحث ساخت فرم در PHP است. با جستجوی کلیدواژههای گفته شده آموزشهای خوبی پیدا خواهید کرد.
ذخیره اطلاعات فرم با php
یکی از جذابترین کارهایی که در کار با فرمهای PHP میتوان انجام داد، ارتباط با دیتابیس و ذخیره اطلاعات در آن است. برای ذخیره اطلاعات فرم در دیتابیس روشهای اتصال به دیتابیس با php مختلفی وجود دارد که بهتر است در مورد هر کدام اطلاعات بیشتری کسب کنید.
در این مثال از روش PDO در PHP استفاده کرده و اطلاعات ارسالی را در جدول form_logs
ذخیره میکنم.
<?php
if( !isset($_POST['name']) || !isset($_POST['age'])){
echo 'وارد کردن هر دو فیلد الزامی است.';
}
try {
$connection = new PDO("mysql:host=127.0.0.1; dbname=sabzdanesh_db", "username", "password");
$stmt = $connection->prepare("INSERT INTO form_logs (name, age) VALUES (?, ?)");
$stmt->execute([$_POST['name'], $_POST['age']]);
echo 'اطلاعات شما با موفقیت ثبت شد.';
}catch (PDOException $e){
echo $e.getMessage();
}
ساخت فرم پیشرفته در PHP
هر چیزی که برای ساخت فرم PHP نیاز داشتید تا به الآن یاد گرفتید! در بخش انتهایی آموزش راهنماییها و مثالهایی برای کاربردهای حرفهای میزنم.
پیشنهاد میکنم اگر با ساختار تگهای فرم در HTML آشنا نیستید، حتماً در مورد آنها بخوانید. اینکه بدانید چه ویژگیهایی برای یک فیلد میتوان تعریف کرد، ذهن شما را برای طراحی فرم خلاقتر خواهد کرد.
برای مثال، اگر میخواهید اجباری بودن فیلد را بررسی کنید، به این منبع مراجعه کرده و کدهایش را ببینید.
نمایش خطا در فرم
اگر در اعتبارسنجی فیلدهای فرم متوجه خطایی شویم، دو راهحل کلی برای نمایش خطاها وجود دارد.
- نمایش پیام خطا در صفحه
process.php
مشابه پیامی که در مثال نمایش دادیم.
- برگشت به فرم و نمایش ارور در فرم PHP
مثالی که زدیم مشابه حالت اول بود. برای حالت دوم، اگر فایل پردازشی مثل مثال قبل جدا باشد، باید یک (یا چند) متغیر حاوی خطا را به صفحه قبلی بفرستیم. این کار میتواند در سادهترین حالت با درخواست GET و یا همراه با هدرهای HTTP انجام شود.
برای سادهتر شدن روش انجام کار، فرض میکنیم پردازش اطلاعات نیز در همان صفحه فرمها انجام میشود.
میخواهیم مراحل ساخت فرم ورود با PHP را طی کنیم. وارد کردن نام کاربری و رمز عبور در این فرم اجباری است. کدهای HTML فرم چیزی شبیه به کدهای زیر میشود:
<form method="post">
<input type="text" name="username" required placeholder="نام کاربری">
<input type="password" name="password" required placeholder="رمز عبور">
<input type="submit" name="login" value="ورود">
</form>
در ابتدای صفحه بررسی میکنیم که اگر فرم ارسال شده بود اما حداقل یکی از فیلدها خالی بود، پیام خطا را نمایش دهد.
<?php
if( isset($_POST['login']) ){
if( !isset( $_POST['name'] ) || !isset( $_POST['age'] )){
$error = "لطفا هر دو فیلد را کامل کنید.";
}else{
}
}
حال کافی است بررسی کنیم اگر مقدار متغیر $error
تعریف شده بود، متن آن را نمایش دهیم. در نتیجه کد فرم لاگین ما با php به صورت زیر میشود:
<?php
if( isset($_POST['login']) ){
if( !isset($_POST['name']) || !isset($_POST['age'])){
$error = "لطفا هر دو فیلد را کامل کنید.";
}else{
}
}
?>
<html>
<head>
<title>فرم ورود به سایت آزمایشی سبز دانش</title>
</head>
<body>
<?php
if( isset($error) )
echo '<p style="color:red">' . $error . '</p>';
?>
<form method="post">
<input type="text" name="username" required placeholder="نام کاربری">
<input type="password" name="password" required placeholder="رمز عبور">
<input type="submit" name="login" value="ورود">
</form>
</body>
</html>
اگر بتوانیم به نوعی اعتبارسنجی html5
(ویژگی required در فیلدها) را دور زده و فرم را ارسال کنیم، با خطایی مشابه تصویر برخورد میکنیم.
امیدوارم با نحوه ساخت فرم در PHP آشنا شده باشید و بتوانید فرمهای حرفهای بسازید. اگر دوست دارید فرم بدون بارگذاری (refresh) صفحه به سرور ارسال شود، میتوانید از AJAX در PHP استفاده کنید.
اگر سؤال یا تجربهای در کار با فرمها دارید، بخش دیدگاهها برای اشتراکگذاری نظراتتان با ما و دوستانتان است. 🙂