 |
Checkbox แบบ Array กับการ ออกแบบฐานข้อมูลใน mysql ด้วย ภาษา php |
|
 |
|
|
 |
 |
|
สามอัน น่าจะใส่ชื่อเอาเลยก็ได้คับ ไม่เยอะ ใส่ อาเรย์ งงป่าวๆ
|
 |
 |
 |
 |
Date :
2011-12-06 10:24:38 |
By :
pjgunner.com |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
คือเรามีให้เลือกทั้งหมด ยี่สิบอัน เราจะไม่ทราบว่า user จะเลือกอันไหนบ้าง กำลังคิดอยู่ว่าถ้าเราออกแบบไว้สามคอลัมน์ บาง user ก็อาจจะใช้สาม บาง User ก็อาจจะใช่หนึ่ง อีกสองคอลัมน์ก็จะว่าง กลัวเปลื้องพื้นที่ในฐานข้อมูล รบกวนขอความคิดเห็นหน่อยนะค่ะ
|
 |
 |
 |
 |
Date :
2011-12-06 10:39:17 |
By :
มือใหม่หัดขับ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
สวัสดีครับ....
การออกแแบบฐานข้อมูลที่ดีคือการออกแบบให้เก็บข้อมูลที่เพียงพอต่อการนำไปใช้ โดยไม่ซ้ำซ้อนกันจนเกินความจำเป็น
จากโจทย์ที่ให้มา สามารถทำได้สองวิธีก็คือ
1. สร้างฟิลดิ์ตามจำนวน checkbox เลย ถ้าค่าไหนผู้ใช้ไม่ได้เลือกก็ให้ว่างหรือเซต default ไว้เลย ข้อดีก็คือเข้าใจได้ง่าย และง่ายต่อการเขียนโปรแกรมและรายงาน
แต่.. เนื่องจาก จขกท ใช้ array เพื่อเก็บข้อมูลจาก checkbox ซึ่งก็ไม่มีปัญหาอะไร และเป็นการฝึกการใช้ array ไปด้วย (ถ้าฟิลดิ์ไม่เยอะหรือไม่ dynamic อาจจะไม่ต้องใช้ array ก็ได้ครับ) ตรงนี้ขึ้นอยู่กับเทคนิคของแต่ละคน
2. สร้างฟิลดิ์เดียวเพื่อเก็บค่าจาก checkbox เลย ซึ่งอาจจะเก็บให้อยู่ในรูปของ text ธรรมดาแล้วใช้เครื่องหมายคั่น value แต่ละตัวเอาไว้ เนื่องจากเป็น array อยู่แล้วเพราะฉะนั้นตอน insert ก็ง่ายหน่อย แต่สำคัญก็คือการนำออกมาใช้งาน เพราะเมื่อ query ออกมาแล้วก็ต้องแยก value แต่ละตัวออกมาก่อน
ปัญหาคือ value แต่ละตัว ที่แยกออกมาจะใช้อะไรเป็นตัวที่จะบอกว่าเป็น value ของอะไร (ตรงนี้ก็มีวิธีจัดการครับ แต่อาจจะซับซ้อนหน่อย แต่ไม่มีปัญหา) เนื่องจาก value ที่ออกมาอาจจะมีจำนวนไม่เท่ากัน และอาจจะไม่เรียงลำดับด้วยซ้ำ (ในกรณีที่ไม่ได้เรียงไว้ตอนเก็บ) ทำให้เวลานำออกมาใช้งานอาจจะต้องเขียนฟังก์ชั่นขึ้นมาแยก value โดยเฉพาะ (ยากขึ้นมากกว่าวิธีแรกนิดหน่อย)
ถ้าเป็นระบบที่ต้องการความรวดเร็วในการพัฒนา และเป็นเพียงจุดเล็กๆในการเขียนโปรแกรม ซึ่งในอนาคตก็อาจจะมี checkbox แบบนี้อีก ผมมองว่าใช้วิธีแรกก็พอครับ
|
 |
 |
 |
 |
Date :
2011-12-06 10:40:41 |
By :
Songkram |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เก็บลงในฟิวด์เดียวครับ โดยเก็บในรุปแบบ comma (,) ครับ
|
 |
 |
 |
 |
Date :
2011-12-06 10:42:25 |
By :
webmaster |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
พอจะมีตัวอย่างไมค่ะ
|
 |
 |
 |
 |
Date :
2011-12-06 10:49:09 |
By :
มือใหม่หัดขับ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ถ้ามีมากขนาดนั้น หรืออาจมีตัวเลือกจำนวนเพิ่มขึ้นในอนาคต
1. Serialized Array
2. JSON
ถ้าหากไม่ได้จอยหรือเก็บค่าสำคัญ ที่ช่วยในการใช้งานฐานข้อมูล
|
 |
 |
 |
 |
Date :
2011-12-06 10:54:41 |
By :
pjgunner.com |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ลองใส่ลงฟิวล์เดียวเหมือนที่พี่ วิน บอก ครับ
แล้วใช้คำสั่ง serialize ก่อนเก็บลงฐานข้อมูล
Code (PHP)
<?php if(empty($_POST)){ ?>
<u>SELECT FIELD</u> <br />
<form id="form1" name="form1" method="post" action="">
<input type="checkbox" name="test[]" id="test_1" value="id|ID" />ID<br />
<input type="checkbox" name="test[]" id="test_2" value="name|NAME" />NAME<br />
<input type="checkbox" name="test[]" id="test_3" value="phone|PHONE" />PHONE<br />
<input type="checkbox" name="test[]" id="test_4" value="email|EMAIL" />EMAIL<br />
<input type="checkbox" name="test[]" id="test_5" value="address|ADDRESS" />ADDRESS<br />
<input type="submit" name="button" id="button" value="Submit" />
</form>
<?php }else{
echo serialize($_POST['test']);
}?>
|
 |
 |
 |
 |
Date :
2011-12-06 11:00:38 |
By :
ไวยวิทย์ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
มีตัวอย่างไมค่ะ อย่างเช่น คุณวิน ถ้าเกิดให้เก็บแล้ว ใส่เป็น (,) มีตัวอย่างไมค่ะ แล้วใช้ฐานข้อมูลเราต้องเลือก type เป็น enum หรือยังไงค่ะ
|
 |
 |
 |
 |
Date :
2011-12-06 11:01:59 |
By :
มือใหม่หัดขับ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Code (PHP)
$choices = array(
'abc' => 1,
'bcd' => 0,
'def' => 1,
);
$str2db = serialize($choices);
//ดึง
$choices = unserialize($str2db);
// แบบ json
$json = json_encode($choices);
// ดึง
$choices = json_decode($json, true);
http://www.pjgunner.com
|
ประวัติการแก้ไข 2011-12-06 11:07:02
 |
 |
 |
 |
Date :
2011-12-06 11:06:10 |
By :
pjgunner.com |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
$str2db = serialize($chk);
$sql = "insert into table( post_name,advertype_id,category_name,post_message,post_email,post_phone,post_address,post_country,post_city,post_zip,post_date) values ('$_POST[txtPost]','$_POST[Advertisingtype]','$str2db')";
ข้อมูลที่ echo ออกมา ตรง ที่เป็น array มันโชว์
'a:1:{i:0;s:6:"wanted";}' งงค่ะ ตัวอย่างนี้เราเลือกแค่ checkbox อันเดียว ว่า wanted ตรง Insert เราใส่ รูปแบบอะไรผิดหรือป่าวอะ
อันนี้พอเลือก สามอัน echo ออกมามันโชว์
'a:2:{i:0;s:6:"events";i:1;s:3:"pet";}' อันนี้เราเลือกสอง checkbox เป็น event กับ pet
รบกวนหน่อยนะค่ะ
|
 |
 |
 |
 |
Date :
2011-12-06 12:00:07 |
By :
มือใหม่หัดขับ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เวลาใช้งานต้อง unserialize() ก่อนคับ จะได้ อาเรย์ เหมือนตอนใส่ลงไป
|
 |
 |
 |
 |
Date :
2011-12-06 12:03:27 |
By :
pjgunner.com |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ลองทำแล้วดึงออกมาจากฐานข้อมูลไม่ได้ค่ะ งง
<?=$result unserialize["category_name"]; ?> ผิดรูปแบบหรือป่าวค่ะ มี error
Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' in C:\AppServ\www\viewpost.php on line 79
|
 |
 |
 |
 |
Date :
2011-12-06 14:01:25 |
By :
มือใหม่หัดขับ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ลองใส่แบบนี้ <?= unserialize($result["category_name"]); ?>
สิ่งที่ โชว์ออกมาคือคำว่า Array
|
 |
 |
 |
 |
Date :
2011-12-06 14:04:57 |
By :
มือใหม่หัดขับ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ช่วยด้วยค๊าบบบบบบ
|
 |
 |
 |
 |
Date :
2011-12-06 14:56:52 |
By :
มือใหม่หัดขับ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เป็นอาเรย์ก็ใช้แบบอาเรย์คับ
print_r(array('a', 'b', 'c'));
$arr = array('a', 'b', 'c');
echo $arr[0];
|
 |
 |
 |
 |
Date :
2011-12-06 15:06:03 |
By :
pjgunner.com |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
งง ไม่เข้าใจอะค่ะ
คือดึงฐานข้อมูลออกมาโชว์นะค่ะ แต่ตอนเก็บเข้าไปมันเป็น 'a:2:{i:0;s:6:"events";i:1;s:3:"pet";}'
$str2db = serialize($chk);
$sql = "insert into table( post_name,advertype_id,category_name,post_message,post_email,post_phone,post_address,post_country,post_city,post_zip,post_date) values ('$_POST[txtPost]','$_POST[Advertisingtype]','$str2db')";
สิ่งที่เข้าไปในฟิลด์นั้นคือ 'a:2:{i:0;s:6:"events";i:1;s:3:"pet";}'
ตอนดึงออกมา เราใช้
$result=select("postadvertising","where 1=1 and post_id='".$_GET["post_id"]."'");
<?= unserialize($result["category_name"]); ?> ตรงหน้า browser ฟิลด์นี้ มันโชว์คำว่า Array
ไม่เข้าใจรูปแบบที่คุณ เอี่ยวส่งมาค่ะ งง มือใหม่ค่ะ
|
 |
 |
 |
 |
Date :
2011-12-07 02:53:48 |
By :
มือใหม่หัดขับ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
query หรือยังครับ ?
|
 |
 |
 |
 |
Date :
2011-12-07 04:09:07 |
By :
yamcrocodile |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Code (PHP)
<?
$result=select("postadvertising","where 1=1 and post_id='".$_GET["post_id"]."'");
$query = mysql_query($result);
echo unserialize($query["category_name"]);
?>
|
 |
 |
 |
 |
Date :
2011-12-07 04:13:18 |
By :
yamcrocodile |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
<? echo unserialize($result["category_name"]); ?
เหมือนเดิมค่ะ ออกมา เป็น Array
filed อื่นขอมูลออกมาปกติ ยกเว้น ฟิลด์ category_name
|
 |
 |
 |
 |
Date :
2011-12-07 09:31:54 |
By :
มือใหม่หัดขับ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ก็มันเป็น array นี่คับคุณไปใช้แบบ string ได้อย่างไร
$arr = unserialize($query["category_name"]);
print_r($arr);
|
 |
 |
 |
 |
Date :
2011-12-07 10:16:54 |
By :
pjgunner.com |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
คือ มือใหม่จริงๆ นะค่ะ
<? $arr= unserialize($result["category_name"]);
print_r($arr);
?>
ผลที่ออกมา
Type : Array ( [0] => wanted [1] => parttime )
หรือปัญหามันอยู่ที่ตอนเราเก็บค่ะ
คือมือใหม่จริงๆ นะค่ะ
|
 |
 |
 |
 |
Date :
2011-12-07 11:53:21 |
By :
มือใหม่หัดขับ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ผมว่าควรศึกษาพื้นฐาน ตัวแปร ชนิดตัวแปร ต่างๆ ก่อนคับ
ถ้าเป็นแบบนี้ คุณก็ไม่สามารถทำอะไรได้ เพราะคุณไม่เข้าใจพื้นฐาน
|
 |
 |
 |
 |
Date :
2011-12-07 11:58:53 |
By :
pjgunner.com |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|