ساخت فرم با انتخاب تاریخ تولد

ساخت فرم با انتخاب تاریخ تولد و پردازش با PHP

ساخت فرم با انتخاب تاریخ تولد و پردازش با PHP

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

بخش اول: طراحی فرم HTML

برای شروع، باید یک فرم HTML ایجاد کنیم که شامل یک فیلد برای انتخاب تاریخ تولد باشد. از تگ <input type="date"> برای این منظور استفاده می‌کنیم. این تگ به طور خودکار یک تقویم را در مرورگر نمایش می‌دهد که کاربر می‌تواند از آن برای انتخاب تاریخ استفاده کند. در اینجا یک نمونه فرم HTML آورده شده است:

در این فرم، از ویژگی required برای اطمینان از اینکه کاربر حتماً تاریخ تولد خود را وارد کند، استفاده شده است. همچنین، نام فیلد ورودی را birthdate قرار داده‌ایم تا بتوانیم در PHP به راحتی به آن دسترسی پیدا کنیم. ویژگی action="process_form.php" مشخص می‌کند که فرم پس از ارسال به کدام فایل PHP ارسال شود. ویژگی method="post" نیز روش ارسال داده‌ها را به صورت POST تعیین می‌کند.

بخش دوم: پردازش فرم با PHP

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

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$birthdate = $_POST["birthdate"];

// اعتبارسنجی تاریخ
if (strtotime($birthdate) === false) {
echo "فرمت تاریخ نامعتبر است.";
} else {
// محاسبه سن
$birthdate_timestamp = strtotime($birthdate);
$current_date_timestamp = time();
$age = floor(($current_date_timestamp – $birthdate_timestamp) / (60 * 60 * 24 * 365.25));

// نمایش اطلاعات
echo "تاریخ تولد شما: " . $birthdate . "
“;
echo “سن شما: ” . $age . ” سال”;
}
} else {
echo “دسترسی مستقیم به این صفحه مجاز نیست.”;
}
?>

در این فایل PHP، ابتدا بررسی می‌کنیم که آیا فرم به روش POST ارسال شده است یا خیر. سپس، مقدار فیلد birthdate را از آرایه $_POST دریافت می‌کنیم. سپس یک اعتبارسنجی ساده روی تاریخ انجام می‌دهیم تا مطمئن شویم که فرمت آن معتبر است. تابع strtotime() تلاش می‌کند تا یک رشته تاریخ را به یک timestamp (زمان بر حسب ثانیه از 1 ژانویه 1970) تبدیل کند. اگر تبدیل موفقیت‌آمیز نباشد، تابع false برمی‌گرداند. در صورت معتبر بودن تاریخ، سن کاربر را با استفاده از timestamp محاسبه می‌کنیم. در نهایت، تاریخ تولد و سن کاربر را نمایش می‌دهیم.

بخش سوم: اعتبارسنجی پیشرفته‌تر داده‌ها

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

در اینجا یک نمونه از اعتبارسنجی پیشرفته‌تر آورده شده است:

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$birthdate = $_POST["birthdate"];

// اعتبارسنجی تاریخ
if (strtotime($birthdate) === false) {
echo "فرمت تاریخ نامعتبر است.";
} else {
$birthdate_timestamp = strtotime($birthdate);
$current_date_timestamp = time();

// بررسی محدوده معقول تاریخ
$min_age = 18;
$max_age = 120;
$age = floor(($current_date_timestamp – $birthdate_timestamp) / (60 * 60 * 24 * 365.25));

if ($age $max_age) {
echo “سن وارد شده معتبر نیست.”;
} else {
// نمایش اطلاعات
echo “تاریخ تولد شما: ” . $birthdate . “
“;
echo “سن شما: ” . $age . ” سال”;
}
}
} else {
echo “دسترسی مستقیم به این صفحه مجاز نیست.”;
}
?>

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

بخش چهارم: استفاده از کتابخانه‌های تاریخ و زمان

برای کار با تاریخ و زمان در PHP، می‌توانیم از کتابخانه‌های مختلفی استفاده کنیم. یکی از محبوب‌ترین این کتابخانه‌ها، کتابخانه Carbon است. این کتابخانه امکانات بسیار زیادی را برای کار با تاریخ و زمان فراهم می‌کند، از جمله فرمت‌بندی تاریخ، محاسبه اختلاف بین دو تاریخ و اضافه یا کم کردن زمان به یک تاریخ.

برای استفاده از کتابخانه Carbon، ابتدا باید آن را نصب کنید. می‌توانید این کار را با استفاده از Composer انجام دهید:

composer require nesbot/carbon

سپس، می‌توانید از آن در کد PHP خود استفاده کنید:

age;

// نمایش اطلاعات
echo “تاریخ تولد شما: ” . $birthdate_carbon->format(‘Y-m-d’) . “
“;
echo “سن شما: ” . $age . ” سال”;

} catch (Exception $e) {
echo “فرمت تاریخ نامعتبر است.”;
}
} else {
echo “دسترسی مستقیم به این صفحه مجاز نیست.”;
}
?>

در این کد، ابتدا فایل autoload.php را require می‌کنیم تا کتابخانه Carbon بارگذاری شود. سپس، از کلاس Carbon برای تبدیل رشته تاریخ به یک شیء Carbon استفاده می‌کنیم. تابع age سن کاربر را محاسبه می‌کند. تابع format('Y-m-d') تاریخ را در فرمت YYYY-MM-DD نمایش می‌دهد. از بلوک try...catch برای مدیریت خطاهای احتمالی استفاده می‌کنیم. اگر تاریخ نامعتبر باشد، یک استثنا (Exception) پرتاب می‌شود و پیام خطا نمایش داده می‌شود.

بخش پنجم: نکات امنیتی

هنگام کار با داده‌های ورودی کاربر، باید به نکات امنیتی توجه ویژه‌ای داشته باشیم. یکی از مهم‌ترین نکات، جلوگیری از حملات XSS (Cross-Site Scripting) است. برای این منظور، باید داده‌های ورودی را قبل از نمایش در صفحه، sanitize کنیم. تابع htmlspecialchars() می‌تواند برای این منظور استفاده شود. این تابع کاراکترهای خاص HTML را به موجودیت‌های HTML تبدیل می‌کند، که از اجرای کد مخرب در صفحه جلوگیری می‌کند.

همچنین، باید از حملات SQL Injection جلوگیری کنیم. برای این منظور، باید از پارامترهای آماده (Prepared Statements) در هنگام کار با پایگاه داده استفاده کنیم. این کار باعث می‌شود که داده‌های ورودی به عنوان کد SQL تفسیر نشوند و از اجرای کد مخرب جلوگیری شود.

در نهایت، باید از حملات CSRF (Cross-Site Request Forgery) جلوگیری کنیم. برای این منظور، باید از توکن‌های CSRF استفاده کنیم. این توکن‌ها به هر فرم اضافه می‌شوند و در هنگام پردازش فرم، بررسی می‌شوند تا اطمینان حاصل شود که درخواست از همان منبع اصلی ارسال شده است.

با رعایت این نکات امنیتی، می‌توانید از وب‌سایت خود در برابر حملات مخرب محافظت کنید.