ساخت فرم در 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
در کنار فرم در نظر میگیریم.
فرم ما آماده است. کدهای زیر را درون فایل 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 ارسال میشوند در یکی از د متغیر $_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{
// 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 آشنا شده باشید و بتوانید فرمهای حرفهای بسازید. اگر دوست دارید فرم بدون بارگذاری (refresh) صفحه به سرور ارسال شود، میتوانید از AJAX در PHP استفاده کنید.
اگر سؤال یا تجربهای در کار با فرمها دارید، بخش دیدگاهها برای اشتراکگذاری نظراتتان با ما و دوستانتان است. 🙂
این آموزش بخشی از یک آموزش جامع و قدم به قدم در سبز دانش است: دوره رایگان آموزش PHP
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم
روی موبایلم کار نمیده
خطایی میگیرید؟ همون فرم رو با سیستم تکمیل میکنید درسته؟
سلام استاد ببخشید من میخوام یه سایت رمان نویسی شخصی درست کنم که کسی که میخواد رمان رو بنویسه بره توی صفحهی مخصوص ادمین و اونجا تایپ کنه و بعد از ارسال اونو به صفحه اصلی بفرسته یعنی یه متنی رو از یه فایل. html به یه فایل html دیگه بفرسته و اونجا نشونش بده
سلام
یعنی میخواید متنی که کاربر میزنه رو توی صفحه اصلی نشون بدید؟ مثل یه سایت خبری که صفحه اولش با خبرهای جدید آپدیت میشه؟
اگه اره که پیشنهاد میشه از دیتابیس استفاده کنید. اطلاعات رمان رو توی دیتابیس ذخیره کنید و هر جا نیاز بود اون رو بگیرید و نمایشش بدید. اگه نه پیام بدید که بهتر راهنماییتون کنیم.
استاد من میخوام یه صفحه مخصوص ادمین یا نویسنده رمان درست کنم و یه صفحه هم برای کاربر خواننده.
یعنی نویسنده یه رمان رو در صفحه خودس بنویسه و بعد اون متن در صفحه کاربر نمایش داده بشه
سلام
پیشنهاد میکنم یه صفحه (شبیه به بخش ادمین) برای نویسنده ایجاد کنید. داخلش فرمی قرار بدید که بتونه رمان رو ثبت کنه. برای ثبت، اون رو در دیتابیس ذخیره کنید. حالا هر کدوم از این نویسندهها یه صفحه پروفایلمانند باید داشته باشند که توی اون صفحه شما میاید و رمانهای مربوط به کاربر رو از دیتابیس فراخوانی و نمایش میدید.
در مجموع، حداقل یه صفحه برای نویسنده (با فرم برای ثبت رمان داخل دیتابیس) و یه صفحه هم برای نمایش رمانهای هر نویسنده به کاربر سایت لازمه.
مرسی ممنون ولی متاسفانه بلد نیستم این کار رو اگر میشه کمکم کنید
واقعیتش در یه کامنت یا توضیح متنی نمیشه به خوبی توضیحش داد!
یه پیشنهاد، ویدئوهای مربوط به ایجاد یه سایت وبلاگی یا خبری (محتوامحور باشه) که با php اجرا کردن رو اگه ببینید، میتونید ازشون برای کارتون الگوبرداری کنید.
در کل، لازمه کار با فرمها، کار با دیتابیس و البته ساختارهای برنامهنویسی (حلقه و شرطی و …) رو بدونید. (توی دوره جامع رایگانمون بحث شدند.)
یه چنین ویدئویی رو توی برنامهٔ ضبط داریم ولی حداقل برای یکونیم ماه آینده منتشر میشه. توی سایتهای اشتراک ویدئو یا سایتهای هم موضوعمون جستجو کنید حتماً موارد مناسبی پیدا میکنید.
سلام یه سوال داشتم میشه توضیح بدید چطور میتونم یک فرم بسازم که فقط به پسورد هایی که از قبل تعریف شده اجازه ورود بده؟
سلام
میتونید اطلاعات رو از طریق فرم از کاربر بگیرید و سپس با اتصال به دیتابیس در php سعی کنید بررسی کنید آیا پسورد درسته یا نه. اگرم یه پسورد ثابت دارید میتونید یه شرط بذارید و برابر بودنش رو چک کنید. اگه سیستم ورود و خروجی میخواید قطعاً لازمه از سشن در php هم کمک بگیرید.
دوستان یه سوالی داشتم اینکه میخوام php متن دریافتی رو خط به خط بخونه مثلا خط یک که اسم بزاره رو متغیر اسم یا سن رو بزاره رو متغیره دیگه
سلام
متأسفانه منظورتون رو متوجه نشدیم! میشه یه مثال از کاری که میخواید انجام بدید بزنید؟ تا شاید بتونیم بهتر راهنماییتون کنیم.
سلام من از کد ها استفاده کردم ولی نمیدونم چرا هرکار که میکنم وقتی به فرم اکشن ارسال میشه اطلاعاتم اگر نوشته باشم
echo $_Post
بهم همین متن رو نشون میده انگار داره حد php من رو به صورت نوت پد بهم نمایش میده
سلام
دو تا مورد: یکی اینکه
$_POST
باید به صورت آرایهای باهاش برخورد بشه؛ یعنی یه کلید خاص ازش رو میشه echo کرد.دوم اینکه تست کنید ببینید در حالت عادی میتونید چیزی رو echo کنید؟ اصلا به فرم کاری نداشته باشید. مستقیم یه متن ساده رو چاپ کنید ببینید میشه یا نه.
سلام مهندس ممنون از اموزش عالی تون
من یک تصویر دارم برای بک گراند، میخوام یک قسمتی از این تصویر یک فیلد دریافت شماره تلفن بذارم که کاربر موبایل خودش رو وارد کنه و داخل یک فایل تکست ذخیره بشه، همین!
بنظر شما از کدوم روش استفاده کنم؟؟
بعد اینکه مکان این فیلد داخل صفحه رو چطوری تنظیم کنم؟
سلام
به نظرم فرم رو با post ارسال کنید خوب باشه. آموزش کار با فایل هم داخل سایت هست، اما اگر دسترسی دارید پیشنهاد میکنم اطلاعات رو داخل دیتابیس ذخیره کنید؛ معمولاً بهینهتره.
قرار دادن پسزمینه و تعیین محل قرارگیری فیلدهای فرم مربوط به css هست. یک سرچ ساده برای تعیین موقعیت اجزای صفحه وب انجام بدید احتمالا به نتایج خوبی برسید.
موفق باشی حمید عزیز.
سلام و ممنون از پاسختون
میشه کد ِ PHP یک فیلد ساده در صفحه که شماره موبایل رو میگیره و در فایل تکست ذخیره میکنه رو بنویسید؟ 🙂
در واقع یک مثال هست، خیلی ساده کارکتر رو از کاربر بگیره و در number.txt ذخیره کنه. همین!
در آموزش کار با فایل PHP تابع
fwrite()
رو برای نوشتن بررسی کردیم. میتونید به جای رشته ثابت، مقدارش رو از متغیر$_POST
دریافت کنید.سلام.من یک مشکلی دارم.من همه ی کد های پی اچ پی رو در سایت خودم کپی کردم و با اطلاعات دیتابیس خودم ویرایش کردم.تغییر خیلی خاصی انجام ندادم.ولی وقتی فرم رو پر می کنم و لینک میشه به پی اچ پی میگه در خط 32 یعنی:
میکه یک “” اظافه وجود داره.خیلی برام مهمه میشه بگید مشکل چیه؟
سلام
پیشنهاد میکنیم به جای کپی، همین خط رو بنویسید. گاهی به خاطر محیط توسعه ممکنه علامت دابل کوت با کاراکتر دیگهای که شبیهش هست جایگزین بشه و مشکل ایجاد کنه.
دوم اینکه پارامتر اول به صورت رشته هست؛ مشابه کدی که توی آموزش PDO هست. توی متن آموزش اشتباهی
" "
رو براش نذاشتیم که تا فردا اصلاح میشه.واقعا عالی بود متشکر 💓
ممنون بابت انرژی خوبتون 🙂
دمتون گرم عالی بود مرسی
خوشحالم که این آموزش برات کاربردی بوده علی عزیز 🙂