รูปแบบหรือลักษณะการทำงานของเนื้อหานี้คือ
- มีฟอร์ม สำหรับรับค่า โดยเราสามารถเพิ่ม ลบ หรือแก้ไขข้อมูลได้
- สามารถเพิ่ม ลบ แถวของชุดข้อมูล ที่ต้องการบันทึกได้
- การลบแถวของข้อมูล ในที่นี้จะลบจากด้านล่างสุดขึ้นมา
(หากต้องการลบแต่ละรายการ แบบเลือกลบ รายการเองได้
สามารถเพิ่มโค้ดคำสั่ง หรือปุ่มจัดการอื่นๆ เข้าไปตามต้องการ)
- ข้อมูลจะมีการบันทึก เมื่อกดปุ่ม submit
ชุดตัวอย่างนี้เป็นการทำงานกับข้อมูลในฐานข้อมูล สามารถสร้าง
ตารางสำหรับทดสอบ ตาม sql ด้านล่าง
ตาราง tbl_data สำหรับทดสอบ
1 2 3 4 5 6 7 8 9 10 11 12 | 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" เพื่อไว้เรียกใช้งาน
1 | <table id= "myTbl" width= "650" border= "1" cellspacing= "2" cellpadding= "0" > |
ส่วนของแถวข้อมูลสำหรับ clone กำหนด class="firstTr" ไว้เรียกใช้งาน
1 | <tr class = "firstTr" > |
ชุดของข้อมูลจะเก็บเป็น form array รูปแบบจะใช้ เป็นแบบ [] เช่น
1 | <input type= "text" class = "text_data" name= "data2[]" id= "data2[]" value= "" /> |
ต้องมีการเก็บค่า และใช้งาน input hidden เพื่อเก็บค่า id หลัก สำหรับส่งไปดำเนินการ
ในการเพิ่ม ลบ หรือแก้ไขข้อมูล ให้สอดคล้องกัน
1 | <input name= "h_item_id[]" type= "hidden" id= "h_item_id[]" value= "" /> |
ต้องมีการเก็บค่า และใช้งาน input hidden สำหรับเก็บค่า id หลัก แบบ รวม
เพื่อเก็บค่า id หลักที่มีอยู่ก่อนแล้ว เพื่อใช้ในการตรวจสอบ รายการที่ต้องการลบ
1 | <input name= "h_all_id_data" type= "hidden" id= "h_all_id_data" value= "<?=$all_id_data?>" /> |
ส่วนของการบันทึกข้อมูล
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | <?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."' ; "); } } } } ?> |
โค้ดตัวอย่าง และคำอธิบาย แสดงตามไฟล์ เดียวด้านล่าง
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 | <?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" <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> |