کار با فرم های PHP
با استفاده از متغیرهای GET _$ و POST_$، می توانید سمت سرور مقادیر فرم HTML را دریافت نمایید.
یک فرم ساده HTML
در مثال زیر، یک فرم ساده HTML با دو فیلد ورودی و یک دکمه submit نشان داده شده است:
مثال (کار با فرم های PHP)
<body>
<form action="welcome.php" method="post">
نام: <input type="text" name="name"><br>
ایمیل: <input type="text" name="email"><br>
<input type="submit" value="ارسال اطلاعات">
</form>
</body>
</html>
خروجی کد بالا:
زمانی که کاربر، اطلاعات فرم بالا را پر می کند و روی دکمه "submit" کلیک می کند، اطلاعات فرم برای پردازش به یک فایل PHP بنام "welcome.php" ارسال می شود. اطلاعات فرم با متد POST ارسال می شود.
فایل welcome.php
برای نمایش اطلاعات ارسال شده به سرور، بصورت ساده می توانید همه متغیرها را چاپ نمایید:
<body>
نام :<?php echo $_POST["name"]; ?><br>
ایمیل: <?php echo $_POST["email"]; ?>
</body>
</html>
خروجی کد بالا می تواند شبیه زیر باشد:
ایمیل: این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید
توجه: مثال بالا را می توان از طریق متد get نیز انجام داد. که البته نحوه انجام کار در بیاموزهای قبلی ذکر شده است.
کد بالا، یک مثال کاملاً ساده است. اما توجه داشته باشید که یک چیز بسیار مهم در آن از قلم افتاده است و آن اعتبار سنجی یا Validate اطلاعات ارسالی است. از این طریق اسکریبتتان امن تر خواهد بود.
در مثال بالا، اعتبار سنجی انجام نشده است، توجه داشته باشید که در این مثال فقط نحوه ی ارسال و دریافت اطلاعات نشان داده شده است. اما در بیاموز بعدی، نحوه ی پردازش اطلاعات فرم ارسال شده بصورتی که امنیت حفظ شود، نشان داده خواهد شد. اعتبار سنجی مناسب اطلاعات فرم، شما را از حمله هکرها حفظ خواهد کرد. |
برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.
- نوشته شده توسط امیر پهلوان صادق
- بازدید: 31818
دیدگاهها
آموزش فرم ها در PHP عالی بود.
سلام خسته نباشد
1- من میخوام عکسی رو از طریق فرم اد کنم اما وقتی نوع input رو image تنظیم میکنم و وقتی فرمی رو اجرا میکنم فقط یک submit میاد که وقتی روش کلیک میکنم هیچ عکس العملی نشون نمیده
باید چیکار کنم؟
2- و این که من میخوام یک لیست باکس تو فرمم بزارم که با کلیک رو هر کدوم از گزینه هاش بعضی از فیلدهای فرم اضافه بشن؟؟؟
مثلا کاربر وقتی گزینه 1 رو انتخاب میکنه دو فیلد ورودی ظاهر میشه که بتونه وارد سایت بشه و وقتی گزینه 2 رو انتخاب کنه 4 فیلد وردی دیگه هم به صفحه فرم اضافه بشن؟؟؟
شرمنده سوالام زیاد شدن
یه سوال دیگه اینکه:
3- اگه با انتخاب هر یک از گزینه ها فیلد هایی به جدول اضافه یا کم بشن آیا در پایگاه داده هم تعداد جدول ها باید برابر با تعداد گزینه ها باشه؟
خیلی ممنون
سلام
1- برای ارسال فایل از کامپیوتر کاربر به سرور باید از عنصر زیر استفاده کنید:
<input type="file" name="file" id="file" />
آموزش انجام این کار، بصورت کامل در لینک زیر توضیح داده شده است:
www.beyamooz.com/php/81-advance/79-%D8%A7%D8%B1%D8%B3%D8%A7%D9%84-%D9%81%D8%A7%DB%8C%D9%84-%D8%AF%D8%B1-php
2- فیلدهایی که قرار است نمایان یا پنهان شوند را در صفحه وارد کنید و خصوصیت display آنها را با مقدار "none" تنظیم کنید. سپس با استفاده از جاوااسکریبت، برای لیست باکس اتون، رویداد onchange بنویسید و تابعی را فراخوانی کنید که در آن بر اساس مقدار لیست باکس تصمیم گیری بشود. یعنی داخل تابع مذکور بگید اگر مقدار فلان عدد بود خصوصیت display فیلدهایی که در ابتدا خدمتتون عرض کردم از "none" به "block" تغییر پیدا کند.
3- متوجه سوالتون نشدم...!
سلام
ممنون از پاسختون بسیار عالی بود و توضیحاتتون هم کامل بود
منظور سوال سومم اینه که:
بر فرض ما دو گزینه در لیست باکس داریم(مثلا گزینه اول:مرد گزینه دوم:زن) حالا کاربر گزینه اول رو انتخاب میکنه و با توجه به مرد بودن کاربر یک سری فیلدهایی براش ظاهر میشن
خوب تا اینجا یک جدول داخل پایگاه داده که اطلاعات در اون ذخیره بشن داریم
حالا اگه کاربر گزینه دوم رو انتخاب کنه
بنا بر زن بودنش یک سری فیلدهای دیگه براش ظاهر میشه
سوال من اینه آیا برای گزینه دوم هم یه جدول مجزا باید تعریف کنم؟؟؟؟
یعنی در این اینجا باید 2 جدول داحل پایگاه داده قرار داده بشه؟؟؟؟؟؟
یا با همون یک جدول کارم راه میوفته؟
سلام
شما تنها به یک جدول نیاز دارید. البته توجه داشته باشید که در جدول مذکور، بدلیل سرآنیوی شما، همیشه برخی از فیلدها Null هستند.
سلام دوست عزیز . شاید سوال من ربطی به این قسمت نداره اما من ومپ رو روی سیستمم دوبار نصب کردم اما هر بار هم به صورت نارنجی رنگ درمیاد و فعال نمیشه . نسخه ومپ رو از سایت راسخون و سایت پی سی دانلود و بدون مشکل گرفتم. باید چیکار کنم که درست کار کنه؟
با سلام و احترام.
در حالت عادی نباید مشکلی برای اجرا باشه، ولی اگه آیکون ومپ شما نارنجی هست به این دلیل هست که سرویس شما به هر دلیلی نمیتونه اجرا بشه.
یه راه این هست که شما از طریق منوی Run عبارت services.msc رو تایپ کنید و به بخش سرویسها برید و از اونجا ومپسرور رو پیدا کنید و ببینید که استارت هست یا خیر. اگر نبود، اون رو استارت کنید. اگر قادر به استارت شدن نبود، مشکل به احتمال قوی سیستمی هست.
اگر کد هارو تک تک معرفی میکردید بهتر بود
سلام خسته نباشید و تشکر بابت سایت خوبتون.
چطوری میتونم کد زیر رو توی یک جدول نمایش بدم؟
[dir=#555]
با سلام و تشکر
کدی در صفحه نیومده!!!
آقا شما که جواب نمیدین ولی مشکل من اینجوری حل شد که الان هر دو فرم رو با پسوند پی اچ پی ذخیره کردم.الان کارم درسته؟
خب جوابی که گرفتم درسته و اطلاعات پردازش شده رو توی پیج دوم بهم نشون میده!
اول کارم اینجوری بود که فرم مربوط به گرفتن اطلاعات رو با پسوند اچ تی ام ال ذخیره کردم و توی پوشه ومپ قرار دادم...اصلا مگه میشه وقتی لوکال هاست رو توی مرورگر مینویسیم بعدش فایل اچ تی ام ال رو بزنیم؟
من فکر میکنم مشکل بچه ها هم این باشه که فرمی که میخوان با لوکال هاست بالا بیارن رو با پسوند اچ تی ام ال دخیره کردن..فکر میکنم وقتی گفتین کدهای اچ تی ام ال ، این باعث شد همه فکر کنیم باید با پسوند اچ تی ام ال هم توی ومپ ذخیره بشه...دارم درست میگم؟!
خدا خیرتون بده دو روز بود که این مشکل رو داشتم. من هم فکر میکردم که فایل html رو باید با پسوند html ذخیره کنم. الان که با پسوند php ذخیره میکنم و هر دو فایل رو داخل پوشه htdoc قرار میدم جواب میده.
در لوکال هست فایلهای html هم جواب میده. لزوما نباید همشون php باشن.
اما تو فایلهایی که باید کد php پردازش بشه، فایل باید حتما php. باشه.
اگر مشکلی هست، بهتره کد رو قرار بدید تا بشه دقیق راهنمایی کرد. اینطوری فقط میشه در حد حرف راهنمایی کرد و چون در اکثر مواقع هم دوستان نمیتونن منظور خودشون رو برسونن یا ما نمیتونیم بفهمیم، برای همین راهنمایی دقیق نمیشه کرد.
کد که باشه، تا حدی میشه فهمید شما چی کار کردین.
برای گذاشتن کد هم باید مواظب باشید که به جای < از عبارت ;gt& و به جای علامت > از عبارت ;lt& استفاده کنید.
ببخشید از سوالات زیادم!
ولی من مقدارهایی که توی
name , email
میذارم رو روی توی صفحه ای که باز میشه نشون نمیده..همه چیز رو هم رعایت کردم..مشکل چیه؟!
ممنون از تو ضیحتون
من فکر میکردم باید کدهای اچ تی ام ال رو توی یه فایل اچ تی ام ال و کدهای پی اچ پی رو توی فایل پی اچ پی بذارم...فکر می کردم وقتی بهش از طریق اکشن آدرس میدم خودش پیدا میکنه ...اشتباهم اینجا بود که همه رو کنار هم نذاشته بودم.الان که همه توی یه فایل پی اچ پی هستن جواب میده.
منظورم این بود باید دستورات پی اچ پی رو توی صفحه ی دیگه ای بنویسم؟
توی یه فایل پی اچ پی؟
و بعد با لوکال هاست اطلاعات رو بگیرم؟!
چرا جواب نمیده پس؟!
با سلام و تشکر.
اول از همه اینکه سؤالتون خیلی ناواضح هست و دقیق منظور شما رو نمیرسونه.
ببینید شما برای اجرای کدهای PHP نیاز به یه سرور آپاچی دارید که با استفاده از برنامهی wamp یا xamp میتونید این مشکل رو حل کنید. بعد از انجام این مرحله شما از طریق localhost میتونید روی سیستم خودتون پروژه به زبان php ایجاد کنید و کدهای php رو اجرا کنید.
در مورد ارسال و دریافت فرم، اینکه اطلاعات ارسال میشه داخل صفحه html یا php باشه. ولی برای پردازش، صفحه حتما باید با php. ذخیره شده باشه تا داخل سرور کدها قابل پردازش باشه.
اطلاعات از طریق فرم به صفحهای که شما درخواست دادید ارسال و پردازش میشه.
لطفا سوال و یا کد خودتون رو دیق بذارید تا بشه راهنمایی کرد... اگه جواب مفهوم نبود، عذرخواهی میکنم. من از سؤال شما این برداشت رو کردم.
با سلام و احترام
توضیح میدین که چه اتفاقی میافته ؟ یعنی الان من وقتی بخوام اطلاعات فرم اچ تی ام ال رو دریافت کنم، باید اطلاعات رو با لوکال هاستم ببینم یا توی همون پیچ مثلا فایر اکس؟...چرا توی لوکال هاست به من خطای متغیر تعریف نشده میده؟!
با سلام و تشکر.
کدهای خودتون رو قرار بدید، تابشه فهمید مشکل از کجاست.
به نقل از azadeh ahmadi:
شما احتمالا $_POST و $_GET رو با حروف کوچیک نوشتید که خطای متغیر تعریف نشده میگیرید
چرا سوال مرا پاسخ نمی دهید مگر چه مشکلی دارد ؟
با سلام.
اگه منظورتون سوال قبلی هست باید بگم که خطا داره میگه که متغیری به نام name تعریف نشده است.
برای راهنمایی بهتر لطفا کد خودتون رو قرار بدید تا دقیق بشه شما رو راهنمایی کرد.
من زمانی که اطلاعات را با پی اچ پی می فرستم یک صفحه مربوط به اطلاعات دریافت شده باز می شود و اطلاعات درون ان نمایش داده می شود اما زمانی که دوباره صفحه را باز می کنم یک خطا که میگوید متغیی رها تعریف نشدند باز می شود
نام :
Notice: Undefined index: name in C:\xampp\htdocs \welcome.php on line 4
ایمیل:
Notice: Undefined index: email in C:\xampp\htdocs \welcome.php on line 5
چگونه این مشکل را برطرف کنیم تا بتوانیم چند بار صفحه ای کعه به ان اطلاعات ارسال شده است را ببینیم?
دوست عزیز باز هم کد نیومده.
ولی فکر میکنم منظورت رو گرفتم. ببین زمانی که فرم رو ارسال میکنه به یه صفحهی دیگه و متغیرهاشو میگیری، باید دقت کنی که در اون لحظه آرایهی POST_$ مقدار داره.
ولی وقتی همون صفحه رو خالی رفرش میکنی، آرایهی POST_$ خالی هست و خطای Undefined هم همینو میگه. یعنی متغیرهایی با نام مذکور ست نشده است.
برای رفع مشکل میتونی از تابع isset($var); //comment استفاده کنی. این تابع یه مقدار صفر یا یک میده. به این معنی اگه متغیر کلا تعریف شده بود، مقدار یک و اگه تعریف نشده بود، مقدار صفر میده.
دقت کن به این جمله!!!! اگه متغیری تعریف شده بود، مقدار یک و اگه متغیر تعریف نشده بود، مقدار صفر.
if(isset($_POST['name']){
echo $_POST['name']; //comment
}
مشابه این استفاده کنی خطا Undefined به شما نمیده.
الان این خطا رو میده : Parse error: syntax error, unexpected '{' in C:\xampp\htdocs \welcome.php on line 4
این خطای نگارشی هست. شما یه جا } رو نبستی!!!
کد همین مثال های بالاست
زمانی که داده به صفحه ای ارسال میشه بار اول نمایش داده میشه بار دوم متغییر خالی میشیه چی کار کنم متغییر خالی نشه؟ و برای همیشه باشه؟
اتفاقا درستش همینه!!!!
شما باید دقت کنید صفحهی دوم زمانی نمایش داده میشه که در صفحهی اول فرم رو ارسال کنید. یعنی نمایش صحفه دوم منوط به ارسال فرم صفحهی قبل هست.
اطلاعاتی هم که در صفحهی دوم نمایش داده میشه،اطلاعات ارسالی از کنترلهای فرم در صفحهی قبل هست.
اگه صفحهی دوم رو همینطوری باز کنیم،نباید دادهای نمایش داده بشه، چون معتبر نیست!!! دلیل این امر هم این هست که ما صفحه از طریق ارسال فرم ایجاد نشده!!!
امیدوارم منظورم رو رسونده باشم.
خوب دیگه منم همین کارو اول کردم فرم پر کردم بعد ارسال کردم خود به خود صفحه دوم باز شد و اطلات نمایش داده شده اما دفعه دوم که همون صفحه دوم باز کردم متغیر ها خالی بودن .
چی کار کنم دفعه دوم متغییر ها خالی نباشن؟
دوست عزیز خودت داری جواب خودت رو میدی.
صفحهی دوم زمانی ظاهر میشه که شما از طریق صفحهی اول فرم رو ارسال کنی. یعنی صفحهی دوم نباید خودبخود بیاد. نباید برای اولین بار هم بیاد.
فقط باید زمانی بیاد که فرم رو ارسال کنی.
وقتی هم که فرم ارسال میشه، آرایهی POST_$ مقدار میگیره.
اره دیگه!
همین میگم فرم ارسال می کنم صفحه دوم میاد بعد که صفحه دوم می بندم و میخوام دوباره باز کنم(بدون ارسال مجدد فرم) POST_$ مقدارش رو از دست میده چی کار کنم پست مقدارش رو از دست نده ؟
خب اصلا برای چی باید صفحهی دوم همینطوری بیاد. صفحهی دوم فقط زمان ارسال فرم میاد. اون موقع هم هست که مقادیر POST_$ مقدار داره.
همینطوری برای چی باید صفحهی دوم بیاد و یا آرایهی POST_$ مقدار داشته باشه؟؟؟
این صحیح نیست.
خوب دیگه
چی کار کنم که پست مقدارش از دست نده پعد ارسال فرم هم مقدار داشته باشه؟
نمیشه دیگه دوست عزیز. فقط زمانی که فرم ارسال میشه آرایه POST_$ مقدار میگیره.
هر بار که فرم ارسال میشه!!!!!!!!!!! !!!
برای ذخیره اطلاعات دائمی باید از مای اس کیو ال استفاده کنم؟
بله. برای ذخیره اطلاعات به صورت دائم باید از بانک اطلاعاتی استفاده کنید. برای این کار میتونید از Mysql بهره بگیرید.
سلام
چرا وقتی فایل فرم رو وفایل welcome.php را روی یک هاست که php را هم پشتیبانی می کنه اپلود میکنیم جواب نمیده؟
سلام
لطفاً بفرمایید با چه خطایی مواجه می شوید؟
با سلام و خسته نباشید بابت سایته خوبتون
من دوتا فایل مثال بالا رو (یعنی یک فایل مربوط به فرم و یک فایل welcome.php) عینا درست کردم و کدها را توی انها کپی کردم و هر دو فایل را در داخل یک پوشه قرار دادم ولی موقعی که دکمه submit را میزنم صفحه welcome.php باز میشه که فقط کدهای کپی شده برای فایل welcome.php را عینا بر مرورگر نشان میدهد(یعنی کدهای نوشته شده در notepad برای خودwelcome.php) ...لطفا راهنمایی بفرمایید!
سلام
برای اجرای صحیح مثال بالا، موارد زیر باید انجام شود:
1- xampp باید نصب شده باشد.
2- دو فایل مثال بالا، باید داخل پوشه htdocs در محل نصب xampp قرار داده شود.
3- در انتها فقط کافی است در آدرس بار مرورگر، ابتدا /localhost و سپس نام فایل مربوط به ورود اطلاعات را تایپ کنید.
سلام خیلی ممنون از سایت بسیار خوبتون
من با xampp کار می کنم
کد بالا رو کپی کردم و مشکلی که دارم اینه که وقتی کد بالا رو اجرا می کنم مقادیر اسم وایمیل که میدم نشون داده نمیشه
به نظرتون مشکل از کجاست؟
سلام
اگر کدتان را ارسال کرده بودید، بهتر می شد راهنمایی کرد. اما دو تا چیز را چک کنید که درست تنظیم شده باشد:
1- درست تنظیم کردن ویژگی action در تگ form: همان طور که می دانید، زمانی که روی دکمه submit کلیک می شود، اطلاعات فرم، یعنی "نام" و "ایمیل" به فایلی که در action مشخص کرده اید ارسال می شود.
2- در مثال بالا، 2 فایل مجزا وجود دارد، یکی شامل فرم ورود اطلاعات است و دیگری فایل welcome.php که وظیفه پردازش اطلاعات ارسال شده ی فرم را دارد. این دو فایل باید دقیقا در کنار یکدیگر قرار بگیرند. بنابراین ویژگی action را فقط با نام فایل تنظیم کنید.
khste nabashid site khobi darid khoda ghovat.
سلام...تو بعضي از سايتا كاربر نام كابري و رمز رو وارد ميكنه و بعد وارد پروفايلش مبشه...مثلا فيسبوك و ...اما اگر بعد از log in شدن آدرس پروفايل رو كپي كنيم و تو مرورگر وارد كنيم مرورگر صفحه ي ورود به سايت رو نشون ميده و وارد پروفايل نميشه...چطور بايد اين كار رو انجام داد كه يك صفحه فقط بعد از وارد كردن رمز باز بشه؟
اگر منظورتون این باشه که این اتفاق بین دو مرورگر مختلف اتفاق می افته (مثلاً اگر با مرورگر FireFox لاگین کردید و بعد به قول شما آدرس صفحه پروفايلر را در مرورگر Internet Explorer پیست کنیم، آن موقع به صفحه "ورود" منتقل خواهیم شد ...! ) در این صورت بدون شک باید به صفحه "ورود" منتقل بشیم، چون در نام اشاره گری که به کوکی ها و یا سشن های مربوط به لاگین، اختصاص داده شده، آی دی صفحه یا تب باز شده در مرورگر نیز وجود دارد.
بنابراین زمانی که شما از طریق یک مرورگر دیگر درخواست دیدن صفحه پروفايل را به سرور ارسال می کند. ابتدا و قبل از هر چیز دسترسی شما به صفحه مذکور چک می شود و با توجه به اینکه در این پردازش "نام کاربری" تنظیم نشده است، (در اینجا در نام اشاره گر، آی دی تب باز شده در مرورگر نیز وجود دارد) پس به صفحه لاگین منتقل خواهید شد.