สวัสดีครับ ในบทความนี้จะแจกตัวอย่างโค้ดระบบอัพโหลดไฟล์เอกสาร PDF แบบง่ายๆ โดยเขียนในรูปแบบ PHP PDO รองรับการทำงาน PHP7 และ PHP8 สำหรับเอาไปศึกษาและพัฒนาต่อยอดครับ *ฝึกไว้ครับเผื่อได้ใช้
ตัวอย่างระบบที่นิยมอัพโหลดไฟล์ PDF
1.ระบบคลังข้อมูลวิจัย คลิก
2.ระบบหนังสือเวียน คลิก
3.ระบบอื่นๆ เพิ่มเติม คลิก
รวมคลิปสอนปรับพื้นฐาน ภาษา php ฟรี 100 คลิป ++ https://devbanban.com/?p=3940
โค้ดประกอบด้วย
- PHP PDO
- MySQL
- HTML
- Bootstrap5
- Sweet Alert
มาเริ่มทำ workshop กันครับ *คอมเม้นอยู่ในโค้ด
0.รวม Workshop PHP PDO ก่อนหน้าคลิก
1.ตารางเก็บข้อมูลตัวอย่างจะชื่อ tbl_pdf ให้สร้างฐานข้อมูลก่อนครับ เช่น ฐานข้อมูลชื่อ workshop_pdo จากนั้นไปที่เมนู sql คัดลอกโค้ดไปวางและ go
1 2 3 4 5 6 7 8 9 10 11 12 |
CREATE TABLE `tbl_pdf` ( `no` int(11) NOT NULL, `doc_name` varchar(200) NOT NULL COMMENT 'ชื่อเอกสาร', `doc_file` varchar(100) NOT NULL COMMENT 'ชื่อไฟล์เอกสาร', `dateCreate` timestamp NOT NULL DEFAULT current_timestamp() COMMENT 'วันที่เพิ่มเอกสาร' ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ALTER TABLE `tbl_pdf` ADD PRIMARY KEY (`no`); ALTER TABLE `tbl_pdf` 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 = "yourpassword"; //ไม่ได้ตั้งรหัสผ่านก็ลบ yourpassword ออก 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.สร้างโฟลเดอร์สำหรับเก็บไฟล์ pdf ที่อัพโหลด ชื่อ docs (ตั้งตาม code บรรทัด 83) **สร้างไฟล์ index.php หรือ index.html (ไม่ต้องมี code) ไว้ในโฟลเดอร์ด้วยนะครับจะได้ป้องกันการเข้าถึงทุกไฟล์ในโฟลเดอร์
5.ไฟล์ workshop ตั้งชื่อไฟล์ upload_pdf.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 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 |
<!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>Basic Upload pdf file PHP PDO by devbanban.com 2021</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-1"></div> <div class="col-md-10"> <br> <h3>PHP PDO Basic Upload PDF File</h3> <form action="" method="post" enctype="multipart/form-data"> <input type="text" name="doc_name" required class="form-control" placeholder="ชื่อเอกสาร"> <br> <font color="red">*อัพโหลดได้เฉพาะ .pdf เท่านั้น </font> <input type="file" name="doc_file" required class="form-control" accept="application/pdf"> <br> <button type="submit" class="btn btn-primary">Upload</button> </form> <h3>รายการเอกสาร </h3> <table class="table table-striped table-hover table-responsive table-bordered"> <thead> <tr> <th width="5%">ลำดับ</th> <th width="85%">ชื่อเอกสาร</th> <th width="10%">เปิดดู</th> </tr> </thead> <tbody> <?php //คิวรี่ข้อมูลมาแสดงในตาราง require_once 'connect.php'; $stmt = $conn->prepare("SELECT* FROM tbl_pdf"); $stmt->execute(); $result = $stmt->fetchAll(); foreach($result as $row) { ?> <tr> <td><?= $row['no'];?></td> <td><?= $row['doc_name'];?></td> <td><a href="docs/<?php echo $row['doc_file'];?>" target="_blank" class="btn btn-info btn-sm"> เปิดดู </a></td> <?php } ?> </tbody> </table> <br> <center>PHP PDO Basic Upload PDF file by devbanban.com 2021 <br> <a href="https://devbanban.com/?cat=250" target="_blank">คอร์สออนไลน์ คลิก</a> || <a href="https://devbanban.com/?p=3196" target="_blank">ระบบพร้อมใช้ คลิก</a> </center> </div> </div> </div> </body> </html> <?php if (isset($_POST['doc_name'])) { require_once 'connect.php'; //สร้างตัวแปรวันที่เพื่อเอาไปตั้งชื่อไฟล์ใหม่ $date1 = date("Ymd_His"); //สร้างตัวแปรสุ่มตัวเลขเพื่อเอาไปตั้งชื่อไฟล์ที่อัพโหลดไม่ให้ชื่อไฟล์ซ้ำกัน $numrand = (mt_rand()); $doc_file = (isset($_POST['doc_file']) ? $_POST['doc_file'] : ''); $upload=$_FILES['doc_file']['name']; //มีการอัพโหลดไฟล์ if($upload !='') { //ตัดขื่อเอาเฉพาะนามสกุล $typefile = strrchr($_FILES['doc_file']['name'],"."); //สร้างเงื่อนไขตรวจสอบนามสกุลของไฟล์ที่อัพโหลดเข้ามา if($typefile =='.pdf'){ //โฟลเดอร์ที่เก็บไฟล์ **สร้างไฟล์ index.php หรือ index.html (ไม่ต้องมี code) ไว้ในโฟลเดอร์ด้วยนะครับจะได้ป้องกันการเข้าถึงทุกไฟล์ในโฟลเดอร์ $path="docs/"; //ตั้งชื่อไฟล์ใหม่เป็น สุ่มตัวเลข+วันที่ $newname = 'doc_'.$numrand.$date1.$typefile; $path_copy=$path.$newname; //คัดลอกไฟล์ไปยังโฟลเดอร์ move_uploaded_file($_FILES['doc_file']['tmp_name'],$path_copy); //ประกาศตัวแปรรับค่าจากฟอร์ม $doc_name = $_POST['doc_name']; //sql insert $stmt = $conn->prepare("INSERT INTO tbl_pdf (doc_name, doc_file) VALUES (:doc_name, '$newname')"); $stmt->bindParam(':doc_name', $doc_name, PDO::PARAM_STR); $result = $stmt->execute(); $conn = null; //close connect db //เงื่อนไขตรวจสอบการเพิ่มข้อมูล if($result){ echo '<script> setTimeout(function() { swal({ title: "อัพโหลดไฟล์เอกสารสำเร็จ", type: "success" }, function() { window.location = "upload_pdf.php"; //หน้าที่ต้องการให้กระโดดไป }); }, 1000); </script>'; }else{ echo '<script> setTimeout(function() { swal({ title: "เกิดข้อผิดพลาด", type: "error" }, function() { window.location = "upload_pdf.php"; //หน้าที่ต้องการให้กระโดดไป }); }, 1000); </script>'; } //else ของ if result }else{ //ถ้าไฟล์ที่อัพโหลดไม่ตรงตามที่กำหนด echo '<script> setTimeout(function() { swal({ title: "คุณอัพโหลดไฟล์ไม่ถูกต้อง", type: "error" }, function() { window.location = "upload_pdf.php"; //หน้าที่ต้องการให้กระโดดไป }); }, 1000); </script>'; } //else ของเช็คนามสกุลไฟล์ } // if($upload !='') { } //isset ?> |
6.ผลการทำงาน
ลองเอาไปประยุกต์ใช้ดูครับ และฝากติดตาม workshop ต่อๆ ไปด้วยครับผม
Bootstrap5 : https://getbootstrap.com/
แหล่งศึกษา 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/