รูปแบบหรือลักษณะการทำงานของเนื้อหานี้คือ
- มีฟอร์ม สำหรับรับค่า โดยเราสามารถเพิ่ม ลบ หรือแก้ไขข้อมูลได้
- สามารถเพิ่ม ลบ แถวของชุดข้อมูล ที่ต้องการบันทึกได้
- การลบแถวของข้อมูล ในที่นี้จะลบจากด้านล่างสุดขึ้นมา
(หากต้องการลบแต่ละรายการ แบบเลือกลบ รายการเองได้
สามารถเพิ่มโค้ดคำสั่ง หรือปุ่มจัดการอื่นๆ เข้าไปตามต้องการ)
- ข้อมูลจะมีการบันทึก เมื่อกดปุ่ม submit
ชุดตัวอย่างนี้เป็นการทำงานกับข้อมูลในฐานข้อมูล สามารถสร้าง
ตารางสำหรับทดสอบ ตาม sql ด้านล่าง
ตาราง tbl_data สำหรับทดสอบ
CREATE TABLE `tbl_data` ( `data_id` int(11) NOT NULL auto_increment, `data_text` varchar(255) NOT NULL, `data_select` int(5) NOT NULL, PRIMARY KEY (`data_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ; -- -- Dumping data for table `tbl_data` -- INSERT INTO `tbl_data` VALUES (1, 'data1', 1);
ตัวอย่าง (เฉพาะในส่วนนี้ แสดงเฉพาะการเพิ่ม ลบ แถวเท่านั้น การเชื่อมต่อ
กับฐานข้อมูล ดูโค้ดด้านล่าง ทั้งหมด
สิ่งที่จำเป็นต้องมี และเหตุผลที่ต้องใช้งาน
ส่วนของตาราง กำหนด id="myTbl" เพื่อไว้เรียกใช้งาน
<table id="myTbl" width="650" border="1" cellspacing="2" cellpadding="0">
ส่วนของแถวข้อมูลสำหรับ clone กำหนด class="firstTr" ไว้เรียกใช้งาน
<tr class="firstTr">
ชุดของข้อมูลจะเก็บเป็น form array รูปแบบจะใช้ เป็นแบบ [] เช่น
<input type="text" class="text_data" name="data2[]" id="data2[]" value="" />
ต้องมีการเก็บค่า และใช้งาน input hidden เพื่อเก็บค่า id หลัก สำหรับส่งไปดำเนินการ
ในการเพิ่ม ลบ หรือแก้ไขข้อมูล ให้สอดคล้องกัน
<input name="h_item_id[]" type="hidden" id="h_item_id[]" value="" />
ต้องมีการเก็บค่า และใช้งาน input hidden สำหรับเก็บค่า id หลัก แบบ รวม
เพื่อเก็บค่า id หลักที่มีอยู่ก่อนแล้ว เพื่อใช้ในการตรวจสอบ รายการที่ต้องการลบ
<input name="h_all_id_data" type="hidden" id="h_all_id_data" value="<?=$all_id_data?>" />
ส่วนของการบันทึกข้อมูล
<?php
/// ส่วนของการเพิ่ม ลบ แก้ไข ข้อมูล
if($_POST['Submit']){
// ตรวจสอบค่า id หลักของข้อมูล ว่ามีข้อมูลหรือไม่
if(count($_POST['h_item_id'])>0){
// แยกค่า id หลักของข้อมูลเดิม ถ้ามี เก็บเป็นตัวแปร array
$h_data_id_arr=explode(",",substr($_POST['h_all_id_data'],0,-1));
foreach($_POST['h_item_id'] as $key_data=>$value_data){// วนลูป จัดการกับค่า id หลัก
if($value_data==""){ // ถ้าไม่มีค่า แสดงว่า จะเป็นการเพิ่มข้อมูลใหม่
@mysql_query("
INSERT INTO tbl_data (
data_id,
data_text,
data_select
)
VALUES (
NULL ,
'".$_POST['data2'][$key_data]."',
'".$_POST['data1'][$key_data]."'
);
");
}else{ // ถ้ามีค่าอยู่แล้ว ให้อัพเดท รายการข้อมูลเดิม โดยใช้ ค่า id หลัก
@mysql_query("
UPDATE tbl_data SET
data_text = '".$_POST['data2'][$key_data]."',
data_select = '".$_POST['data1'][$key_data]."'
WHERE data_id='".$value_data."' ;
");
}
}
// ตรวจสอบ id หลัก ค่าเดิม และค่าใหม่ เพื่อหาค่าที่ถูกลบออกไป
$h_data_id_arr_del = array_diff($h_data_id_arr, $_POST['h_item_id']);
if(count($h_data_id_arr_del)>0){ // ถ้ามี array ค่า id หลัก ที่จะถูกลบ
foreach($h_data_id_arr_del as $key_data=>$value_data){// วนลูป ลบรายการที่ไม่ต้องการ
@mysql_query("
DELETE FROM tbl_data WHERE data_id='".$value_data."' ;
");
}
}
}
}
?>
โค้ดตัวอย่าง และคำอธิบาย แสดงตามไฟล์ เดียวด้านล่าง
<?php
$link=mysql_connect("localhost","root","test"); // เชื่อมต่อ Server
mysql_select_db("test"); // ติดต่อฐานข้อมูล
mysql_query("set character set utf8"); // กำหนดค่า character set ที่จะใช้แสดงผล
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>jquery add remove row</title>
</head>
<body>
<?php
/// ส่วนของการเพิ่ม ลบ แก้ไข ข้อมูล
if($_POST['Submit']){
// ตรวจสอบค่า id หลักของข้อมูล ว่ามีข้อมูลหรือไม่
if(count($_POST['h_item_id'])>0){
// แยกค่า id หลักของข้อมูลเดิม ถ้ามี เก็บเป็นตัวแปร array
$h_data_id_arr=explode(",",substr($_POST['h_all_id_data'],0,-1));
foreach($_POST['h_item_id'] as $key_data=>$value_data){// วนลูป จัดการกับค่า id หลัก
if($value_data==""){ // ถ้าไม่มีค่า แสดงว่า จะเป็นการเพิ่มข้อมูลใหม่
@mysql_query("
INSERT INTO tbl_data (
data_id,
data_text,
data_select
)
VALUES (
NULL ,
'".$_POST['data2'][$key_data]."',
'".$_POST['data1'][$key_data]."'
);
");
}else{ // ถ้ามีค่าอยู่แล้ว ให้อัพเดท รายการข้อมูลเดิม โดยใช้ ค่า id หลัก
@mysql_query("
UPDATE tbl_data SET
data_text = '".$_POST['data2'][$key_data]."',
data_select = '".$_POST['data1'][$key_data]."'
WHERE data_id='".$value_data."' ;
");
}
}
// ตรวจสอบ id หลัก ค่าเดิม และค่าใหม่ เพื่อหาค่าที่ถูกลบออกไป
$h_data_id_arr_del = array_diff($h_data_id_arr, $_POST['h_item_id']);
if(count($h_data_id_arr_del)>0){ // ถ้ามี array ค่า id หลัก ที่จะถูกลบ
foreach($h_data_id_arr_del as $key_data=>$value_data){// วนลูป ลบรายการที่ไม่ต้องการ
@mysql_query("
DELETE FROM tbl_data WHERE data_id='".$value_data."' ;
");
}
}
}
}
?>
<br />
<br />
<br />
<div style="margin:auto;width:700px;">
<form id="form1" name="form1" method="post" action="">
<table id="myTbl" width="650" border="1" cellspacing="2" cellpadding="0">
<?php
$all_id_data="";
$q="SELECT * FROM tbl_data WHERE 1 ORDER BY data_id ";
$qr=@mysql_query($q);
if(@mysql_num_rows($qr)>0){
?>
<?php
while($rs=@mysql_fetch_array($qr)){
$all_id_data.=$rs['data_id'].",";
?>
<tr class="firstTr">
<td width="119">
<select name="data1[]" id="data1[]">
<option value="">Please select</option>
<option value="1" <?=($rs['data_select']==1)?"selected":""?>>data1</option>
<option value="2" <?=($rs['data_select']==2)?"selected":""?>>data2</option>
</select></td>
<td width="519">
<input name="h_item_id[]" type="hidden" id="h_item_id[]" value="<?=$rs['data_id']?>" />
<input type="text" class="text_data" name="data2[]" id="data2[]" value="<?=$rs['data_text']?>" />
</td>
</tr>
<?php } ?>
<?php }else{ ?>
<tr class="firstTr">
<td width="119">
<select name="data1[]" id="data1[]">
<option value="">Please select</option>
<option value="1">data1</option>
<option value="2">data2</option>
</select></td>
<td width="519">
<input name="h_item_id[]" type="hidden" id="h_item_id[]" value="" />
<input type="text" class="text_data" name="data2[]" id="data2[]" />
</td>
</tr>
<?php } ?>
</table>
<br />
<table width="500" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>
<button id="addRow" type="button">+</button>
<button id="removeRow" type="button">-</button>
<input name="h_all_id_data" type="hidden" id="h_all_id_data" value="<?=$all_id_data?>" />
<input type="submit" name="Submit" id="Submit" value="Submit" /></td>
</tr>
</table>
</form>
<br />
</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
$("#addRow").click(function(){
// ส่วนของการ clone ข้อมูลด้วย jquery clone() ค่า true คือ
// การกำหนดให้ ไม่ต้องมีการ ดึงข้อมูลจากค่าเดิมมาใช้งาน
// รีเซ้ตเป็นค่าว่าง ถ้ามีข้อมูลอยู่แล้ว ทั้ง select หรือ input
$(".firstTr:eq(0)").clone(true)
.find("input").attr("value","").end()
.find("select").attr("value","").end()
.appendTo($("#myTbl"));
});
$("#removeRow").click(function(){
// // ส่วนสำหรับการลบ
if($("#myTbl tr").size()>1){ // จะลบรายการได้ อย่างน้อย ต้องมี 1 รายการ
$("#myTbl tr:last").remove(); // ลบรายการสุดท้าย
}else{
// เหลือ 1 รายการลบไม่ได้
alert("ต้องมีรายการข้อมูลอย่างน้อย 1 รายการ");
}
});
});
</script>
</body>
</html>