Bootstrap 5.1 Version
https://getbootstrap.com/docs/5.1/getting-started/introduction/
angularjs CDN
https://angularjs.org/ Version 1.8.2 https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js
CREATE TABLE `uploads` (
`id` int(11) NOT NULL,
`file_name` varchar(150) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `uploads` (`id`, `file_name`) VALUES
(1, '1643355908_01.jpg'),
(2, '1643426291_02.jpg'),
(3, '1643426291_13532763_1267843279894447_3651828689419392719_n.jpg'),
(4, '1643426291_13882562_10153788775718730_5796830824454484119_n.jpg');
ALTER TABLE `uploads`
ADD PRIMARY KEY (`id`);
ALTER TABLE `uploads`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
index.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 | //index.php <!DOCTYPE html> <html > <head> <title>AngularJS Multiple File Upload with PHP MySQLi</title> <meta charset= "utf-8" > <link href= "https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel= "stylesheet" > </head> <body ng-app= "uploadmultiple" ng-controller= "uploadCTR" ng-init= "fetch()" > <div class = "container" > <h1 class = "page-header text-center" >AngularJS Multiple File Upload with PHP MySQLi</h1> <div class = "row" > <div class = "col-3" > <h3 class = "text-center" >Upload File/s</h3> <hr> <label>File:</label> <input type= "file" file-input= "files" multiple> <hr> <button class = "btn btn-primary" ng-click= "upload()" ><span class = "glyphicon glyphicon-download-alt" ></span> Upload</button> <div ng-show= "error" class = "alert alert-danger text-center" style= "margin-top:30px;" > <button type= "button" class = "close" ng-click= "clearMessage()" ><span aria-hidden= "true" >×</span></button> <span class = "glyphicon glyphicon-remove" ></span> {{ errorMessage }} </div> <div ng-show= "success" class = "alert alert-success text-center" style= "margin-top:30px;" > <button type= "button" class = "close" ng-click= "clearMessage()" ><span aria-hidden= "true" >×</span></button> <span class = "glyphicon glyphicon-check" ></span> {{ successMessage }} </div> </div> <div class = "col-9" > <div class = "row" > <div class = "col-md-4" ng-repeat= "rs in images" style= "margin-bottom:10px;" > <img ng-src= "upload/{{ rs.file_name }}" width= "100%" height= "250px" class = "thumbnail" > </div> </div> </div> </div> </div> <script src= "angular.js" ></script> </body> </html> |
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 | //angular.js var app = angular.module( 'uploadmultiple' , []); app.directive( 'fileInput' , [ '$parse' , function ( $parse ) { return { restrict: 'A' , link: function ( $scope , elm, attrs){ elm.bind( 'change' , function (){ $parse (attrs.fileInput).assign( $scope , elm[0].files); $scope . $apply (); }); } } }]); app.controller( 'uploadCTR' , function ( $scope , $http ){ $scope .error = false; $scope .errorMessage = "" ; $scope .success = false; $scope .successMessage = "" ; $scope .upload = function (){ $http ({ method: 'POST' , url: 'upload.php' , transformRequest: function (data) { var uploadForm = new FormData(); angular.forEach( $scope .files, function (file){ uploadForm.append( 'file[]' , file); }); return uploadForm; }, headers: { 'Content-Type' :undefined, 'Process-Data' : false}, }).then( function (data){ console.log(data) if (data.data.error){ $scope .error = true; $scope .errorMessage = data.data.message; } else { $scope .success = true; $scope .successMessage = data.data.message; $scope .fetch(); } }, function (error){ console.log(error, 'can not get data.' ); }); } $scope .fetch = function (){ $http ({ method: 'GET' , url: 'fetch.php' , }).then( function (data){ console.log(data) $scope .images = data.data; }, function (error){ console.log(error, 'can not get data.' ); }); } $scope .clearMessage = function (){ $scope .error = false; $scope .errorMessage = "" ; $scope .success = false; $scope .successMessage = "" ; } }); |
1 2 3 4 5 6 7 8 9 10 11 12 | //fetch.php <?php $conn = new mysqli( 'localhost' , 'root' , '' , 'testingdb' ); $output = array (); $sql = "SELECT * FROM uploads" ; $query = $conn ->query( $sql ); while ( $row = $query ->fetch_array()){ $output [] = $row ; } echo json_encode( $output ); ?> |
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 | //upload.php <?php $conn = new mysqli( 'localhost' , 'root' , '' , 'testingdb' ); $out = array ( 'error' => false); if (! empty ( $_FILES [ 'file' ][ 'name' ])){ $count = count ( $_FILES [ 'file' ][ 'name' ]); foreach ( $_FILES [ 'file' ][ 'name' ] as $key => $filename ){ $newFilename = time() . "_" . $filename ; $path = 'upload/' . $newFilename ; if (move_uploaded_file( $_FILES [ 'file' ][ 'tmp_name' ][ $key ], $path )){ $sql = "INSERT INTO uploads (file_name) VALUES ('$newFilename')" ; $query = $conn ->query( $sql ); } if ( $query ){ if ( $count > 1){ $out [ 'message' ] = 'Files Uploaded Successfully' ; } else { $out [ 'message' ] = 'File Uploaded Successfully' ; } } else { $out [ 'error' ] = true; $out [ 'message' ] = 'File Uploaded but not Saved' ; } } } else { $out [ 'error' ] = true; $out [ 'message' ] = 'Upload Failed. File empty!' ; } echo json_encode( $out ); ?> |