php+mysqli : ตย. ระบบบันทึกการประเมิน, php multiple insert update with array and foreach
ทำความเข้าใจการใช้ Array ตั้งแต่คลิปที่ 51 เป็นต้นไป
ตาราง ตย.
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 |
CREATE TABLE `tbl_q` ( `qid` int(5) NOT NULL, `qitem` int(11) NOT NULL, `qscore` int(11) NOT NULL, `qmid` int(11) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -- Indexes for dumped tables -- -- -- Indexes for table `tbl_q` -- ALTER TABLE `tbl_q` ADD PRIMARY KEY (`qid`); -- -- AUTO_INCREMENT for dumped tables -- -- -- AUTO_INCREMENT for table `tbl_q` -- ALTER TABLE `tbl_q` MODIFY `qid` int(5) NOT NULL AUTO_INCREMENT; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; |
ความหมายของคอลัมภ์
qid = pk
qitem = ข้อที่ประเมิน
qscore = คะแนนที่ได้
qmid = ไอดีผู้ประเมิน
Code ตย.
condb.php
1 2 3 4 5 |
<?php $con= mysqli_connect("localhost","root","password","dbname") or die("Error: " . mysqli_error($con)); mysqli_query($con, "SET NAMES 'utf8' "); ?> |
index.php (form)
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 |
<meta charset="utf-8" /> <!DOCTYPE html> <html> <head> <title>:: ตย.ระบบบันทึกการประเมิน devbanban.com ::</title> </head> <body> <h3>:: ตย.ระบบบันทึกการประเมิน devbanban.com ::</h3> <form action="save_db.php" method="post" name="form1" id="form1"> <style> input[type=number]{ width: 60px; } </style> <p> ข้อ 1 กรุณากรอกคะแนนระหว่าง 0-5: <input type='number' name='score[1]' value="0" min="0" max="5"/> </p> <p> ข้อ 2 กรุณากรอกคะแนนระหว่าง 0-5: <input type='number' name='score[2]' value="0" min="0" max="5"/> </p> <p> ข้อ 3 กรุณากรอกคะแนนระหว่าง 0-5: <input type='number' name='score[3]' value="0" min="0" max="5"/> </p> <p> ข้อ 4 กรุณากรอกคะแนนระหว่าง 0-5: <input type='number' name='score[4]' value="0" min="0" max="5"/> </p> <p> ข้อ 5 กรุณากรอกคะแนนระหว่าง 0-5: <input type='number' name='score[5]' value="0" min="0" max="5"/> </p> <input type='submit' name='button' id='button' value='SAVE' /> </form> </body> </html> |
save_db.php สำหรับรับข้อมูลจากฟอร์มบันทึกเข้าใน db
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 |
<meta charset="utf-8" /> <?php include('condb.php'); // print array ออกมาดู echo '<pre>'; print_r($_POST); echo '</pre>'; //exit; $qmid=1; //id emp รหัสพนง. เอาไปทำต่อนะจ้ะ foreach($_POST['score'] as $item=>$value){ //item คือข้อคำถามประเมิน //value คือคะแนนประเมิน $sql = "INSERT INTO tbl_q (qitem, qscore, qmid) VALUES ($item, '$value', '$qmid') "; $result = mysqli_query($con, $sql) or die ("Error in query: $sql " . mysqli_error($con)); echo $sql; echo '<hr>'; } exit; mysqli_close($con); if($result){ echo "<script type='text/javascript'>"; echo "alert('SAVE!!');"; echo "window.location='index.php';"; echo "</script>"; } else{ echo "<script type='text/javascript'>"; echo "window.location='index.php';"; echo "</script>"; } ?> |
ผลการทำงาน
เมื่อกรอกคะแนนเข้าไปแล้ว ก็จะบันทึกลงใน db ตามภาพเลยครับ
*มาต่อที่ระบบอัพเดทคะแนนกันครับ Multiple update with array and foreach
มาเริ่มที่หน้าเรียกข้อมูลจากตารางมาแสดงครับ (ใช้ตารางเดิม)
list_score.php
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 |
<?php //1. เชื่อมต่อ database: include('condb.php'); //ไฟล์เชื่อมต่อกับ database ที่เราได้สร้างไว้ก่อนหน้าน้ี //2. query ข้อมูลจากตาราง tb_member: $query = "SELECT * FROM tbl_q ORDER BY qid ASC"; //3.เก็บข้อมูลที่ query ออกมาไว้ในตัวแปร result . $result = mysqli_query($con, $query) or die("Error:" . mysqli_error($con)); //4 . แสดงข้อมูลที่ query ออกมา โดยใช้ตารางในการจัดข้อมูล: echo "<table border='1' align='center' width='300'>"; //หัวข้อตาราง echo "<tr align='center' bgcolor='#CCCCCC'> <td>item</td> <td>score</td> <td>update</td> </tr>"; foreach($result as $row){ //form echo "<form action='update_score.php' method='post'>"; echo "<tr>"; echo "<td align='center'>" .$row["qitem"] . "</td> "; echo "<td align='center'>" .$row["qscore"] . "</td> "; //ส่งแบบ array value & key , key คือไอดี (pk), value คือคะแนนใหม่ที่ต้องการอัพเดท *สังเกตตรง name & value echo "<td align='center'> <input type='number' name='update_score[$row[qid]]' value='$row[qscore]' min='0' max='5'></td>"; } echo "</tr>"; echo "<tr>"; echo "<td colspan='3' align='right'> ปรับปรุงคะแนน <button type='submit'>Update</button> </td>"; echo "<tr>"; echo '</form>'; echo "</table>"; //5. close connection mysqli_close($con); ?> |
ผลลัพธ์ หน้าแสดงผลลัพธ์ก็คือหน้าฟอร์มที่จะ action ไปที่สคลิปในการอัพเดทคะแนน ใส่คะแนนในคอล้มภ์ update โดยจะแสดงคะแนนที่เคยประเมินก่อนหน้า
จากหน้าแสดงผลลัพธ์มีการ action มา update ต่อที่ไฟล์ update_score.php
update_score.php
ใช้ foreach ในการอัพเดทข้อมูลที่เป็นแบบ array *ถ้ายังไม่เข้าใจเรื่อง array ให้ดูคลิปที่แปะด้านบนครับ
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 |
<meta charset="utf-8" /> <?php include('condb.php'); // print array ออกมาดู echo '<pre>'; print_r($_POST); echo '</pre>'; //exit; foreach($_POST['update_score'] as $item=>$value){ //item คือid ประเมิน pk ในตาราง //value คือคะแนนประเมิน *ที่อัพเดท $sql = "UPDATE tbl_q SET qscore=$value WHERE qid=$item"; $result = mysqli_query($con, $sql) or die ("Error in query: $sql " . mysqli_error($con)); //แสดงผลลัพธ์การอัพเดท echo $sql; echo '<hr>'; } exit; mysqli_close($con); if($result){ echo "<script type='text/javascript'>"; echo "alert('SAVE!!');"; echo "window.location='index.php';"; echo "</script>"; } else{ echo "<script type='text/javascript'>"; echo "window.location='index.php';"; echo "</script>"; } ?> ?> |
ผลลัพธ์
*Code ชุดนี้สามารถเอาไปประยุกต์ทำอะไรได้หลายอย่างเลยครับ เช่น ระบบที่ต้องมีการเพิ่ม-อัพเดท 1 ฟอร์ม แต่มีหลายข้อมูล ดังตัวอย่างระบบประเมินเป็นต้น
** PHP+Mysqli : ลบข้อมูลทีละหลายเรคคอร์ด, multiple delete data using checkbox คลิก
ระบบแจ้งซ่อม รองรับ php7 ค่าตัว 8,000 บาท ได้ Code ทั้งหมด
ร่วมสนับสนุน ค่ากาแฟ ค่าโฮส devbanban.com และทีมงานได้ที่
ธนาคารกรุงไทย สาขาเดอะมอลล์ท่าพระ
ชื่อบัญชี นายพิศิษฐ์ บวรเลิศสุธี เลขที่ 878-0-17747-6
————————————————————————————
ธนาคารไทยพาณิชย์ สาขามหาวิทยาลัยราชภัฏธนบุรี
ชื่อบัญชี นายพิศิษฐ์ บวรเลิศสุธี เลขที่ 406-359094-1
โทร. 094 861 6709 , Email: devbanban@gmail.com (พิศิษฐ์)