آموزش کار با فرم در PHP

ساخت فرم در php و دریافت اطلاعات از کاربران یکی از اصلی‌ترین بخش‌های یک سایت است. کار با فرم‌ها یکی از جذابیت‌های سیستم تحت وب است. در این آموزش اصول و هر آنچه برای ایجاد فرم با PHP نیاز را بررسی خواهیم کرد.

برای ارسال و دریافت اطلاعات در php به طور معمول از فرم‌ها استفاده می‌کنیم. این formها توسط تگ‌های HTML ایجاد می‌شوند. در سمت سرور اطلاعاتی که توسط فرم‌ها ارسال شده‌اند را دریافت کرده و پردازش می‌کنیم.

پایه و اساس همه فرم‌ها تقریباً به یک شکل هستند. قصد داریم در این آموزش با زبانی ساده با این اصول آشنا شده تا بتوانید هر فرمی که خواستید ایجاد کنید. فرم‌هایی نظیر:

  • فرم ورود
  • ساخت فرم ثبت‌نام با PHP
  • ارسال ایمیل
  • ذخیره اطلاعات ثبت شده

ابتدا با فرآیند فرم‌ها و تگ‌های مربوط آشنا می‌شویم. پس از آن یاد می‌گیریم چگونه با فرم‌های PHP کار کرده و داده‌ها را دریافت کنیم. در انتها نیز در مورد اعتبارسنجی و ذخیره فرم‌ها صحبت خواهیم کرد.

اگر با ایجاد فرم در HTML آشنا هستید یا فقط می‌خواهید در مورد پردازش فرم با PHP بخوانید، به بخش دوم آموزش مراجعه کنید.

ساخت فرم در php

برای ساخت یک فرم ابتدا باید با تگ‌های HTML یک فرم متناسب با نیاز خود ایجاد کنیم. سپس با مشخص کردن نوع و مقصد ارسال، فرم را به کاربر نمایش دهیم. پس از تکمیل و کلیک روی دکمه ارسال، اطلاعات وارد شده در فیلدها به سمت سرور ارسال می‌شوند.

در سمت سرور و با کمک php داده‌های ارسال را دریافت کرده و روی آن‌ها پردازش انجام می‌دهیم.

این پردازش می‌توانید اعتبارسنجی داده‌ها، ذخیره آن‌ها، واکشی رکوردهای مرتبط از دیتابیس یا ترکیبی از آن‌ها باشد.

محدوده فرم در html با تگ form مشخص می‌شود.

به کمک تگ‌های input می‌توانیم فیلدهای ساده و اساسی فرم را ایجاد کنیم. این تگ یک ویژگی به نام type دارد که می‌تواند مقادیر مختلفی داشته باشد. چند مورد از پر کاربردترین آن‌ها عبارت‌اند از:

  • text : فیلد متنی تک خطی
  • radio : دکمه‌های رادیویی (انتخاب یکی از چندتا)
  • checkbox : امکان انتخاب صرف یا همه گزینه‌ها
  • submit : دکمه ارسال فرم

اگر با این تگ‌ها آشنا نیستید یا می‌خواهید اطلاعات بیشتری کسب کنید، به این لینک مرجع مراجعه کنید.

کدهای یک فرم ساده با دو فیلد برای دریافت نام و سن کاربر به صورت زیر خواهد بود:

<form>
    <input type="text">
	<input type="number">
	<input type="submit" value="ارسال">
</form>

ایجاد فرم برای ارسال داده

این تگ‌ها یک ویژگی به نام name دارند که هر فیلد را از دیگری متمایز می‌کند. من برای فیلد اولی نام name و برای دومی age را در نظر می‌گیرم. می‌توانیم برای فیلد دکمه هم یک نام انتخاب کنیم اما این کار ضروری نیست.

تگ form دو ویژگی مهم دارد.

ویژگی method مشخص می‌کند که اطلاعات این فرم چگونه باید ارسال شوند. برای مشخص کردن نوع ارسال، دو انتخاب get یا post داریم.

به طور خیلی خلاصه، روش get همه فیلدها را از طریق URL به صفحه مقصد ارسال می‌کند اما روش post فیلدها را در header درخواست http قرار داده و کاربر چیزی از آن‌ها را در URL مقصد نخواهد دید.

در این آموزش از متد post استفاده می‌کنم. اما اگر می‌خواهید اطلاعات بیشتری در مورد این دو روش کسب کنید، آموزش get و post در php را ببینید.

ویژگی action مقصد ارسال داده‌ها را مشخص می‌کند. اگر این مقدار تعریف نشود، پس از ارسال فرم، همه داده‌ها به همان صفحه ارسال می‌شوند. (به خودش) در این آموزش برای درک بهتر، مقصد ارسال فرم PHP را فایل process.php در کنار فرم در نظر می‌گیریم.

فیلدهای فرم ساده با HTML
فیلدهای فرم ساده‌ای که کدش را نوشته‌ایم

فرم ما آماده است. کدهای زیر را درون فایل index.php ذخیره می‌کنیم.

<form method="post" action="process.php">
    نام: <input type="text" name="name">
    سن: <input type="number" name="age">
    <input type="submit" value="ارسال">
</form>
آموزش ساخت فرم ورود با PHP

آموزش ساخت فرم ورود با PHP

کار با فرم 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

یکی از جذاب‌ترین کارهایی که در کار با فرم‌های 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 آشنا نیستید، حتماً در مورد آن‌ها بخوانید. اینکه بدانید چه ویژگی‌هایی برای یک فیلد می‌توان تعریف کرد، ذهن شما را برای طراحی فرم خلاق‌تر خواهد کرد.

برای مثال، اگر می‌خواهید اجباری بودن فیلد را بررسی کنید، به این منبع مراجعه کرده و کدهایش را ببینید.

نمایش خطا در فرم

اگر در اعتبارسنجی فیلدهای فرم متوجه خطایی شویم، دو راه‌حل کلی برای نمایش خطا‌ها وجود دارد.

  1. نمایش پیام خطا در صفحه process.php مشابه پیامی که در مثال نمایش دادیم.
  2. برگشت به فرم و نمایش ارور در فرم 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{
      // Login Process
    }
  }

حال کافی است بررسی کنیم اگر مقدار متغیر $error تعریف شده بود، متن آن را نمایش دهیم. در نتیجه کد فرم لاگین ما با php به صورت زیر می‌شود:

<?php
  if( isset($_POST['login']) ){
    if( !isset($_POST['name']) || !isset($_POST['age'])){
      $error = "لطفا هر دو فیلد را کامل کنید.";
    }else{
      // Login Process
    }
  }
?>
<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
نمایش خطا در اعتبارسنجی فرم php

امیدوارم با نحوه ساخت فرم در PHP آشنا شده باشید و بتوانید فرم‌های حرفه‌ای بسازید. اگر دوست دارید فرم بدون بارگذاری (refresh) صفحه به سرور ارسال شود، می‌توانید از AJAX در PHP استفاده کنید.

اگر سؤال یا تجربه‌ای در کار با فرم‌ها دارید، بخش دیدگاه‌ها برای اشتراک‌گذاری نظراتتان با ما و دوستانتان است. 🙂

این آموزش بخشی از یک آموزش جامع و قدم به قدم در سبز دانش است: دوره رایگان آموزش PHP