• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
فیلد مخفی یا hidden field چه کاربردی داره؟
#1
سلام بر همگی،
همیشه این سوالم بود که چرا تو سیستم دیتالایف در بعضی از فرم هاش از فیلد مخفی استفاده می کنند؟
کد:
<input type="hidden" name="hide">
امروز یک وبسایت فارسی پیدا کردم که تو دو خط به این سوال جواب داده بود.
گفته که: فرض کنید فرم شما داراى چندین صفحه است که کاربران با تکمیل یکى به صفحه دیگرى انتقال داده مى شوند تا فرم بعدى را پر کنند، اطلاعات فرم قبلى باید در این فیلدها ذخیره شوند تا اینکه کاربر در صفحه آخر همه آنها را یکجا به سرور بفرستد.
ولی سوالی که من برام پیش اومد اینه که یعنی این فیلد همه اطلاعات وارد شده بر روی فیلد های دیگه رو در خودش نگه میداره تا اینکه در نهایت همه رو با هم بفرستیم به پایگاه داده.
اگر درسته که هیچی ولی اگر درست نیست راهنماییم کنید لطفا. و آیا فقط همین استفاده رو داره؟ Heart
غایب
  پاسخ
تشکر شده توسط :
#2
فیلد های مخفی خیلی کارامد و مفید هستند. و استفاده های زیادی ازشون میشود. عمده استفاده هاش نگهداری پارامتر ها هستند.

یک مثال ساده میزنم.

فرض کنید شما یک فرم سفارش دارید. که می تونه 3 حالت رو داشته باشه . مثل هاستینگ . دامین و سرور . هر سفارش درواقع یک سری فیلد اختصاصی و یک سری فیلد های اشتراکی دارند.

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


خوب حالا برای ایجاد ، ویرایش و .... ما از کجا بفهمیم در خواست ها مال کدوم قسمت هست؟.

خوب فیلد های مخفی ایجا به کار می آیند
  پاسخ
تشکر شده توسط : cyletech
#3
ممنونم صالح جان. دیشب هم با محمد امین (oia) داشتم صحبت می کردم خیلی راهنماییم کرد ولی نظر شما در باره اینکه
در هر فرم یک بخشی از فیلد مخفی استفاده کنیم چیه؟
آیا به امنیت ربط داره؟ اگر داره یک نمونه مثال بزنید لطفاً
میشه یک نمونه کد از همین مثالی که زدید برام بنویسید؟ چون هنوز سوالی در موردش دارم ولی نمی دونم چطوری بیانش کنم!

در نهایت هم مرسی زیاد زیاد Heart
غایب
  پاسخ
تشکر شده توسط :
#4
این هم یک مثال :

ما یک کلاس داریم. که یک عملیات ورود و ویرایش خبر ها رو داره.

خبر جدید :
کد پی‌اچ‌پی:
/posts.php

<form action="posts.php" method="post">
  <
input type="hidden" name="method" value="add" >
  <
input type="text" name="title" >
  <
input type="text" name="body" >
  <
input type="submit" name="save" >
</
form


ویرایش خبر :
کد پی‌اچ‌پی:
/posts/12

<form action="posts.php" method="post">
  <
input type="hidden" name="id" value="12" >
  <
input type="hidden" name="method" value="edit" >
  <
input type="text" name="title" >
  <
input type="text" name="body" >
  <
input type="submit" name="save" >
</
form


خوب فیلد متد نشون میده که این درخواست رو باید به کدوم تابع ارسال بشه تا عملیات کامل بشه.



امنیت یک مبحث کلی هست. در این فرم ها 2 جور میتونه امنیت رو زیر سوال ببره.
1- تزریق کدهای مخرب و یا عوض کردن سناسه ها مثل همین مثال زمان ویرایش اگر ای دی رو از 12 به 15 تغییر بدی چی میشه؟
2- صحت ویرایش و .... داده ها.

مثلا یک زمانی من میومدم. فیلد ای در رو با سشن کاربر در یک رشته کد قرار میدادم و کد میکردم. و تو فروم میزاشتم. و به سمت کاربر ارسال می کردم. زمانی هم که درخواست میومد. میومد رشته رو دیکود میکردم و میدیدم که این درخواست برای ای دی 12 و ای دی سشن ایکس هست. و سسشن رو هم چک میکردم معتبر بود. مابقیه مراحل

  پاسخ
تشکر شده توسط : cyletech
#5
من تا قبل از این مثل زیر عمل می کردم:

کد:
//page 1
<form acton="go.php?page=1" method="post">
<input type="text" name="name"/>
<input type="submit" name="send"/>
</form>

//page 2
<form acton="go.php?page=2" method="post">
<input type="text" name="name"/>
<input type="submit" name="send"/>
</form>
بعد جدا جدا اطلاعات رو وارد پایگاه داده می کردم. یعنی چک می کردم اگر در آدرس page وجود داشت و برابر 1 بود اطلاعات رو ... و برای بعدی هم همینطور. این کار آیا درست بوده یا کلاً از ریشه اشتباست؟
اگر اشتباه بوده کارم ، پس از این به بعد می تونم با استفاده از فیلد مخفی همه رو به یک آدرس بفرستم و دیگه صفحه بندی مثل بالا نکنم و در مثالی که شما نوشتید ، برای اینکه اطلاعات رو در یک صفجه به نام posts.php بفرستم ، (اینجاش مشکل دارم و نفهمیدم) بعد از اولین کلیک روی submit ، صد البته وارد صفحه posts.php میشه ، اونوقت اطلاعات فرم اول (یا ذخیره می مونه یا باید ذخیره کنم در متغیری؟) [ببین اینجاشو درست میگم] حالا ما از این دو فرم در یک صفحه نمی تونیم و نباید استفاده کنیم ، پس مشخص می کنم که اگر آدرس فلان شد فرم اول و آدرس فلانی شد فرم دوم. اونوقت در نهایت وقتی روی دکمه ای به نام finish کلیک شد همه اطلاعات رو وارد پایگاه داده کنه.

توجه کنید لطفاً: سوالاتی که برام پیش اومده بود رو در جملات بالا تا اونجا که تونستم جا دادم ولی دو سوال دارم که نتونستم جاش بدم. سوال های بعدیم اینه که 1. فیلد hidden آیا مثل فیلد submit اما نامرئی (منظور از نامرئی چیه؟) عمل می کنه؟ 2. فرم هارو جا دادم ولی حالا اینجا مشکل دارم که نمیدونم اگر بخوام چک کنم روی فیلد submit کلیک شده یا نه ، باید خود فیلد submit رو بررسی کنم یا همون فیلد hidden کافیه؟ اگر فیلد مخفی برای چک کردن کافیه که دیگه نیازی نیست مثل کد بالا که شما قرار دادید از خصیصه name برای فیلد submit استفاده کنیم! اگر نه که راهنمایی plz Blush
غایب
  پاسخ
تشکر شده توسط :
#6
اولا یک نمونه از کاربرد فیلد مخفی بود نه همه چیز!!

دوما تواهم زدی اساسی. فرق فیلد مخفی با سایر فیلد ها در این هست که در ویو ها نمایش داده نمیشه. اما قادر مقدار تعریف شدهی را با خودش حمل کنه.
مثل تعریف یک متغییر در فروم ها. و ربطی هم به submit نداره.
وفتی هم که فرم submit میشه. مقدار فیلد مخفی و سایر فیلد ها رو شما می تونید در متغییر سراسری $_POST یا $_GET ببینید.

سوال دومتون رو مبنی بر جک کردن مقدار submit field نفهمیدم. تا اونجا که من میدونم نیازی اصلا به چک کردنش نیست. چون ممکنه فرم توسط جاوا سابمیت بشه. حتی شما فیلد سابمیت رو هم استفاده نکرده باشی
  پاسخ
تشکر شده توسط :
#7
این رو ببین لطفا و خلاص Heart :
کد:
<form action="contact" method="post">
<p><strong>نام: </strong><input type="text" name="firstname"/> - <strong>نام خانوادگی: </strong><input type="text" name="lastname"/></p>
<p><strong>رایانامه: </strong><input type="text" name="email"/></p>
<p><strong>دسته بندی: </strong><select name="category"><option value="انتقاد و پیشنهاد">انتقاد و پیشنهاد<option value="حفره امنیتی و مشکلات سیستم">حفره امنیتی و مشکلات سیستم<option value="تماس با بخش مدیریت">تماس با بخش مدیریت</select></p>
<p><strong>پیام شما: </strong><textarea rows="15" cols="80" style="width: 80%" name="yourmessage"/></textarea></p>
<hr/><p style="text-align: center;"><input type="submit" value="پیام را ارسال کن"/><input type="hidden" name="send"/></p>
</form>
مشکلی اگر داره در بخش مخفی یا سابمیت و ... بهم بگو Heart
غایب
  پاسخ
تشکر شده توسط :
#8
1. اکشن ناقصه.
2. هدفت در فیلد مخفی چی بوده؟ یک متغیر به نام send ما مقدار هیچ؟
  پاسخ
تشکر شده توسط :
#9
نقل قول:1. اکشن ناقصه.
اکشن مدلشه. من تو htaccess آدرس contact.php رو به contact تغییر دادم برای همین دیگه ننوشتم contact.php !
2. خودم هدف خاصی نداشتم و یکی بهم گفت که بهتره در هر فرم (چه ساده و چه چند بخشی) از فیلد مخفی استفاده کنم. و خودم فکر کردم بهتره خصیصه name رو از فیلد submit بردارم و برای فیلد مخفی بگذارم و در جایی که می خوام ببینم کلیک شده روی فیلد submit یا نه از خصیصه name که فیلد مخفی داره استفاده کنم!
غایب
  پاسخ
تشکر شده توسط :
#10
دقیقا منظور دوست شما همین بوده که شما در یک فیلد مخفی سششن کاربر رو قرار بدید و زمانی که فرم ارسال شد. جک کنی ببینی اون فروم که به دستت رسیده ماله همون سششنه یا نه.

باز من فلسفه تغییر در پارامتر های submit field رو نفهمیدم
  پاسخ
تشکر شده توسط : cyletech


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان