فرض کنید سه صفحه دارید. مثل فرم ثبت نام در کنکور.
- صفحه اول، فرم شماره 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