สวัสดีครับ ในบทความนี้จะแสดงการทำงาน และแจกโค้ด ระบบเพิ่มข้อมูลข้อสอบ/คำถาม/ตัวเลือก/Choice เขียนด้วย PHP PDO MySQL สำหรับเอาไปแนวทางในการพัฒนาระบบสอบออนไลน์ ฝึกไว้ครับ เผื่อได้ใช้ รองรับ php7 – php8
ขอแนะนำระบบพร้อมใช้ ราคาถูก ได้ Code + Database ทั้งหมด
1.เว็บอีคอมเมิร์ช คลิก
2.เว็บ FOOD POS ขายอาหารหน้าร้าน คลิก
3.เว็บ Coffee POS ขายกาแฟหน้าร้าน คลิก
4.เว็บบริษัท / เว็บองค์กร คลิก
5.ระบบหอพัก โปรแกรมหอพัก คลิก
6.ระบบยืมคืน เบิกจ่ายพัสดุ ครุภัณฑ์ คลิก
7.ระบบแจ้งซ่อมสำหรับองค์กร คลิก
8.ระบบฐานข้อมูลวิจัย คลังข้อมูลวิจัย ฐานข้อมูลวิทยานิพนธ์ Research Corpus คลิก
9.ระบบสอบออนไลน์ คลิก
10.ระบบอื่นๆ เพิ่มเติม คลิก
ขอแนะนำระบบข้อสอบออนไลน์ , ระบบคลังข้อสอบ, โปรแกรมสอบเก็บคะแนน PHP PDO Online Testing System
ขอบเขตระบบ
*ผู้ดูแลระบบ
-ล็อคอิน
-จัดการข้อมูลผู้ดูแลระบบ (เพิ่ม ลบ แก้ไข แก้รหัสผ่าน)
-จัดการข้อมูลวิชา/ตัวเลือก/เฉลย (เพิ่ม ลบ แก้ไข)
-ดูผลสอบรายบุคคล
-ดูรายงาน (Dashboard) รูปแบบกราฟเส้นแสดงจำนวนการเข้าสอบแต่ละวัน
*ผู้ใช้ทั่วไป
-ดูรายวิชาที่เปิดสอบ
-เข้าสอบและดูรายงานผลการสอบ
*ระบบพัฒนาจากอะไร
-ภาษา PHP PDO ฐานข้อมูลใช้ MySQL
-รองรับการทำงาน PHP7 – PHP8
-Frontend หน้าบ้านใช้ Bootstrap4, หลังบ้านใช้ AdminLTE v3
-ระบบสามารถนำไปต่อยอดได้ ใช้จริงได้ แก้ได้ เขียนเพิ่มได้
demo : https://devbanban.com/app/e-test/
ค่าตัว 7000 บาท ได้ Code & Database ทั้งหมด
สนใจ inbox มาที่ https://www.facebook.com/sornwebsites
รวมคลิปสอนปรับพื้นฐาน ภาษา php ฟรี 100 คลิป ++ https://devbanban.com/?p=3940
โค้ดประกอบด้วย
- PHP PDO
- MySQL SQL INSERT
- HTML
- Bootstrap5 Class : col, form, btn
- Sweet Alert
มาเริ่มทำ workshop กันครับ *คอมเม้นอยู่ในโค้ด
0.รวม Workshop PHP PDO ก่อนหน้าคลิก
1.ตารางข้อมูลตัวอย่างจะชื่อ tbl_choice ให้สร้างฐานข้อมูลก่อนครับ เช่น ฐานข้อมูลชื่อ workshop_pdo จากนั้นไปที่เมนู sql คัดลอกโค้ดไปวางและ go
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
CREATE TABLE `tbl_choice` ( `no` int(11) NOT NULL, `question` varchar(255) NOT NULL COMMENT 'คำถาม', `choiceA` varchar(200) NOT NULL COMMENT 'ตัวเลือก', `choiceB` varchar(200) NOT NULL COMMENT 'ตัวเลือก', `choiceC` varchar(200) NOT NULL COMMENT 'ตัวเลือก', `choiceD` varchar(200) NOT NULL COMMENT 'ตัวเลือก', `choiceAns` varchar(1) NOT NULL COMMENT 'เฉลย' ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ALTER TABLE `tbl_choice` ADD PRIMARY KEY (`no`); ALTER TABLE `tbl_choice` MODIFY `no` int(11) NOT NULL AUTO_INCREMENT; |
2.สร้างโฟลเดอร์สำหรับทดสอบ เช่น ชื่อโฟลเดอร์ workshop_pdo *สำหรับคนที่เพิ่งฝึกยังไม่เข้าใจข้อนี้ว่าต้องสร้างไว้ที่ไหน ให้ดูคลิปชุดนี้ก่อน รวมคลิปสอนปรับพื้นฐาน ภาษา php ฟรี 100 คลิป ++ https://devbanban.com/?p=3940
3.ไฟล์เชื่อมต่อฐานข้อมูล ชื่อไฟล์ connect.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php $servername = "localhost"; $username = "root"; $password = "password"; //ไม่ได้ตั้งรหัสผ่าน ให้ลบ password ออกครับ try { $conn = new PDO("mysql:host=$servername;dbname=workshop_pdo;charset=utf8", $username, $password); // set the PDO error mode to exception $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //echo "Connected successfully"; } catch(PDOException $e) { echo "Connection failed: " . $e->getMessage(); } //Set ว/ด/ป เวลา ให้เป็นของประเทศไทย date_default_timezone_set('Asia/Bangkok'); ?> |
4.ไฟล์ workshop formAddQuestion.php สามารถเปลี่ยนชื่อไฟล์ได้ เช่น form_add.php เป็นต้น *มีคอมเม้นใน code
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 |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-F3w7mX95PdgyTmZZMECAngseQB83DfGTowi0iMjiWaeVhAn4FJkqJByhZMI3AhiU" crossorigin="anonymous"> <title>Bootstrap5 Form add Question by devbanban.com 2022</title> <!-- sweet alert --> <script src="https://code.jquery.com/jquery-2.1.3.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/sweetalert/1.1.3/sweetalert-dev.js"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/sweetalert/1.1.3/sweetalert.css"> </head> <body> <div class="container"> <div class="row"> <div class="col-md-12"> <div class="alert alert-danger" role="alert"> <h3>ระบบเพิ่มข้อมูลข้อสอบ/คำถาม/ตัวเลือก/Choice : PHP PDO MySQL </h3> </div> <form method="post"> <!-- action ในตัว เลื่อนไปดูด้านล่าง --> <div class="row mb-1"> <div class="col"> คำถาม <input type="text" name="question" class="form-control" placeholder=" คำถาม" required minlength="5"> </div> </div> <div class="row mb-1"> <!-- mb หมายถึง ระยะห่างจากด้านล่าง or margin-buttom --> <div class="col"> ตัวเลือก A <!-- minlength="5" คือ กรอกขั้นต้ำ 5 ตัว // required คือ บังคับกรอก --> <input type="text" name="choiceA" class="form-control" placeholder="ตัวเลือก A" required minlength="5"> ตัวเลือก B <input type="text" name="choiceB" class="form-control" placeholder=" ตัวเลือก B" required minlength="5"> ตัวเลือก C <input type="text" name="choiceC" class="form-control" placeholder="ตัวเลือก C" required minlength="5"> ตัวเลือก D <input type="text" name="choiceD" class="form-control" placeholder=" ตัวเลือก D" required minlength="5"> </div> </div> <div class="row mb-2"> <div class="col-12 col-sm-2"> เฉลย <!-- pattern คือกำหนดรูปแบบการกรอกข้อมูล ในเคสนี้คือ ให้กรอก a-d จำนวน 1 ตัว เท่านั้น --> <input type="text" name="choiceAns" class="form-control" placeholder="a-d" required pattern="[a-d]{1}" maxlength="1"> </div> </div> <div class="d-grid gap-2 col-12 mx-auto"> <button class="btn btn-primary" type="submit">เพิ่มข้อมูล</button> </div> </form> <!-- //ขอแนะนำระบบพร้อมใช้ ราคาเบาๆ ซื้อแล้วได้ code ทั้งหมด เอาไปต่อยอดได้ //ระบบแจ้งซ่อม https://www.youtube.com/watch?v=bkYBKfFauB8 //ระบบจัดการหอพัก https://www.youtube.com/watch?v=O7Bh0BNCDz8 //ระบบสอบออนไลน์ https://www.youtube.com/watch?v=WOTLFEflkMk --> <?php //เช็คหน่อยว่ามีส่ง input อะไรมาบ้าง // echo '<pre>'; // print_r($_POST); // echo '</pre>'; // exit(); //อยากให้ทำงานได้ ให้คอมเม้นบรรทัด 61 - 64 ครับ //ตรวจสอบตัวแปรที่ส่งมาจากฟอร์ม if (isset($_POST['question']) && isset($_POST['choiceA']) && isset($_POST['choiceB']) && isset($_POST['choiceC']) && isset($_POST['choiceD']) && isset($_POST['choiceAns'])) { //ไฟล์เชื่อมต่อฐานข้อมูล require_once 'connect.php'; //sql insert $stmt = $conn->prepare("INSERT INTO tbl_choice ( question, choiceA, choiceB, choiceC, choiceD, choiceAns ) VALUES ( :question, :choiceA, :choiceB, :choiceC, :choiceD, :choiceAns ) "); //bindParam data type $stmt->bindParam(':question', $_POST['question'], PDO::PARAM_STR); $stmt->bindParam(':choiceA', $_POST['choiceA'], PDO::PARAM_STR); $stmt->bindParam(':choiceB', $_POST['choiceB'], PDO::PARAM_STR); $stmt->bindParam(':choiceC', $_POST['choiceC'], PDO::PARAM_STR); $stmt->bindParam(':choiceD', $_POST['choiceD'], PDO::PARAM_STR); $stmt->bindParam(':choiceAns', $_POST['choiceAns'], PDO::PARAM_STR); $result = $stmt->execute(); $conn = null; //close connect db //เงื่อนไขตรวจสอบการเพิ่มข้อมูล if($result){ echo '<script> swal({ title: "เพิ่มข้อมูลสำเร็จ", //ข้อความ เปลี่ยนได้ เช่น บันทึกข้อมูลสำเร็จ!! text: "กำลังกลับไปหน้าหลักใน 3 วินาที", //ข้อความเปลี่ยนได้ตามการใช้งาน type: "success", //success, warning, danger timer: 3000, //ระยะเวลา redirect 3000 = 3 วิ เพิ่มลดได้ showConfirmButton: false //ปิดการแสดงปุ่มคอนเฟิร์ม ถ้าแก้เป็น true จะแสดงปุ่ม ok ให้คลิกเหมือนเดิม }, function(){ window.location.href = "formAddQuestion.php"; //หน้าเพจที่เราต้องการให้ redirect ไป }); </script>'; }else{ echo '<script> setTimeout(function() { swal({ title: "เกิดข้อผิดพลาด", type: "error" }, function() { window.location = "formAddQuestion.php"; //หน้าที่ต้องการให้กระโดดไป }); }, 1000); </script>'; } //else ของ if result } //isset //ตัวอย่าง workshop ป้องกันบันทึกข้อมูลซ้ำ https://devbanban.com/?p=4221 //ขอแนะนำระบบพร้อมใช้ ราคาเบาๆ ซื้อแล้วได้ code ทั้งหมด เอาไปต่อยอดได้ //ระบบแจ้งซ่อม https://www.youtube.com/watch?v=bkYBKfFauB8 //ระบบจัดการหอพัก https://www.youtube.com/watch?v=O7Bh0BNCDz8 //ระบบสอบออนไลน์ https://www.youtube.com/watch?v=WOTLFEflkMk ?> |
5.คลิปแสดงการทำงาน
ลองเอาไปประยุกต์ใช้ดูครับ และฝากติดตาม workshop ต่อๆ ไปด้วยครับผม
Bootstrap5 : https://getbootstrap.com/
ฝึก SQL : https://www.w3schools.com/sql/default.asp
แหล่งศึกษา PDO เพิ่มเติม : https://websitebeaver.com/php-pdo-vs-mysqli
List of PDOStatement::bindParam data_type parameters : https://www.php.net/manual/en/pdo.constants.php
ร่วมสนับสนุน ค่ากาแฟ ค่าโฮส devbanban.com ได้ที่
ธนาคารกรุงไทย สาขาเดอะมอลล์ท่าพระ
ชื่อบัญชี นายพิศิษฐ์ บวรเลิศสุธี เลขที่ 878-0-17747-6
————————————————————————————
ธนาคารไทยพาณิชย์ สาขามหาวิทยาลัยราชภัฏธนบุรี
ชื่อบัญชี นายพิศิษฐ์ บวรเลิศสุธี เลขที่ 406-359094-1
fanpage : https://www.facebook.com/sornwebsites/