Uploading Multiple Files to Google Drive with Google App Script

Hướng dẫn upload nhiều file trong Google App Script bằng Javascript, kết hợp HTML

Index.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <h1>Uploading Multiple Files to Google Drive with Google App Script</h1>
    
    <div>
        <input type="file" name="filesToUpload" id="filesToUpload" multiple>
        <input type="button" value="Submit" onclick="uploadFiles()">
    
    <br />
    <div id="output"></div>
    </div>
    
    
   <?!= include('Script'); ?>
  </body>
</html>


Code.gs

function doGet() {
   return HtmlService.createTemplateFromFile('Index').evaluate().setTitle("Upload files");
}
function include(filename) {
  return HtmlService.createHtmlOutputFromFile(filename)
      .getContent();
}
function createFolder(parentFolderId, folderName) {
	try {
		var parentFolder = DriveApp.getFolderById(parentFolderId);
		var folders = parentFolder.getFoldersByName(folderName);
		var folder;
		if (folders.hasNext()) {
			folder = folders.next();
		} else {
			folder = parentFolder.createFolder(folderName);
		}
		return {
			'folderId' : folder.getId()
		}
	} catch (e) {
		return {
			'error' : e.toString()
		}
	}
}

function uploadFile(base64Data, fileName, folderId) {
	try {
		var splitBase = base64Data.split(','), type = splitBase[0].split(';')[0]
				.replace('data:', '');
		var byteCharacters = Utilities.base64Decode(splitBase[1]);
		var ss = Utilities.newBlob(byteCharacters, type);
		ss.setName(fileName);

		var folder = DriveApp.getFolderById(folderId);
		var files = folder.getFilesByName(fileName);
		var file;
		while (files.hasNext()) {
			// delete existing files with the same name.
			file = files.next();
			folder.removeFile(file);
		}
		file = folder.createFile(ss);
		return {
			'folderId' : folderId,
			'fileName' : file.getName()
		};
	} catch (e) {
		return {
			'error' : e.toString()
		};
	}
}

Script.html

<script>
		var rootFolderId = '0BzFoC9aU9gwFYXZkbUZiTHg2LVE';
		var numUploads = {};
		numUploads.done = 0;
		numUploads.total = 0;
		var folderName = 'Demo';
		function uploadFiles() {
			var allFiles = document.getElementById('filesToUpload').files;
			  
			
			if (allFiles.length == 0) {
				window.alert('No file selected!');
			} else {
				numUploads.total = allFiles.length;
				google.script.run.withSuccessHandler(createFolder_withSuccessHandler).createFolder(rootFolderId, folderName);
			}
		}
        function createFolder_withSuccessHandler(data){
            var allFiles = document.getElementById('filesToUpload').files;
            for (var i = 0; i < allFiles.length; i++) {						
						uploadFile(allFiles[i], data.folderId);
					}
        }
		function uploadFile(file, folderId) {
			var reader = new FileReader();
			reader.onload = function(e) {
				var content = reader.result;
				document.getElementById('output').innerHTML = 'uploading '
						+ file.name + '...';					
				google.script.run.withSuccessHandler(onFileUploaded)
						.uploadFile(content, file.name, folderId);
			}
			reader.readAsDataURL(file);
		}
		function onFileUploaded(r) {
			numUploads.done++;
			document.getElementById('output').innerHTML = 'uploaded '
					+ r.fileName + ' (' + numUploads.done + '/'
					+ numUploads.total + ' files).';
			if (numUploads.done == numUploads.total) {
				document.getElementById('output').innerHTML = 'All of the '
						+ numUploads.total + ' files are uploaded';
				numUploads.done = 0;
			}
		}	
</script>

Source code

Resize ảnh với HTML5 FileReader

Khi lập trình web, các vấn đề liên quan đến hình ảnh được sử dụng thường xuyên, ví dụ upload hình ảnh sản phẩm, banner, logo….

Từ đây nảy sinh vài vấn đề như: muốn thấy hình ảnh đại diện ngay khi chọn file. Resize hình ảnh để tiết kiệm dung lượng…. Trước khi HTML5 ra đời, chúng ta thường hay giải quyết mọi thứ trên server, tức là upload ảnh lên server, sau đó xử lý. VD: dùng ajax để upload ảnh lên server, sau đó trả về ảnh đại diện…. Điều này dẫn đến tốn thời gian xử lý cho máy chủ, hoặc file lớn, mạng chậm thì user phải chờ đợi rất lâu.

Thật may mắn khi HTML5 ra đời, nó giúp chúng ta cả 2 việc trên luôn. Đó là preview (xem trước) hình ảnh ngay khi vừa chọn xong, đồng thời resize ảnh luôn ngay trên trình duyệt. Sau đó chúng ta chỉ việc upload mã base64 này lên server, và convert lại thành hình ảnh là xong, hoặc lưu luôn base64 vào database cũng ok.

HTML sử dụng API FileReader, nó có thể đọc file ảnh, file txt, khá là thú vị.

Code chọn ảnh xong hiển thị ảnh đại diện

Code javascript

Các bạn chú ý, có sử dụng jQuery

Code resize hình ảnh

Code javascript

See the Pen Resize Image with HTML5 File Reader by tuanitpro (@tuanitpro) on CodePen.

Chúc các bạn thành công.

CSDL tên Quốc gia, tỉnh thành phố thị xã quận huyện, xã phường Việt Nam

  • Thông tin 245quốc gia trên thế giới
  • Thông tin 64 tỉnh thành  phố Việt Nam
  • Thông tin 697 quận huyện / thị xã
  • Thông tin 11110 xã phường

Nguồn tài liệu tham khảo: cổng thông tin điện tử các tỉnh thành, quận huyện, từ điển bách khoa toàn thư điện tử Wikipedia.
Định dạng dữ liệu: bảng cơ sở dữ liệu SQL
Mục đích: chia sẻ giúp các bạn webmaster đang muốn lấy một nguồn thông tin chuẩn mực về tên các đơn vị hành chính cho các dự án website, cổng thông tin điện tử ….

 Download  

 

 

Chúc các bạn thành công

Upload file trong Google Apps Script

Hướng dẫn sau đây giúp bạn upload một file từ máy của hình lên thư mục trên Google Drive của bạn thông qua Google Apps Script

Code.gs

// Ham upload file, nhận vào một file input
function uploadFileToGoogleDrive(fileInput) {
/* Name of the Drive folder where the files should be saved */
var dropbox = FOLDER_NAME;
var folder,folders = DriveApp.getFoldersByName("Ten_thu_muc_cua_ban"); //getFolderById, getFoldersByName

/* Find the folder, create if the folder does not exist */
if (folders.hasNext()) {
folder = folders.next();
} else {
folder = DriveApp.createFolder(dropbox);
}

/* Get the file uploaded though the form as a blob */
var file = folder.createFile(fileInput);

/* Set the file description as the name of the uploader */
//file.setDescription("Uploaded by " + form.myName);

/* Return the download URL of the file once its on Google Drive */
var fileUrl=file.getUrl();
Logger.log(fileUrl)
return fileUrl;
}


// Ham thực thi Upload file. Data là một FormId
function doUploadFile(data){

 var myFile = data.myfile;
 if(typeof myFile !== 'undefined' && myFile!=null && myFile.length>0)
 { 
 return uploadFileToGoogleDrive(myFile);
 }
 return "";
}

Code HTML

 <form name="uploadfile" enctype="multipart/form-data" id="uploadForm">
     <label>Chọn file tải lên</label>
     <input type="file" name="myfile" id="myfile" />
     <button type="button" class="btn btn-primary" onclick="return doUploadFile();">Upload</button>
</form>

Code Javascript

function doUploadFile() { 
        google.script.run           
            .doUploadFile(document.getElementById("uploadForm"));

}

 

Cách học lập trình ASP.NET MVC tốt nhất?

Bài viết được dịch từ trang web Danylkoweb

Gần đây tôi có tham dự một cuộc hội thảo CONDG hàng tháng và đã gặp một vài người có hứng thú trong việc học cách sử dụng ASP.NET MVC.

Thật trùng hợp, tôi cũng thấy có khá nhiều người trên mạng xã hội Quora hỏi về cách thức tốt nhất để học ASP.NET MVC. Ngoài việc thảo luận về cách tốt nhất để tìm hiểu nó, tôi cũng sẽ đưa ra những cách nhanh nhất để học lập trình ASP.NET MVC.

Học những kiến thức nền tảng trước

Nếu bạn là người chỉ mới bắt đầu làm quen với ASP.NET, thì bạn cần phải học VB.NET hoặc C# trước. Cả hai ngôn ngữ lập trình này là một phần của ASP.NET, do đó bạn cần phải quen thuộc với một (hoặc cả hai) ngôn ngữ.

Khi mới bắt đầu, tôi muốn giới thiệu tới bạn một cuốn sách C# của nhà xuất bản Apress có tên là Beginning C# Object-Oriented Programming của tác giả Dan Clark. Đây là một trong những cuốn sách có nội dung khá dễ hiểu dành cho người mới bắt đầu.

Nếu bạn là một người đã có kinh nghiệm lập trình trong (Java, C, C++, v.v…), thì tôi muốn giới thiệu tới bạn một cuốn sách khác từ Apress tên là Pro C# 5.0 and the .NET 4.5 Framework của tác giả Andrew Troelsen.

Bây giờ bạn biết mọi thứ về C#, lúc này bạn sẽ chuyển sang ASP.NET MVC.

Nếu bạn đang quan tâm đến cách làm thế nào để bắt đầu học Lập trình website với ASP.NET MVC thì tôi đang có Khóa học Lập trình ASP.NET MVC dành cho bạn đấy. Hình thức học linh hoạt, giúp bạn cách tiếp cận hoàn toàn khác biệt sách vở.

Bắt đầu tìm hiểu về ASP.NET MVC

Bạn có biết ASP.NET MVC là một nền tảng mã nguồn mở của Microsoft giúp cho công việc phát triển web của bạn trở nên dễ dàng hơn so với công nghệ trước đó của họ được gọi là WebForms. MVC là cụm từ viết tắt của Model-View-Controller. Đây là một pattern về kiến trúc phần mềm đã được hình thành từ những năm 1970 và 80.

Cách nhanh nhất để tìm hiểu một công nghệ mới là tìm hiểu sâu về cách mọi thứ hoạt động. Một cách để làm điều này đó là bạn hãy tải về và xem xét vòng đời của một ứng dụng web MVC. Đây là một tài liệu rất dễ hiểu và bổ ích. Tất cả mọi thứ được giải thích cho bạn qua những chi tiết cụ thể. Thậm chí tôi đã in nó ra và dán lên tường nơi bàn làm việc của mình.

Nếu bạn đang tìm kiếm một tài liệu để đọc, thì tôi muốn giới thiệu tới bạn cuốn sách có tên là Pro ASP.NET MVC 5 của tác giả Adam Freeman. Tôi đã thu được rất nhiều kiến thức cơ bản về lập trình ASP.NET MVC trong cuốn sách này và vẫn tham khảo lại khi cần.

Những khóa học lập trình trực tuyến

Nếu bạn đang tìm kiếm một khóa học lập trình trực tuyến chất lượng, thì một trong những trang web tôi yêu thích và thường hay lui tới là Pluralsight. Pluralsight có hơn 1.000 khóa học về tất cả mọi thứ từ lập trình web tới di động và ảo hóa. Bạn phải trả $30/tháng và tham gia các khóa học không giới hạn.

Về các khóa học ASP.NET MVC, tôi muốn giới thiệu tới bạn các khóa học Pluralsight sau đây:

  • ASP.NET MVC 5 Fundamentals – Scott Allen
  • Automated ASP.NET MVC Testing: End to End – Jason Roberts
  • Architecting Applications for the Real World in .NET – Cory House

Hầu hết các khóa học này có thời lượng từ 2 đến 3 giờ, bởi vậy bạn hãy dành đủ thời gian để hoàn thành các khóa học chất lượng này nhé!

Tạo ra một sản phẩm thú vị

Cuối cùng, hãy bắt đầu áp dụng kiến thức bạn đã học được bằng cách xây dựng một sản phẩm gì đó. Bạn đã học đến lúc này, tại sao lại không bắt đầu xây dựng một ứng dụng web? Dưới đây là một vài ý tưởng để giúp bạn bắt đầu:

  • Tạo ra một ứng dụng dạng To-do list (danh sách công việc phải làm)
  • Xây dựng một danh sách liên lạc (contact list)
  • Viết một blog nhỏ

Kết luận

Ưu điểm của phương pháp học này là bạn có thể áp dụng kiến thức đã học vào thực tế một cách nhanh chóng. Và bạn cũng có thể áp dụng cách học này cho những ngôn ngữ lập trình khác.

Viết code trong các ngôn ngữ lập trình khác sẽ trở nên ngày càng dễ dàng hơn cùng với kinh nghiệm mà bạn đã tạo ra cho chính mình.

Bạn có cách nào nhanh hơn để tìm hiểu về ASP.NET MVC? Hãy để lại ý kiến của mình trong phần bình luận phía dưới nhé!

Về tác giả bài viết:

hoc-lap-trinh-truc-tuyen-online-aspnet-mvc-tot-nhat-14012016-2Tác giả bài viết là Jonathan Danylko. Anh là người có trên 30 năm kinh nghiệm lập trình và hiện nay Jonathan đang tập trung vào lĩnh vực ASP.NET MVC Best Practices, Code Exorcisms (refactorings)…

 

Nguồn bài dịch: Techmaster.vn

Tại sao bạn nên chọn PHP để lập trình web?

Bài viết được dịch từ trang web SitePoint

Đó là một câu hỏi phổ biến. Tại sao thực sự nên chọn PHP chứ không phải là một lựa chọn nào khác? Sau tất cả, PHP thường bị xem như là một ngôn ngữ lộn xộnkhông sử dụng được và có thiết kế rất tồi. Tại sao mọi người chọn nó khi bắt đầu một dự án từ đầu?

Thay vì liệt kê những lý do tại sao mọi người chọn nó (cái này có rất nhiều), chúng ta hãy tập trung vào lý do tại sao mọi người nên chọn nó. Tuy nhiên, chúng ta không thể nói về điều đó mà không đề cập đến những trường hợp mà nó không nên được sử dụng.

Khi nào thì bạn KHÔNG nên chọn PHP

Khi viết các ứng dụng dạng command line

Nếu bạn xây dựng một ứng dụng dạng dòng lệnh (command line), PHP không phải là sự lựa chọn đúng. Chắc chắn là cũng có những cách tiếp cận tốt để xây dựng ứng dụng CLI (Command Line Interface) bằng PHP, nhưng chỉ đơn giản là nó không được thiết kế với mục đích làm điều đó. Đầu tiên và trước hết, PHP là một ngôn ngữ web, và một ứng dụng thuần command line tốt hơn là nên được xây dựng bằng một ngôn ngữ khác. Điều đó không phải để nói rằng nó không thể – mà chắc chắn ứng dụng đó sẽ nhanh hơn và dễ dàng hơn khi thực hiện bằng một ngôn ngữ khác. Việc xây dựng các ứng dụng CLI bằng PHP thì tự bản thân nó chính là phép ẩn dụ mà người ta sử dụng khi so sánh PHP với một cái búa có hai đầu dùng để nhổ đinh. Chỉ vì nó không phải là công cụ dành cho việc đó. Ví dụ – Python được cài đặt sẵn trên hầu hết các hệ điều hành họ *nix, vì vậy bạn có thể truy cập ngay lập tức tới nó mà không cần phải vọc vậy chỉnh sửa file php.ini, và có thể bắt đầu làm việc ngay lập tức.

Khi nó có vẻ như dễ dàng nhất

Nếu PHP có vẻ là cách dễ dàng nhất trong các ngôn ngữ và đó là động lực duy nhất của bạn, thì sự lựa chọn đó của bạn là sai lầm. PHP có thể trở nên phức tạp một cách nhanh chóng, và phải thừa nhận rằng việc dễ dàng hơn những ngôn ngữ khác là điều không thực tế. Việc thực hiện những dự án quan trọng thì độ khó cũng tương đương nhau trong bất kỳ ngôn ngữ nào.

Chỉ vì nhà cung cấp hosting của bạn hỗ trợ nó

Nếu bạn đang sử dụng một shared host, và vui sướng với thực tế rằng nó hỗ trợ PHP (thậm chí không phải là phiên bản mới nhất), hãy dừng lại. Nếu bạn đang xem mình là một nhà phát triển phần mềm, thì đừng bao giờ sử dụng các shared host cho bất cứ điều gì ngoại trừ một số thứ lặt vặt như custom webmail, quản lý domain, hoặc những demo hết sức đơn giản. Với những lựa chọn thay thế như DigitalOcean cung cấp các máy chủ riêng ảo (VPS – Virtual Private Server) được lưu trữ trên ổ SSD với chi phí ít nhất là $5 đô-la/tháng, thì việc chọn một shared host không có ý nghĩa gì – vì VPS mang lại cho bạn nhiều quyền kiểm soát hơn. Nếu bạn không hài lòng với đội ngũ DevOps của họ và không thích tự tay thiết lập server (dù vậy bạn thực sự nên tìm hiểu cách làm điều đó), có rất nhiều nhà cung cấp cloud hosting đưa ra các tầng miễn phí được cấu hình sẵn cho bạn. Hãy tránh xa các shared host.

Phần mềm tính toán mạnh

Khi bạn muốn viết phần mềm làm việc rất nhiều với toán học, các tính toán phức tạp, thống kê và những thứ tương tự như vậy, có những lựa chọn tốt hơn – đặc biệt là nếu ứng dụng đó chủ yếu làm công việc này là chính. Thì các ngôn ngữ dạng functional như Scala hoặc ngôn ngữ mới Dart sẽ thực thi tác vụ này tốt hơn nhiều so với PHP, vì nếu làm bằng PHP có thể yêu cầu nhiều nỗ lực hơn để nó có khả năng làm những việc bạn muốn. PHP cũng chậm hơn đáng kể ở những công việc mà các ngôn ngữ khác được thiết kế dành riêng cho chúng.

Đôi khi sẽ đơn giản hơn nếu viết phần nặng về tính toán của các ứng dụng trong ngôn ngữ mà bạn đang làm việc hiện tại, nhưng đó thường là một sự lười biếng. Sự khó chịu khi phải cài đặt một ngôn ngữ helper hoặc máy ảo và xây dựng phần đó như một ứng dụng riêng biệt thường được bù đắp bởi những lợi ích lâu dài, đặc biệt khi lượng traffic bắt đầu đòi hỏi điều đó. Có một lý do mà phần tính toán back-end của mạng xã hội Twitter được viết bằng Scala, mặc dù phần front-end của họ vẫn là Ruby on Rails.

PHP là rất dễ học

Các vấn đề được liệt kê ở trên là những vấn đề của việc thiếu kiến thức và kinh nghiệm, và đương nhiên là khi ai đó sử dụng PHP cho một mục đích như vậy thì kết quả cuối cùng là không được tối ưu – nó sẽ bổ sung thêm những ý kiến xấu đến danh tiếng đã bị hoen ố của PHP. Vậy PHP tốt nhất cho điều gì?, đó là bất kỳ kịch bản hướng web nào cần phát triển nhanh chóng, và cần thực hiện thực sự nhanh.

PHP có một cộng đồng rất lớn. Đúng vậy, đại đa số là các tay lính mới, nhưng một khi bạn đã gạt bỏ những thành phần linh tinh, còn lại là một số ít các chuyên gia có tâm huyết như Phil SturgeonJosh LockhartMike van Riel,Anthony Ferrara và rất nhiều người khác nữa. Một tá chuyên gia có nhiều tâm huyết thừa nhận những nhược điểm của PHP, nhưng cũng làm việc vất vả trong việc hướng dẫn cho cộng đồng và sửa chữa những vấn đề đó, họ có thể cung cấp một kho tàng kiến thức có giá trị. Cùng với những nguồn tài nguyên tuyệt vời như diễn đàn SitePoint,StackOverflow và PTRW, những vấn đề gặp phải trong PHP dễ dàng được giải quyết, và quá trình này thường nhanh chóng và có chất lượng cao. Trừ khi các câu hỏi mà bạn đặt ra là hết sức ngớ ngẩn (và vâng,  những câu hỏi ngớ ngẩn), cộng đồng này luôn luôn sẵn sàng giúp đỡ.

Số lượng các dự án mã nguồn mở cũng như là các cuốn sách và khóa học về PHP là rất dồi dào, với sự kiên nhẫn và tài liệu hướng dẫn thì bạn có thể trở nên rất thông thạo ngôn ngữ này trong một khoảng thời gian tương đối ngắn.

Xua tan những tin xấu

PHP đã trưởng thành hơn nhiều kể từ lần cuối cùng mà người ta tập hợp những điểm tồi của nó, và nó đã kế thừa rất nhiều những tính năng hiện đại của các ngôn ngữ khác. Thành kiến ở đây rất phổ biến, và chúng ta nên học cách để nhận ra điều đó. Như nội dung bài viết tuyệt vời này trên blog MailChimp từ năm 2010 nói rằng, nó không phải là công cụ, mà do cách bạn sử dụng nó như thế nào.

PHP cho phép nhanh chóng tạo nguyên mẫu của tất cả các loại ứng dụng, và có thể giúp bạn dựng lên chạy thử mà không tốn nhiều thời gian. Nó là một ngôn ngữ nhanh và mạnh mẽ, và thậm chí còn nhanh hơn cả Ruby on Rails và Python trong rất nhiều các ứng dụng web phức tạp, cùng với những lợi ích tăng thêm của các dự án nhưHHVM và Phalcon, hiệu suất của PHP là không có đối thủ trong các ngôn ngữ dynamic.

Bây giờ, trước khi bạn hùa theo đám đông và hét toáng lên là “chỉ cần sử dụng NodeJS, nó là tốt nhất!” hay “MailChimp sẽ tốt hơn bằng cách sử dụng NodeJS ngay từ đầu”, thì trước tiên bạn hãy xem xét sự hỗn loạn và phân mảnh của thế giới JavaScript hiện nay. Có tuổi đời trẻ hơn PHP, nhưng các framework của JS nhiều hơn – đó là một điểm mà nhiều kẻ ghét PHP thường đem ra chế diễu. Ngoài ra luôn có sự chênh lệch giữa các giải pháp khác nhau, và mỗi cái đều tuyên bố mình là “đơn giản hơn/ tốt hơn/ nhanh hơn để làm việc X”. Cộng đồng này là rất lớn, nhưng bị phân mảnh khủng khiếp. Điều này được thể hiện qua một tweet vui trên mạng xã hội Twitter như sau:

Trò chơi uống rượu phạt cho các nhà phát triển web:
(1) Bạn hãy nghĩ ra một danh từ
(2) Hãy tìm kiếm trên Google cụm từ “<tên danh từ đó>.js”
(3) Nếu có một thư viện với tên đó đã tồn tại – thì phạt uống một ly rượu
— Shay Friedman (@ironshay)

Ý định của tôi không phải là đi bôi nhọ những ngôn ngữ khác – những người khác có thể làm công việc đó tốt hơn rất nhiều trong việc phân tích nhược điểm của JS hơn tôi – điều mà tôi đang cố gắng chỉ ra đó là thực tế rằng ai cũng có thể soi mói vào những nhược điểm của bất kỳ ngôn ngữ nào. Cũng giống như trong cuộc sống vậy, nếu bạn chỉ tập trung vào những thứ tiêu cực thì bạn sẽ chẳng bao giờ có những trải nghiệm tốt cả – những nhược điểm của PHP đã được chăm sóc bởi các thư viện và framework, và trong khi người ta có thể lập luận rằng một “ngôn ngữ đích thực” thì không cần các bản vá lỗi hoặc sự giúp đỡ của các công ty lớn để làm việc, nhưng ai có thể đếm được chính xác những gì các thư viện và các gói Java, NPM hoặc PUB dùng để vá lỗi và cải tiến ngôn ngữ này, bổ sung thêm những chức năng còn thiếu để người ta có thể sử dụng.

Vì vậy hãy dừng ngay việc tập trung vào bàn về ngôn ngữ X dở như thế nào, mà hãy bắt đầu làm việc trên các dự án chứng tỏ tính ưu việt trong sự lựa chọn của chúng ta. Vâng, có những dự án ngoài kia làm giảm uy tín của nó – WordPress là một trong những dự án như vậy – nhưng nếu chúng ta kiên trì và xây dựng với những thứ tốt nhất, chúng ta có thể xua tan đi những tiếng xấu và bắt đầu xây dựng lại thế giới PHP mà chúng ta yêu quý.

Kết luận

PHP là một lựa chọn tuyệt vời cho các dự án mới bất kể sự phức tạp của chúng. Thế giới PHP đã phát triển với những bước đi thần tốc trong một vài năm gần đây, và một số tính năng mới mang tính cách mạng có thể đưa vào sử dụng ngay hôm nay (tham khảo các liên kết về HHVM và Phalcon ở trên). Theo tôi thì nó nên là công cụ chính trong hộp công cụ của bạn – việc thông thạo nhiều ngôn ngữ lập trình cũng mang lại hữu ích như bạn biết nhiều ngoại ngữ vậy – nhưng chắc chắn sẽ tốt hơn nếu bạn thật tinh thông về một ngôn ngữ. PHP cung cấp cho bạn khả năng đi từ ý tưởng, đến nguyên mẫu, tới sản phẩm trong thời gian rất ngắn – và đó không phải là điều mà nhiều ngôn ngữ làm được. Những tiến bộ gần đây như OpCache built-in và các máy ảo như HHVM đưa ngôn ngữ này đi xa hơn, cho phép bạn giảm đáng kể chi phí cloud hosting, và các trình giám sát hiệu năng như AppDynamics sẽ cho phép bạn sử dụng đến tận cùng giới hạn của nó.

Khi xem xét dự án tiếp theo của bạn – đừng hỏi bản thân “Ai ghét PHP?” hoặc “Mọi người sẽ nghĩ gì?”. Những câu hỏi này tạo ra sự vô nghĩa và bất an. Bạn nghĩ về bất cứ cái gì, chẳng hạn như MailChimp, hệ thống cung cấp sức mạnh để gửi hàng triệu email mỗi ngày, đã được xây dựng bằng PHP trước khi họ “sửa lại”? Thay vì đó, hãy tập trung làm tốt nhất công việc của mình và tạo ra sản phẩm có ích cho xã hội.

Nguồn: http://techmaster.vn/

PHP Upload file

Upload file là một vấn đề quan trọng và cần thiết khi lập trình web. Chúng ta cần tải hình ảnh lên hosting, tải file ….
Đoạn code nhỏ trong php sau đây cho phép bạn làm thực hiện điều đó thật đơn giản.

PHP Upload file
PHP Upload file

Cấu hình file “php.ini”

Đầu tiên, để chắc chắn PHP cho phép upload file, chúng ta cần kiểm tra trong file php.ini. Trong file php.ini tìm đến dòng file_uploads gán = On

file_uploads = On

Thiết kế trang html

<!DOCTYPE html>
<html>
<body>
<h1>PHP - Upload file demo <a href="http://tuanitpro.com">http://tuanitpro.com</a></h1>
<form action="upload2.php" method="post" enctype="multipart/form-data">
    Chọn file upload:
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Tải lên" name="submit">
</form>
<hr/>

</body>
</html>

Có vài quy tắc bạn cần nhớ.

  • Form phải để phương thức POST
  • Bắt buộc phải có thuộc tính
    enctype="multipart/form-data"
  • action của form chỉ đến trang upload2.php, là trang chứa code PHP thực hiện phía server.

Code trang upload2.php

<?php

if(isset($_POST["submit"])) {
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
	// Kiểm tra file upload lên có phải là ảnh không?

    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if($check !== false) {
        echo "File có định dạng - " . $check["mime"] . ".";
        $uploadOk = 1;
    } else {
        echo "Chỉ cho phép hình ảnh.";
        $uploadOk = 0;
    }
 
// Kiểm tra file tồn tại hay chưa?
if (file_exists($target_file)) {
    echo "File đã tồn tại.";
    $uploadOk = 0;
}
// Kiểm tra kích thước file 500000 byte
if ($_FILES["fileToUpload"]["size"] > 500000) {
    echo "File quá lớn.";
    $uploadOk = 0;
}
// Kiểm tra định dạng ảnh hợp lệ không?
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
    echo "Chỉ cho phép các định dạng sau: JPG, JPEG, PNG & GIF";
    $uploadOk = 0;
}
// Kiểm tra điều kiện trước khi upload?
if ($uploadOk == 0) {
    echo "Upload thất bại.";
// Nếu ok thì cho phép upload file
} else {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo " File ".$target_dir. basename( $_FILES["fileToUpload"]["name"]). " upload thành công.";
        echo '<br/><img src="'.$target_dir. basename( $_FILES["fileToUpload"]["name"]).'" width="160" />';
    } else {
        echo "Upload file thất bại, vui lòng thử lại.";
    }
}
}
?>

Một số giải thích:

  • $target_dir = “uploads/” – thư mục chứa file tải lên. Nằm cùng cấp với upload2.php
  • $target_file đường dẫn tập tin được tải lên
  • $uploadOk=1 để kiểm tra dữ liệu trước khi upload
  • $imageFileType kiểm tra phần mở rộng của tập tin
  • Tiếp theo kiểm tra xem ảnh có thật hay bị giả mạo (vd: social.php => social.png)

Chúc các bạn thành công.

POST & GET trong lập trình web

Trong lập trình web có 2 phương thức rất quan trọng chúng ta thường dùng đó là POST & GET. Nó giống như cốt lỗi khi làm lập trình web. Bởi vì POST và GET cung cấp cho chúng ta cách lấy thông tin đầu vào từ phía client, sau đó gửi lên máy chủ Web Server để xử lý. Không có thông tin chúng ta không thể xử lý gì cả.

Nôm na thì nó như vầy:

POST & GET

GET

Phương thức GET dữ liệu sẽ được hiển thị trên thanh địa chỉ: VD: http://tuanitpro.com/?s=ajax. GET áp dụng khi dữ liệu chỉ đọc, không nên dùng khi ghi xuống CSDL. Bởi vì khi dùng GET thì thông tin quá lộ liễu. Dễ thấy nhất là khi tìm kiếm, lấy mẩu tin theo ID. http://tuanitpro.com/?id=1&categoryid=2&x=3&y=4. Khi dùng GET thì tất cả các field trong form đều hiển thị hết lên thanh địa chỉ.

GET Method

VD chúng ta có form đăng nhập như sau:

<form action="login.php" method="GET"> // Nếu chúng ta không quy định method, mặc định là GET
First name:<br>
<input type="text" name="username" value="tuanitpro">
<br>
Last name:<br>
<input type="password" name="password" value="123">
<br><br>
<input type="submit" value="Submit">
</form>

Khi chúng ta nhấn submit, nó sẽ gửi sang trang login.php như sau:
http://tuanitpro.com/login.php?username=tuanitpro&password=123. Như vậy quá nguy hiểm khi có ai đứng gần bạn.
Cách lấy dữ liệu.

PHP: $_GET["username"]
ASP.NET: Request.QueryString["tuanitpro"]
JAVA: request.getParameter("username");

Và có một điều quan trọng, các hacker rất thích dựa vào GET để khai thác tấn công SQL Injection. Nếu dùng GET các bạn nên mã hóa query string để an toàn hơn.

POST

Khác với GET, phương thức POST cũng gửi dữ liệu lên web server, nhưng nó chạy ngầm bên dưới, hoàn toàn không hiển thị. Các bạn thường thấy khi đăng ký thành viên, đăng nhập, thêm một bài mới. Tức là nó có can thiệp với cơ sở dữ liệu. Tất nhiên chúng ta hoàn toàn có thể dùng GET. Tuy nhiên vì lý do bảo mật (tất nhiên không hoàn toàn tuyệt đối), chúng ta nên dùng POST.

POST Method

Khi dùng POST

<form action="login.php" method="POST">
First name:<br>
<input type="text" name="username" value="tuanitpro"/>
<br>
Last name:<br>
<input type="password" name="password" value="123"/>
<br><br>
<input type="submit" value="Submit">
</form>

Dữ liệu cũng gửi lên Server để trang login.php xử lý, nhưng nó chạy ngầm, và không hiển thị gì cả. An toàn hơn GET rất nhiều. Bạn nào không tin thì login facebook.com thử.

Cách lấy dữ liệu.

PHP: $_POST["username"]
ASP.NET: var username = username.Text
JAVA: request.getParameter("username");

Chúc các bạn thành công.

CRUD using Ajax in ASP.NET MVC

Trong quá trình học và làm lập trình, bạn thường nghe nói nhiều đến Ajax, được khuyên dùng Ajax trong nhiều câu trả lời. Vậy ajax là gì? Ứng dụng ajax vào có khó hay không? Trong video dưới đây mình sẽ hướng dẫn các bạn cách thêm, xóa, sửa, lấy dữ liệu bằng Ajax trong ASP.NET MVC (Các bạn hoàn toàn có thể ứng dụng vào cho ngôn ngữ lập trình khác như PHP chằng hạn…)

Video Demo CRUD using Ajax in ASP.NET MVC

Tóm tắt Video

  • Ajax là gì?
  • Tạo Cơ sở dữ liệu bảng Student (lưu thông tin sinh viên)
  • Tạo dự án ASP.NET MVC mới
  • Tạo class xử lý thêm, xóa sửa
  • Tạo form thêm sinh viên
  • Viết code cho Controller
  • Viết code cho file javascript

Bạn hoàn toàn có thể ứng dụng Ajax trong nhiều trường hợp: đăng nhập, đăng ký, tìm kiếm thông tin, giỏ hàng….
Nếu bạn đã hoàn thành theo hướng dẫn mà vẫn gặp khó khăn, hãy tải mã nguồn ứng dụng tại đây:  Download

Cảm ơn bạn đọc và mình luôn đánh giá cao phản hồi của bạn.

Javascript Popup Window to return value to Parent Window

Chào các bạn.
Khi lập trình, hay thiết kế web chúng ta có nhu cầu lấy dữ liệu từ một trang thứ 2 mà không muốn load lại trang chính. Chúng ta có thể dùng popup windows. Ví dụ như chọn một sản phẩm từ danh sách sản phẩm, chọn một nhân viên từ danh sách…. Tất nhiên cũng ta vẫn còn có nhiều cách khác nhau.

Javascript Popup Window to return value to parent window
Javascript Popup Window to return value to parent window

Hướng dẫn sau cho phép bạn tạo một trang popup và lấy dữ liệu đưa vào form của chúng ta. Đây chỉ là code HTML và Javascript, vậy nên bạn có thể áp dụng bất cứ chỗ nào bạn muốn (PHP, ASP.NETMVC….).

Chúng ta cần 2 file. 1 file chứa form (parent) và 1 file chứa dữ liệu chúng ta muốn lấy (child).

Code trang parent.html

<body>
    <div class="container">
        <h3>Javascript Popup Window to return value to parent Window</h3>
        <table border="0" cellpadding="0" cellspacing="0">
            <tr>
                <td>
                    Họ tên:&nbsp;
                </td>

                <td>
                    <div class="input-group">
                        <input type="text" class="form-control" placeholder="Chọn nhân viên..." id="txtName">
                        <span class="input-group-btn">
                            <button class="btn btn-primary" type="button" onclick="SelectName()">Chọn...</button>
                        </span>
                    </div><!-- /input-group -->
                </td>
            </tr>
        </table>
        <br />
        <p>            
            <a href="http://tuanitpro.comjavascript-popup-window-to-return-value-to-parent-window">Hướng dẫn lấy dữ liệu từ Popup Javascript.</a>
        </p>
        <script type="text/javascript">
            var popup;
            function SelectName() {
                popup = window.open("/Home/Popup", "Popup", "width=400,height=300"); // Thay dường dẫn file bạn muốn mở
                popup.focus();
            }
        </script>
    </div>

Code file child.html

<body>
    <div>
        <h3>Danh sách nhân viên</h3>
        Click vào tên nhân viên để chọn
        <table class="table table-bordered">
            <thead>
                <tr>
                    <th>#</th>
                    <th>First Name</th>
                    <th>Last Name</th>
                    <th>Username</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <th scope="row">1</th>
                    <td><a href="#" onclick="return SetName('Ngọc Trinh');">Ngọc Trinh</a></td>
                    <td>Otto</td>
                    <td>mdo</td>
                </tr>
                <tr>
                    <th scope="row">2</th>
                    <td><a href="#" onclick="return SetName('Phương Trinh');">Phương Trinh</a></td>
                    <td>Thornton</td>
                    <td>fat</td>
                </tr>
                <tr>
                    <th scope="row">3</th>
                    <td><a href="#" onclick="return SetName('Lệ Rơi');">Lệ Rơi</a></td>
                    <td>the Bird</td>
                    <td>twitter</td>
                </tr>
                <tr>
                    <th scope="row">4</th>
                    <td><a href="#" onclick="return SetName('Bà Tưng');">Bà Tưng</a></td>
                    <td>the Bird</td>
                    <td>twitter</td>
                </tr>
                <tr>
                    <th scope="row">5</th>
                    <td><a href="#" onclick="return SetName('Kenny Sang');">Kenny Sang</a></td>
                    <td>the Bird</td>
                    <td>twitter</td>
                </tr>
            </tbody>
        </table>
    </div>
    <script type="text/javascript">
        function SetName(value) {
            if (window.opener != null && !window.opener.closed) {
                var txtName = window.opener.document.getElementById("txtName"); // ID này là của parent form
                txtName.value = value;
            }
            window.close();
        }
    </script>
</body>

Chúc các bạn thành công.