شنبه ۱ دی ۱۴۰۳ |  عضویت / ورود

چگونه گزینه های انتخاب شده یک CheckBox را با کمک inputهای hidden به صفحه سوم منتقل کنیم؟


Tuesday, 2011 August 23   نویسنده: Hamid   تعداد بازدید: 11573 بار  #آموزش PHP‏   امتیاز متوسط: امتیازی داده نشده است

فرض کنید سه صفحه دارید. مثل فرم ثبت نام در کنکور.

- صفحه اول، فرم شماره 1 است که کاربر اطلاعاتی مثل مشخصاتش را وارد می‌کند و به صفحه دوم می‌فرستد.
- صفحه دوم، فرم شماره 2 است که اطلاعات تکمیلی مثل رشته و... را وارد می‌کند.
- صفحه سوم همه این‌ها را دریافت می‌کند و فرضاً در دیتابیس insert می‌کند.

اگر بر روی فرم 1 و 2، Checkbox نباشد، کار مشکلی نیست. شما اطلاعات فرم شماره 1 را در صفحه شماره 2 می‌گیرید و در فرم شماره 2 hidden می‌کنید حالا اطلاعات فرم شماره 1 هم همراه با فرم شماره 2 به صفحه 3 ارسال می‌شوند:

<input type="hidden" value="<?php echo $_POST[first_name]; ?>" />

یادآوری 1: اگر یک فرم و یک صفحه پردازشگر داشته باشیم، و روی فرم، چک باکس باشد، به این صورت عمل می‌کنیم:

فرض کنید فرم به این صورت باشد:

<html>
<body>
<form>
<input type = 'checkbox' name = 'mychk[]' value="Red" />
<input type = 'checkbox' name = 'mychk[]' value="Green" />
<input type = 'checkbox' name = 'mychk[]' value="Blue" />
<input type ='submit'>
</form>
</body>
</html>

در صفحه پردازشگر، به این صورت گزینه‌های چک‌باکس را دریافت می‌کنیم:

foreach ( $_POST['mychk'] as $k=> $c)
{

          echo $c;
}

که در اینجا، ‎$k شماره اندیس گزینه انتخاب شده و ‎$c مقدار value است (در این مثال، valueها برای ما مهم هستند. به جای آن‌ها ممکن است آی.دی‌های مختلف سطرهای دیتابیس را درج کرده باشید و بخواهید هر کدام که تیک خورده بود، از دیتابیس پاک شوند). مثلاً اگر کاربر گزینه 1 و 3 را تیک زده باشد، در آرایه mychk داریم:

1 => "Red" , 3 => "Blue"

 

مسأله اصلی:

مشکل اصلی زمانی است که بخواهید گزینه‌های انتخاب شده را در پشت فرم مخفی کنیم و به صفحه سوم بفرستیم.

برای این کار، در PHP سه راه پیش رو دارید که البته در زبان ASP هم چیزی مشابه آن قابل استفاده است:

1- مخفی کردن تک‌تک گزینه‌ها در inputهای مختلف به صورت hidden.

به این مثال دقت کنید:

foreach ( $_POST['mychk'] as $k=> $c)
{
       echo '<input type="hidden" name="mychk[]" value="' . $c . '" />';
}

مشخص است که آرایه mychk را دریافت کرده‌ایم و گزینه‌های مختلف آن را در inputهای مختلف ریخته‌ایم. در صفحه سوم نیز، دقیقاً مثل «یادآوری 1» این اطلاعات را می‌گیریم و تحلیل می‌کنیم.

2- استفاده از Session:

این روش به نظر، ساده‌ترین روش می‌آید:

session_start();

$_SESSION['colors']=$_POST["mychk"];

در این مثال یک سشن به نام colors در نظر گرفته‌ایم و آرایه را در آن ریخته‌ایم.
تنها نکته‌ای که باید اشاره شود این است که یک سشن به طور پیشفرض، فقط 24 دقیقه زنده است! بنابراین، اگر ممکن است پر کردن فرم‌ها طول بکشد، این روش جالب نیست.

3- استافده از تابع Serialize:

به جای استفاده از چند input با این روش می‌توانید از یک input استفاده کنید. به این مثال توجه کنید:

 $data=serialize($_POST[muchk]);
 $encoded=htmlentities($data);
 echo '<input type="hidden" name="colors" value="'.$encoded.'">';

در صفحه سوم، کافی‌ست اطلاعات را unserialize کنید:

$date = unserialize($_POST[colors]);

 

من خودم ترجیح می‌دهم همیشه از روش اول استفاده کنم. شما هر کدام را که خواستید انجام دهید ;)

موفق باشید؛
حمید رضا نیرومند

همین مقاله با فرمت docx: (روی لینک زیر کلیک راست کرده و گزینه Save Target As را انتخاب کنید)

http://tutorials.aftab.cc/web_designing/php/passing_checkboxes.docx

توضیحات بیشتر در مورد CheckBoxها و روش Pass کردن آن‌ها بین صفحات:

http://www.daniweb.com/web-development/php/threads/62874

http://stackoverflow.com/questions/4237090/how-to-pass-array-through-hidden-field

http://www.tizag.com/htmlT/htmlcheckboxes.php


.



ارسال سؤال یا نظر


1- مرضیه:
بوسیله: , در: Monday, 2014 December 08-کد: 12568
من متوجه نشدم با چه برنامه ای این کار رو کردن، گفته با adobe acrobate نیست که ، یعنی چی با پرینتر من پرینتر ندارم :(


2- مرضیه:
بوسیله: , در: Monday, 2014 December 08-کد: 12569
من متوجه نشدم با چه برنامه ای این کار رو کردن، گفته با adobe acrobate نیست که ، یعنی چی با پرینتر من پرینتر ندارم :(


3- مریم:
بوسیله: , در: Tuesday, 2014 December 09-کد: 12577
مرسیـــــــــــــــــــــــــــــــــــــــــ ^_^ ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ


4- ali :
بوسیله: , در: Wednesday, 2014 December 17-کد: 12652
عالی بود مرسی



5- ali :
بوسیله: , در: Wednesday, 2014 December 17-کد: 12653
عالی بود مرسی



6- سیامک:
بوسیله: , در: Monday, 2014 December 22-کد: 12712
زکات علم یاد دادن آن به ديگرانه خوشا به سعادت شما که همیشه در حال ثواب هستيد.



7- مهر:
بوسیله: , در: Monday, 2015 January 19-کد: 12935
ممنون خیلی عالی بود... اطلاعات فلشم برگشت.


8- مونا:
بوسیله: , در: Wednesday, 2015 February 04-کد: 13080
ممنون واقعا
اطلاعات مهمی داشتم ، برنامتون عاالی بود


9- mohammad:
بوسیله: , در: Thursday, 2015 July 30-کد: 13659
سلام من میخوام چند مقدار به صورت مخفی ارسال کنم به این شکل انجام دادم ایا درسته
" name="select[]" />
اینجا به هم ریخنه نشون میده ولی خودتون مرتبشو در نظر بگیرید
نامشم بصورت ارایست select[] به همین شکل فقط نمیدونم موقع فرم ارسال میشه چطوری مقدارشو بخونم با فریچ نشد هر کاری کردم نشد مقداری رو که میخوام ازش در بیارم.

Tutorials ©