ใน workshop นี้จะแนะนำการสร้างฟอร์มและอัพโหลดไฟล์เข้าไปใน database
รวมคลิปสอน php+mysqli
สอน CodeIgniter สอนทำระบบหนังสือเวียนออนไลน์
สอน CodeIgniter สอนทำระบบยืมคืนครุภัณฑ์
และกำหนดให้มีการมีเปลี่ยนชื่อไฟล์ใหม่ โดยไม่สนว่าคุณจะต้องชื่อไฟล์เป็นภาษาไทย หรืออังกฤษ สคริปตัวนี้จะตัดชื่อไฟล์เก่าออกเปลี่ยนชื่อไฟล์ใหม่หมด และเพื่อไม่ให้เกิดชื่อซ้ำสคริปนี้จะสุ่มตัวเลขและ ว/ด/ปที่อัพโหลด เป็นชื่อไฟล์
ก่อนอื่นเราต้องสร้าง table เพื่อเก็บชื่อไฟล์ใน database ก่อนนะครับ ผมจะยกตัวอย่างตารางง่ายๆ ดังนี้
ภาษา SQL
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 |
CREATE TABLE `uploadfile` ( `fileID` int(5) NOT NULL, `fileupload` varchar(200) CHARACTER SET utf8 NOT NULL, `dateup` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- -- Indexes for dumped tables -- -- -- Indexes for table `uploadfile` -- ALTER TABLE `uploadfile` ADD PRIMARY KEY (`fileID`); -- -- AUTO_INCREMENT for dumped tables -- -- -- AUTO_INCREMENT for table `uploadfile` -- ALTER TABLE `uploadfile` MODIFY `fileID` int(5) NOT NULL AUTO_INCREMENT; COMMIT; |
ไฟล์เริ่มต้น connection.php
1 2 3 4 5 |
<?php $con= mysqli_connect("localhost","root","123","myweb") or die("Error: " . mysqli_error($con)); mysqli_query($con, "SET NAMES 'utf8' "); error_reporting( error_reporting() & ~E_NOTICE ); ?> |
ฟอร์มสำหรับ upload และแสดงไฟล์ที่เรา upload เข้าไป
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 |
<!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>UPLOAD FILE</title> </head> <body> <?php //1. เชื่อมต่อ database: include('connection.php'); //ไฟล์เชื่อมต่อกับ database ที่เราได้สร้างไว้ก่อนหน้าน้ี //2. query ข้อมูลจากตาราง: $query = "SELECT * FROM uploadfile ORDER BY fileID asc" or die("Error:" . mysqli_error()); //3. execute the query. $result = mysqli_query($con, $query); //4 . แสดงข้อมูลที่ query ออกมา: //ใช้ตารางในการจัดข้อมูล echo "<table border='1' align='center' width='500'>"; //หัวข้อตาราง echo "<tr align='center' bgcolor='#CCCCCC'><td>File ID</td><td>File</td><td>date_create</td></tr>"; while($row = mysqli_fetch_array($result)) { echo "<tr>"; echo "<td align='center'>" .$row["fileID"] . "</td> "; //echo "<td><a href='.$row['fileupload']'>showfile</a></td> "; echo "<td>" .$row["fileupload"] . "</td> "; echo "<td align='center'>" .$row["dateup"] . "</td> "; echo "</tr>"; } echo "</table>"; //5. close connection mysqli_close($con); ?> <br/> <form action="add_file_db.php" method="post" enctype="multipart/form-data" name="upfile" id="upfile"> <p> </p> <table width="700" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td height="40" colspan="2" align="center" bgcolor="#D6D6D6">Form Upload File</td> </tr> <tr> <td width="126" bgcolor="#EDEDED"> </td> <td width="574" bgcolor="#EDEDED"> </td> </tr> <tr> <td align="center" bgcolor="#EDEDED">File Browser</td> <td bgcolor="#EDEDED"><label> <input type="file" name="fileupload" id="fileupload" required="required"/> </label></td> </tr> <tr> <td bgcolor="#EDEDED"> </td> <td bgcolor="#EDEDED"> </td> </tr> <tr> <td bgcolor="#EDEDED"> </td> <td bgcolor="#EDEDED"><input type="submit" name="button" id="button" value="Upload" /></td> </tr> <tr> <td bgcolor="#EDEDED"> </td> <td bgcolor="#EDEDED"> </td> </tr> </table> <p> </p> </form> </body> </html> |
ไฟล์ php ที่จะบันทึกข้อมูล (INSERT INTO) ที่กรอกในฟอร์มลงใน database ให้ตั้งชื่อไฟล์ว่า add_file_db.php นะครับ เพราะเราให้ฟอร์ม upload file ส่งค่า (action) มาที่ไฟล์นี้ หรือให้ทำงานต่อที่ไฟล์นี้ และไฟล์add_file_db.php ก็จะรับค่าเพื่อนำไปเก็บใน database ต่อไป
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 |
<meta charset="UTF-8"> <?php //1. เชื่อมต่อ database: include('connection.php'); //ไฟล์เชื่อมต่อกับ database ที่เราได้สร้างไว้ก่อนหน้าน้ี $fileupload = $_REQUEST['fileupload']; //รับค่าไฟล์จากฟอร์ม //ฟังก์ชั่นวันที่ date_default_timezone_set('Asia/Bangkok'); $date = date("Ymd"); //ฟังก์ชั่นสุ่มตัวเลข $numrand = (mt_rand()); //เพิ่มไฟล์ $upload=$_FILES['fileupload']; if($upload <> '') { //not select file //โฟลเดอร์ที่จะ upload file เข้าไป $path="fileupload/"; //เอาชื่อไฟล์เก่าออกให้เหลือแต่นามสกุล $type = strrchr($_FILES['fileupload']['name'],"."); //ตั้งชื่อไฟล์ใหม่โดยเอาเวลาไว้หน้าชื่อไฟล์เดิม $newname = $date.$numrand.$type; $path_copy=$path.$newname; $path_link="fileupload/".$newname; //คัดลอกไฟล์ไปเก็บที่เว็บเซริ์ฟเวอร์ move_uploaded_file($_FILES['fileupload']['tmp_name'],$path_copy); } // เพิ่มไฟล์เข้าไปในตาราง uploadfile $sql = "INSERT INTO uploadfile (fileupload) VALUES('$newname')"; $result = mysqli_query($con, $sql) or die ("Error in query: $sql " . mysqli_error()); mysqli_close($con); // javascript แสดงการ upload file if($result){ echo "<script type='text/javascript'>"; echo "alert('Upload File Succesfuly');"; echo "window.location = 'uploadfile.php'; "; echo "</script>"; } else{ echo "<script type='text/javascript'>"; echo "alert('Error back to upload again');"; echo "</script>"; } ?> |
กรณีอัพโหลดเป็นไฟล์ภาพ (.jpg) และต้องการให้แสดงภาพด้วยก็เอาโค๊ดจากไฟล์นี้นะครับ ผมเตรียมไว้ให้เรียบร้อยแล้ว
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 |
<!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>UPLOAD FILE</title> </head> <body> <?php //1. เชื่อมต่อ database: include('connection.php'); //ไฟล์เชื่อมต่อกับ database ที่เราได้สร้างไว้ก่อนหน้าน้ี //2. query ข้อมูลจากตาราง: $query = "SELECT * FROM uploadfile" or die("Error:" . mysqli_error()); //3.เก็บข้อมูลที่ query ออกมาไว้ในตัวแปร result . $result = mysqli_query($con, $query); //4 . แสดงข้อมูลที่ query ออกมา โดยใช้ตารางในการจัดข้อมูล: echo "<table border='1' align='center' width='500'>"; //หัวข้อตาราง echo "<tr align='center' bgcolor='#CCCCCC'><td>filename</td><td> img </td></tr>"; while($row = mysqli_fetch_array($result)) { echo "<tr>"; echo "<td>" .$row["fileupload"] . "</td> "; echo "<td>"."<img src='fileupload/".$row[fileupload]."' width='100'>"."</td>"; echo "</tr>"; } echo "</table>"; //5. close connection mysqli_close($con); ?> <br/> <form action="add_file_db.php" method="post" enctype="multipart/form-data" name="upfile" id="upfile"> <p> </p> <table width="700" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td height="40" colspan="2" align="center" bgcolor="#D6D6D6">Form Upload File</td> </tr> <tr> <td width="126" bgcolor="#EDEDED"> </td> <td width="574" bgcolor="#EDEDED"> </td> </tr> <tr> <td align="center" bgcolor="#EDEDED">File Browser</td> <td bgcolor="#EDEDED"><label> <input type="file" name="fileupload" id="fileupload" required="required"/> </label></td> </tr> <tr> <td bgcolor="#EDEDED"> </td> <td bgcolor="#EDEDED"> </td> </tr> <tr> <td bgcolor="#EDEDED"> </td> <td bgcolor="#EDEDED"><input type="submit" name="button" id="button" value="Upload" /></td> </tr> <tr> <td bgcolor="#EDEDED"> </td> <td bgcolor="#EDEDED"> </td> </tr> </table> </form> </body> </html> |
ตัวอย่างชื่อไฟล์ที่ได้ = 201602291693707633.jpg
ศึกษาการ Handling file uploads เพิ่มเติม
- POST method uploads
- Error Messages Explained
- Common Pitfalls
- Uploading multiple files
- PUT method support
- See Also
https://www.php.net/manual/en/features.file-upload.php
https://www.w3schools.com/php7/php7_file_upload.asp
ร่วมสนับสนุน ค่ากาแฟ ค่าโฮส devbanban.com และทีมงานได้ที่
ธนาคารกรุงไทย สาขาเดอะมอลล์ท่าพระ
ชื่อบัญชี นายพิศิษฐ์ บวรเลิศสุธี เลขที่ 878-0-17747-6
————————————————————————————
ธนาคารไทยพาณิชย์ สาขามหาวิทยาลัยราชภัฏธนบุรี
ชื่อบัญชี นายพิศิษฐ์ บวรเลิศสุธี เลขที่ 406-359094-1
fanpage : https://www.facebook.com/sornwebsites/