PDA

View Full Version : سوال: استفاده از چند checbox و ثبت در دیتابیس



mamali-mohammad
پنج شنبه 19 آبان 1390, 15:27 عصر
سلام
من 6 تا چک باکس دارم
میخوام هرکدوم تیک خورد در دیتابیس ذخیره بشه
به این صورت که هر 6 گزینه در یک فیلد ذخیره بشه
چطوری این کارو کنم ؟
ممنون

alismith
پنج شنبه 19 آبان 1390, 17:24 عصر
سلام

دوست عزیز من نمی دونم چرا این کار رو انجام میدی و جه دلیلی برای ذخیره کردن این check box ها در یک فیلد داری، اما به وسیله تابع isset() می تونی از True یا False بودنشون مطلع بشی و یک روش هم میتونی برای دخیره سازیشون در نظر بگیری، مثلا یک pattern مشخص بدی، برای مثال : check1 | check2 | check3 و در زمان خوندن هم از explode (http://php.net/manual/en/function.explode.php)و foreach استفاده کنی.

این یک روش بود که شاید خیلی هم کارامد نباشه، راستش من خودم درگیر یک پروژه هستم که کاملا وقتم رو گرفته، این روش به ذهنم رسید الان گفتم بگم.


موفق باشید

mamali-mohammad
پنج شنبه 19 آبان 1390, 22:24 عصر
خب همون check1 ، check2 و ... رو میشه بیشتر توضیح بدید ؟

alismith
جمعه 20 آبان 1390, 00:36 صبح
سلام

من یک مثال ساده براتون گذاشتم



<?php

$data = array();

foreach($_POST as $key => $value){

if(isset($_POST[$key])){

$data[] = $_POST[$key];

}

}

echo $dataString = implode('|',$data);


?>

<form method='post'>
<input type='checkbox' name='checkB1' value='check1' >
<input type='checkbox' name='checkB2' value='check2' >
<input type='checkbox' name='checkB3' value='check3' >
<input type='checkbox' name='checkB4' value='check4' >

<input type='submit' value='ok' >
</form>




موفق باشید

alismith
جمعه 20 آبان 1390, 08:09 صبح
دوست عزیز شرط رو به این شکل هم می تونی بنویسی :



if(isset($key)){

$data[] = $value;
}



موفق باشید

mamali-mohammad
جمعه 20 آبان 1390, 12:49 عصر
ممنون
من در این فرم گزینه های دیگه دارم
الان هم فرم میره به آرایه
چطوری فقط چک باکس رو به آرایه بفرستم ؟

alismith
جمعه 20 آبان 1390, 14:42 عصر
سلام

این هم یک مثال دیگه که خودتون می تونید customize کنید


<?php

$data = array();

foreach($_POST as $k => $v){
foreach($v as $key => $value){
if(isset($key)){

echo $key ."=>". $value."<br/>";

$data[] = $key;

}

}
}

echo $dataString = implode('|',$data);

?>

<form method='post'>
<input type='checkbox' name='checks[one]' value='check1' >
<input type='checkbox' name='checks[two]' value='check2' >
<input type='checkbox' name='checks[three]' value='check3' >
<input type='checkbox' name='checks[four]' value='check4' >

<input type='submit' value='ok' >
</form>


موفق باشید

pejman_view
جمعه 20 آبان 1390, 14:52 عصر
سلام

با تشکر از دوست گرامی AliSmith ، تنها مشکل کد علی جان این بود که کل فرم بصورت آرایه و رشته تبدیل می شد. اما ما فقط به چک باکس ها نیاز داریم برای اینکار من کد را کمی تغییر دادم. البته بخاطر تغییر دادن کد از آقا علی پوزش می طلبم.



<?php

$data = array(0,0,0,0);
if (isset($_POST['submit'])){
for ($i=1;$i<=4;$i++){
if (isset($_POST["checkB$i"]))
$data[$i-1] = 1;
}

echo $dataString = implode('',$data);
}

?>

<form method='post'>
<input type='checkbox' name='checkB1' value='check1' >
<input type='checkbox' name='checkB2' value='check2' >
<input type='checkbox' name='checkB3' value='check3' >
<input type='checkbox' name='checkB4' value='check4' >

<input type='submit' name="submit" value='ok' >
</form>


دقت کنید وارد کردن چند داده مختلف در یک فیلد کاری ناصحیح است، بگذارید برای آگاهی بیشتر یک مثال بزنم.
ما می خواهیم مشخصات آدرسی یک فرد را دریافت کنیم ما می توانیم در دیتابیس یک فیلد "آدرس" بگذاریم و آدرس را اینگونه وارد کنیم : "اهواز- کیانپارس - خ19"
اما در نرمالیزیشن این کار غلط است معایبی که خودم با آنها مواجه شدم:
1- ممکن است نام شهر، نام محله، خیابان طی زمان عوض شود و اصلاح آنها توسط مدیر کاری سخت و غیر ممکن خواهد شد.
2- سرعت خواندن اطلاعات در دیتابیس پایین می آید.
3- و خیلی مشکلات پیش بینی نشده دیگر
حالا برای رفع این مشکل شما بایستی چند فیلد دیگر اضافه کنید مانند: شهر، محله، خیابان، پلاک و ...
اما به نظر میاد این کار برای چک باکس باعث افزایش بیهوده فیلدها می شود بنابراین پیشنهاد من این است که شما از 0 و 1 استفاده کنید.
هر چک باکس کلاً یا 0 است (تیک نخورده) یا 1 است (تیک خورده) حالا اگر به مثال بالا توجه کنید من بر اساس 0 و 1 برنامه را نوشتم.
برای مثال شما چک باکس اول و سوم را بزنید رشته بازگشتی برای دیتابیس بدین صورت خواهد بود: 1010

برای خواندن این کد هم می توانید از فرمان substr استفاده کنید و در یک حلقه بگذارید.

***البته این کد فقط برای راهنمایی نوشتم نه برای اجرا در برنامه که بصورت کدهای آقا علی نیست چون ایشان سعی می کنند برای شما کدی مثال بزند که در جای دیگر هم استفاده شود.***

قربانتان
پژمان

alismith
جمعه 20 آبان 1390, 21:48 عصر
سلام

@pejman خواهش می کنم

من کد رو به منظور دریافت کل مقادیر فرم، اما ذخیره مقادیر مربوط به checkBox ها تغییر دادم


<?php

$data = array();

foreach($_POST as $key => $value){

if(isset($key) && substr($key,0,2) == "ch"){


echo $key ."=>". $value."<bR />";

$data[] = $value;

}

}


echo $dataString = implode('|',$data);


?>

<form method='post'>
<input type='checkbox' name='ch1' value='check1' >
<input type='checkbox' name='ch2' value='check2' >
<input type='checkbox' name='ch3' value='check3' >
<input type='checkbox' name='ch4' value='check4' >
<input type='radio' name='ra1' value='radio1' >
<input type='radio' name='ra2' value='radio2' >
<input type='radio' name='ra3' value='radio3' >

<input type='submit' value='ok' >
</form>



موفق باشید

mamali-mohammad
جمعه 11 آذر 1390, 21:49 عصر
ممنونم
مشکل حل شد
حالا چطوری زمانی که از دیتابیس فراخوانی می کنم ، همون گزینه هارو تیک بزنه ؟
ممنون

saina2006
شنبه 12 آذر 1390, 04:58 صبح
اولا بهتری که کل چک باکسهات رو به صورت array بفرستی تا دونه دونه، خودت راحت تری

برای مشکل جدیدتم بهتره از این راه استفاده کنی


<input type="checkbox" name="ch1" <?php ((ch1==1)? echo "checked=\"checked\"" : ""); ?> />

mamali-mohammad
دوشنبه 21 آذر 1390, 20:54 عصر
راه دیگه ای هست ؟
مثلا بگرده پیدا تو دیتابیس ببینه این مقدار مشابه رو داره یا نه !
اگه داشت تیک بزنه
مثلا :
مقدار ما در دیتابیس : سلام،خوبی،تست،حال
مقدار چک باکس ما : خوبی

حالا چون خوبی در دیتابیس هست ، اینو چک کنه

pejman_view
دوشنبه 21 آذر 1390, 22:40 عصر
راه دیگه ای هست ؟
مثلا بگرده پیدا تو دیتابیس ببینه این مقدار مشابه رو داره یا نه !
اگه داشت تیک بزنه
مثلا :
مقدار ما در دیتابیس : سلام،خوبی،تست،حال
مقدار چک باکس ما : خوبی

حالا چون خوبی در دیتابیس هست ، اینو چک کنه
سلام

راه 010101 را که بهت گفتم درسته که سخته از اون استفاده کن بهتره و برای نمایش هم باید یک حلقه ایجاد کنی و ببینی مقدار 0 است یا 1 اگر صفر بود در کد HTML آن از checked = checked استفاده می کنی. اگر هم نبود هم می توانید ننویسید هم می تواند unchecked استفاده کنید.

با آرزوی موفقیت.

mamali-mohammad
دوشنبه 21 آذر 1390, 23:09 عصر
خب محتویات همه چک بکس ها در یک دیتبایس با آرایه ذخیره میشه
اینو چه کنم ؟

mamali-mohammad
سه شنبه 22 آذر 1390, 15:15 عصر
دوستان یه کمکی کنید