7 thủ thuật tối ưu code để tăng tốc website

1. Chuyển host lưu trữ file hoặc ảnh cỡ lớn sang nơi khác
Nhiều người cùng online một lúc có thể làm nghẽn đường truyền của bạn với hàng đống yêu cầu xem cùng một tấm hình trên website. Gánh nặng dữ liệu có thể chuyển sang những website chuyên để lưu trữ và chia sẻ ảnh như ImagaShack, Photobucket hay Flickr. Bằng cách này, máy chủ web của bạn chỉ cần đảm bảo phần text và file ảnh cỡ nhỏ, giảm đáng kể băng thông đồng nghĩa với việc phục vụ được nhiều người một lúc hơn.
Nếu muốn chia sẻ những file nhỏ, khoảng 2 – 5MB, với khách viếng thăm, bạn có thể sử dụng dịch vụ Google Pages như một máy chủ web phụ.
2. Tối ưu hóa mã CSS
Hiện nay, nhiều website bắt đầu sử dụng CSS (Cascade Style Sheet) để định dạng. Mặc dù bảng CSS nhìn bắt mắt và hiệu quả hơn định dạng bảng HTML, nhưng nó đòi hỏi bạn phải tối ưu hóa code của chúng mới mong đạt được tốc độ tối ưu. Đoạn mã CSS “sạch” sẽ giúp trình duyệt giải mã trang web nhanh hơn.
Ví dụ: Thay vì viết:

margin-top: 20px;
margin-right: 10px;
margin-bottom: 20px;
margin-left: 10px;

Bạn nên viết:

margin: 20px 10px 20px 10px;

Theo các chuyên gia tối ưu hóa của Yahoo thì các mã CSS nên được đặt ở phần đầu của web. Điều này đặc biệt ý nghĩa nếu trang của bạn lớn và có nhiều đối tượng. Nếu bạn đặt CSS ở cuối hoặc giữa trang web, trình duyệt sẽ dùng định dạng mặc định để hiện thị, sau đó mới tái định dạng bằng CSS. Điều đó đòi hỏi thêm thời gian tính toán và tất nhiên người dùng sẽ khó chịu khi nhìn một website vỡ tung khi chưa định hình.Thậm chí, một số trình duyệt cũng cấm đặt CSS tại cuối website.
3. Tối ưu hóa hình ảnh
Có 4 loại định dạng hình ảnh sử dụng phổ biến trên web: PNG, JPG, /JPEG và GIF. Hầu hết các phần mềm xử lý ảnh như Adobe Photoshop đều có tính năng “Save for Web” để tối ưu tỉ lệ giữa chất lượng hình và kích thước file.
4. Khai báo kích thước hình ảnh
Nhiều lập trình viên nghiệp dư “quên” khai báo tag chiều cao và rộng của ảnh khi viết mã HTML. Hai thông số này báo với trình duyệt kích thước của ảnh trước khi dữ liệu được tải về. Nếu không được khai báo trước, trình duyệt phải tự tính toán kích thước bằng cách download toàn bộ hình ảnh về, sau đó mới đến lượt các dữ liệu khác.
Khi khai báo hình ảnh có đầy đủ các tag, trình duyệt sẽ dành 1 khoảng trống vừa đúng kích thước ảnh và tiếp tục tải dữ liệu. Như vậy, người xem có thể đọc ngay phần văn bản trong khi hình ảnh vẫn tiếp tục được hiện ra từng phần.
5. Giảm thiểu sử dụng Javascript
Các hiệu ứng hoạt hình của Java script rất bắt mắt và nhiều người có xu hướng đưa chúng vào website của mình. Tuy nhiên, sử dụng quá nhiều Javascript có thể làm trình duyệt bị treo cứng khiến người dùng bực mình. Phải cân nhắc thật kỹ lưỡng trước khi sử dụng chúng.
Vị trí đặt các đoạn mã script cũng khá quan trọng đối với tốc độ hiển thị. Lời khuyên của dân lập trình chuyên nghiệp: chỉ để những script thực sự quan trọng có ảnh hưởng toàn trang lên đầu, còn những hiệu ứng khác (hoạt hình, thống kê,…) thì cho xuống cuối trang.
Việc đưa Javascript và CSS ra liên kết bên ngoài tốt hơn là chèn thẳng vào trang web. Những file này sẽ được lưu tại bộ nhớ đệm (cache) của trình duyệt và người dùng sẽ không phải download lại chúng mỗi khi cần đến. Nó giảm đáng kể thời gian và băng thông của máy chủ cũng như người dùng.
6. Tối ưu hóa liên kết
Chú ý mỗi đường link được đặt trên website hay blog của bạn được viết một cách ngắn gọn và chính xác. Ví dụ mỗi entry trên 360 Yahoo đều có 1 phần “Permanent Link” để lấy liên kết chính xác và gọn gàng hơn nhiều so với những gì hiển thị trên ô địa chỉ (address bar) của trình duyệt. Việc sử dụng chính xác đường link sẽ giảm bớt những yêu cầu không đáng có đối với máy chủ trong một số trường hợp.
7. Giảm bớt các yêu cầu HTTP tới máy chủ
Khi mở website, mỗi đối tượng trên trang (hình ảnh, script, hình vẽ, đường kẻ, …) đều tạo ra 1 yêu cầu tới máy chủ để tải về. Tất nhiên, càng nhiều đối tượng thì việc tải về càng lâu hơn. Vì thế, hãy giảm thiểu số đối tượng trên cùng 1 trang và cố gắng gộp file CSS với các script lại với nhau.

Cải thiện tốc độ và hiệu suất web ASP.NET- Phần 5

Chào các bạn, hôm nay mình sẽ viết bài cuối cùng trong series thủ thuật về cải thiện tốc độ và hiệu suất cho web ASP.NET

41. Phân trang cho dữ liệu lớn. Việc phân trang dữ liệu sẽ giúp bạn chia nhỏ các khối dữ liệu cần load mà lại giữ được layout đẹp cho form.

42. Sử dung Eval() thay cho DataBinder.Eval().Từ ASP.NET 2.0 trở đi .NET framework đã sử dụng Eval() thay cho DataBinder.Eval() bạn nên sử dụng Eval() vì nó được được cải thiện hiệu suất so với DataBinderEval().

43. Không sử dụng Tracing và Debuging. Tracing và Debuging sẽ giúp bạn phát hiện ra những lỗi mà ứng dụng web gặp phải. Nhưng nó sẽ mất khá nhiều thời gian load. Vì bạn hãy hạn chế sử dụng chúng và chỉ sử dụng chúng khi phát triển ứng dụng còn khi triển khai ứng dụng hãy disable chúng đi.

44. Sử dụng HTTP Compression. Sử dụng HTTP compression sẽ giúp bạn giảm bớt dung lượng file. Bạn có thể tham khảo thêm về cách Compression Web ASP.NET tại đây.

45.Chỉ sử dụng giao thức SSL khi cần thiết. Giao thức SSL là giao thức giúp bạn mã hóa và bảo mật các thông tin được truyền đi giữa client và server. Nhưng việc mã hóa sẽ khá tốn tài nguyên và thời gian vì thế chỉ sử dụng trong trường hợp cần thiết như các trang đăng nhập, giao dịch, đặt hàng...

46. Cân nhắc việc dùng ListView thay vì dùng GridView. Nhiều bạn đã quen với việc dùng GridView, nhưng bên cạnh GridView còn một vài control khác cũng có tính năng tương tự. Từ ASP.NET 3.5 đã có thêm một control mới linh hoạt trong việc tùy biến layout hiển thị dữ liệu mà vẫn giữ được các tính năng mạnh giống GridView. Bạn hãy cân nhắc để sử dụng nó.

47. Tránh thực hiện những request lớn và lâu trên cùng 1 trang điều này sẽ làm trang trở lên rất chậm.

48. Xứ lí các ngoại lệ. Luôn bắt ngoại lệ tại những nơi có khả năng xảy ra, không bắt các ngoại lệ mà ta không xử lí được hoặc những ngoại lệ không thể xảy ra, hãy tránh các ngoại lệ có thể tránh được như ngoại lệ logic,..., không hiển thị các ngoại lệ cho người dùng thấy hãy dùng customError.

49. Sử dụng kỹ thuật sprite ảnh và css. Kỹ thuật này giúp bạn giảm bớt số requests bằng cách kết hợp các ảnh lại với nhau và sử dụng css để hiển thị chúng bằng cách đưa ra vị trí toạ độ của chúng

50. Lựa chọn server. Đây cũng là một yếu tố then chốt. Lựa chọn một server ổn định và băng thông hợp lí sẽ giúp web của bạn chạy ổn định và tốt hơn.
Hy vọng với một số mẹo nhỏ trong 5 bài vừa qua bạn có thể giúp web của mình chạy nhanh và ổn định hơn. Chúc mọi người thành công ^_^!

Cải thiện tốc độ và hiệu suất web ASP.NET - Phần 4

Tiếp tục nào, 3 bài viết trước mình đã giới thiệu một số cách cải thiện tốc độ và hiệu suất cho web ASP.NET. Hôm nay mình xin tiếp tục với một số mẹo nhỏ khác để giúp bạn cải thiện tốc độ và hiệu suất cho web ASP.NET.

31. Nên sử dụng HttpServerUtility.Transfer().Phương thức này không liên quan đến việc chuyển hướng trang web(redirection). Thay vì việc gửi một redirect message quay trở lại trình duyệt(browser), ASP.NET chỉ đơn giản là bắt đầu một trang mới. Nên sẽ tiết kiệm được thời gian load

32. Nên hạn chế việc dùng nhiều biến Session. Session dùng để lưu trữ thông tin của người dùng hoặc phiên làm việc hiện tại. Nó giúp bạn trong việc kiểm tra và lấy thông tin từ người dùng đó. Nhưng nếu lượng truy cập hiện tại của web lớn thì các bộ nhớ dành cho việc lưu trữ thông tin trong session sẽ lớn và dễ gây nghẽn mạng hoặc request time out. Và để lấy được thông tin từ biến session bạn phải convert hoặc tuần tự hóa dữ liệu(serialization) trong các collection được lưu trữ. Điều này sẽ làm giảm hiệu suất thực thi và tăng thời gian load của trang.

33. Vài lưu ý trong việc build ứng dụng web aspnet. Build ứng dụng trong chế độ Release Mode, luôn precompile ứng dụng trước khi chạy, hạn chế hoặc có thể bỏ không dùng chế độ Debug Mode. Với việc build ứng dụng như thế này bạn sẽ có thể kiểm tra lỗi, triển khai ứng dụng nhanh hơn, import đầy đủ các dll ...

34. Hạn chế sử dụng quá nhiều ASP.NET Server controls. Sử dụng nhiều các aspnet server controls sẽ tăng thời gian và bộ nhớ của server để sử lí các controls đó.

35. Hãy sử dụng các transaction hợp lí. Dùng các transaction sẽ giúp bạn giữ vững được tính toàn vẹn của dữ liệu tiết kiệm được thời gian nếu có 1 transaction 1 tập hợp các transaction bị hỏng nó sẽ hủy toàn bộ những transaction đó mà không cần phải thực hiện đến transaction cuối.

36. Luôn sử dụng try-catch-finally. Sử dụng khối bắt lỗi này bạn có thể giảm được các lỗi truy xuất và sử lí dữ liệu cũng như ngắt kết nối và giải phóng dữ liệu sau khi đã sử dụng xong.

37.Sử dụng thuộc tính HttpResponse.IsClientConnected. Thuộc tính này sẽ giúp bạn kiểm tra việc client vẫn còn đang giữ kết nối với server hay không trước khi server xử lí việc truy xuất hoặc thao tác dữ liệu.

38.Tối ưu hóa vòng lặp. Vòng lặp for là vòng lặp được sử dụng nhiều nhất trong các loại vòng lặp. Trong vòng lặp for có hai loại là for foreach. Nhưng cách sử dụng 2 loại này là khác nhau. Vòng lặp for đối với các Ilist hoặc các mảng có index thì sẽ nhanh hơn foreach. Còn foreach dành cho các IEnumerable hoặc các collections không đánh index.

39. Hãy sử dụng Control.DataBind() thay vì dùng Page.DataBind(). Về lý thuyết thì 2 phương thức này đều Bind dữ liệu vào controls. Chỉ khác Control.DataBind thì sẽ bind dữ liệu và chính control đó còn Page.DataBind là bind dữ liệu vào các controls con nằm trên trang. Và việc dùng Page.DataBind cần phải khai báo rõ ràng. Như vậy với Control.DataBind bạn có thể chủ động hơn trong việc bind data.

40. Sử dung Repeater để hiển thị dữ liệu chỉ đọc. Nếu bạn chỉ hiển thị dữ liệu không thôi mà không thao tác dữ liệu thì nên sử dụng Repeater thay vì dùng Gridview hay DataList.

Cải thiện tốc độ và hiệu suất web ASP.NET - Phần 3

Hai phần trước mình đã giới thiệu cho các bạn một số cách để tăng tốc và cải thiện hiệu suất cho web ASP.NET. Hôm nay mình xin tiếp tục giới thiệu một số các thủ thuật khác khi code và sử dụng tài nguyên trên web ASP.NET

21. Sử dụng StringBuilding. Lớp String được tạo ra để thao tác với chuỗi nhưng đối với những chuỗi có độ dài lớn thì StringBuilding sẽ thuận tiện hơn. Nó được tạo ra với rất nhiều những phương thức cho phép bạn thao tác và tăng tốc độ xử lí chuỗi lớn.

22. Giảm tối thiểu số request lúc load trang. Số request được sinh ra trong lúc load trang ảnh hưởng rất lớn đến tốc độ load trang vì thế bạn nên giảm những request không cần thiết như gọi đến 1 file script nào đó mà không dùng hay 1 file css nào đó.

23. Gộp chung các jquery hoặc javascript lại. Việc chia nhỏ các script sẽ giúp bạn quản lí code tốt hơn nhưng nếu chỉ có 1 vài đoạn code nhỏ mà bạn cũng chia file thì là điều không nên. Bạn hãy gộp tất cả các file script lại với nhau nếu có thể còn những file riêng biệt như file script của plugin hay 1 script được code riêng cho một module nào đó.

24. Đặt các file script ở cuối trang. Đặt script ở cuối trang sẽ giúp bạn tăng tốc độ load của trang.

25. Tối ưu hóa css. Tối ưu hóa css vừa giúp bạn quản lí code dễ dàng, seo, và ngoài ra nó còn giúp bạn tăng tốc cho web. Bạn có thể xem thêm bài viết tối ưu hóa css cho SEO để tìm hiểu thêm. Bạn luôn nhớ đặt CSS ở đầu trang trong phần head.

26.Sử dụng công nghệ Ajax. Đây có thể nói là một công nghệ giúp bạn cải thiện tốc độ web tốt nhất. Với việc chia nhỏ những phần của web ra và bạn chỉ cần load lại những phần cần xử lí mà không phải load lại toàn bộ trang. Với sự linh hoạt này tốc độ web được cải thiện đáng kể. Google chính là trang sử dụng thành công nhất công nghệ Ajax.

27. Hãy đặt các file tài nguyên trên cùng server. Việc đặt các file tài nguyên như ảnh, video, flash, script, css... thì sẽ giúp việc request tốt hơn. Nếu bạn sử dụng 1 file trên một server khác thì nên đảm bảo server đó ổn định.

28. Nén tài nguyên. Các file ảnh chất lượng tốt thì thường có dung lượng lớn vì vậy giảm dung lượng mà vẫn giữ được chất lượng ảnh là rất tốt. Bạn có thể dùng phần mềm Advanced JPEG Compressor. Nén CSS và javacript sẽ giúp bạn Bạn có thể nén css tại đây và javacript tại đây.

29. Tránh sử dụng các aspnet control và html control lồng quá sâu vào nhau. Việc lồng control và các thẻ quá sâu vào nhau sẽ khiến việc xử lý và render html page lâu.

30. Xóa các thành phần thừa trên web. Trong trang của bạn thường thừa khá nhiều các thẻ và control thừa bạn hãy xóa nó đi như space, thẻ br thừa, thẻ div hoặc table thừa....

Cải thiện tốc độ và hiệu suất web ASP.NET - Phần 2

Hôm nay mình xin giới thiệu tiếp những thủ thuật khác để tăng hiệu suất cho web aspnet. Bài này thiên về cách tạo câu truy vấn và truy xuất dữ liệu trong SQL sao cho hiệu quả và tăng hiệu năng cho web ASP.NET. Vì đối những server tầm trung hoặc yếu và mạng của người dùng không ổn định thì việc chờ đợi web load được dữ liệu về thì cực kì mất thời gian và cực kì khó chịu :((. Ở đây mình chỉ nêu một vài cách cơ bản để tối ưu truy vấn SQL, mình sẽ có một bài khác về cách tối ưu truy vấn SQL.

11. Sử dụng connection pooling. Khi bạn request data từ server bạn cần phải thiết lập 1 kết nối đến server và điều này sẽ tiêu hao khá nhiều tài nguyên của server. Và điều gì sẽ xảy ra nếu bạn phải request nhiều lần đến server để lấy dữ liệu? Sẽ rất tốn tài nguyên nếu chúng ta làm như vậy. Vì thế connection pooling đã được tạo ra để sử dụng lại những kết nối đã được thiết lập.

12. Luôn nhớ đóng các kết nối server và truy vấn dữ liệu. Đây là điều cực kì quan trọng nếu bạn không muốn web bị crash liên tục vì bị quá tải. Hãy dùng connection.Close() hoặc SqlDataAdapter.Dispose() hoặc các câu lệnh tương tự để ngắt kết nối và truy vấn khi đã thực thi xong.

13. Tối ưu những câu truy vấn. Để lấy được dữ liệu thì điều cần thiết là phải có câu truy vấn. Nhưng truy vấn như thế nào để tránh gây nghẽn database server và tốn tài nguyên. Hãy luôn nhớ chỉ select những gì chúng ta cần. Mọi người thường có thói quen truy vấn tất cả từ bảng hoặc view mà không bao giờ dùng đến một số trường trong đó.
14. Sử dụng thủ tục(Stored Procedure). Stored procedure giúp chúng ta tăng tính bảo mật và tránh bị tấn công kiểu sql injection. Nhưng ngoài ra nếu chúng ta sử dụng nó sẽ giúp tăng tốc thực thi các câu lệnh so với việc dùng câu truy vấn bình thường.

15. Khi nào sử dụng SqlDataReader và SqlDataAdapter. Nhiều người trong chúng ta thường sử dụng 2 lớp này để truy vấn dữ liệu và nghĩ rằng chúng giống nhau nhưng không. Nhìn bề ngoài thì có vẻ chúng khá giống nhau về cách thức hoạt động nhưng SqlDataReader là class được xây dựng để cho việc truy vấn dữ liệu và fill vào DataSet hoặc DataTable. Nó nhanh hơn SqlDataAdapter. Còn SqDatalAdapter dùng để thực thi các câu lệnh updating database sẽ tốt hơn vì nó cho phép bạn đóng kết nối khi bạn muốn hoặc thậm chí là có thể tự động đóng kết nối, nó lưu kết quả vào bộ nhớ và bạn có thể lặp qua các bản ghi bao nhiêu lần tùy ý nhưng cái giá phải trả là bạn sẽ tốn khá nhiều bộ nhớ.

16. Đánh index cho các câu truy vấn được sử dụng trong truy vấn có Where,Order By, Distinct, Group By,...

17. Sử dụng một tập lệnh trong truy vấn. Nếu trong câu truy vấn của bạn có khá nhiều lệnh hãy ghi nhớ sử dụng tập lệnh(batch) với từ khóa go.

18. Sử dụng index trên các khóa ngoại. Nó sẽ giúp bạn tăng tốc truy vấn cho các câu lệnh.

19.Sử dụng SETNOCOUNT trong câu lệnh sql. Khi bạn thực thi 1 câu lệnh nó luôn hiển thì 1 dòng là X row(s) affected. Để tắt cái này đi bạn hãy dùng SETNOCOUNT. Tuy không giảm được nhiều tài nguyên server nhưng nếu bạn select hoặc update khoảng vài nghìn bản ghi cho đến hàng chục nghìn bản ghi thì nó sẽ giúp bạn khá đáng kể trong việc tiết kiệm tài nguyên.

20. Tránh dùng view lồng nhau. View khá thuận tiện cho việc tạo ra 1 khung nhìn trên nhiều bảng kết hợp với nhau nhưng truy vấn từ view vẫn khá chậm vì thế nếu bạn sử dụng view lồng nhau thì sẽ còn chậm hơn nữa tuy việc này SQL không cấm nhưng bạn không nên sử dụng quá nhiều.

Cải thiện tốc độ và hiệu suất web ASP.NET- Phần 1

Mình xin giới thiệu cho các bạn tổng hợp các cách cải thiện tốc độ và hiệu suất cho web ASP.NET. Đây là những thủ thuật mình học được và tổng hợp từ một số tài liệu và diễn đàn trên mạng.

1. Luôn sử dụng thuộc tính Page.IsValid. Nếu một trang mà bạn sử dụng các input control và cần phải validate các control này, bạn hãy ghi nhớ luôn sử dụng Page.IsValid trước khi cho run 1 đoạn code nào đó liên quan đến dữ liệu trên form như vậy sẽ không phải mất thời gian check lỗi validate tại server.

2. Nên sử dụng các validation controls như RequiredFieldValidator, RegularFieldValidator,... cho các input control. Sử dụng các control này sẽ tiện hơn so với dùng code javascript và có thể truy cập được dữ liệu ở phía server. Nhưng nó vẫn chậm hơn so với việc sử dụng code javascript.

3. Validate form bằng javascript. Cách này khá giống cách trên nhưng chúng ta sẽ sử dụng validate input control bằng javascript( tức là tiến hành kiểm tra ngay trên máy client). Cách này bạn phải bỏ chút công sức ra code. Hiện nay cũng có 1 số plugin jquery hỗ trợ validate form phổ biến nhất đó là plugin validation. Nhưng nó sẽ không hỗ trợ được hết các trường hợp kiểm tra trên form.
4. Sử dụng thuộc tính IsPostBack. Đây là một thuộc tính giúp bạn giảm việc truy xuất và xử lí dữ liệu trên form. Nó sẽ giúp bạn đảm bảo rằng dữ liệu chỉ cần load 1 lần.

5.Chỉ sử dụng ViewState khi cần thiết. ViewState là một điểm mạnh của ASP.NET nhưng mặt khác nó cũng là điểm yếu của nó. ViewState giúp bạn lưu giữ lại trạng thái cũng như dữ liệu trên form nhưng chính vì vậy mà nó sẽ làm chậm tốc độ web lại và tăng thêm dung lượng cho trang được load. Hãy sử dụng thuộc tính EnableViewState="false" khi bạn muốn không sử dụng nó.

6. Xóa bỏ những namespace không cần thiết. Để sử dụng những class cần thiết cho việc code bạn thường khai báo sử dụng bằng từ khóa using. Nhưng khi bạn thay đổi code thì thường không để ý đến việc xóa những câu khai báo thừa đó đi.

7. Chỉ khai báo biến khi cần dùng đến. Nhiều bạn khi lập trình thường khai báo một số các biến để sử dụng nhưng sau một lúc loay hoay lại không sử dụng đến. Như vậy sẽ rất lãng phí bộ nhớ.
8. Sử dụng caching. Việc caching sẽ giúp bạn lưu trữ lại dữ liệu đã được request và sử dụng nó cho lần hiển thị sau thay vì phải request đến server lần nữa để lấy lại cùng dữ liệu này.

9. Buffering Data. Việc truyền tải dữ liệu từ server đến client là rất quan trọng. Việc buffering data là một trong những khâu trong quy trình đó. Bạn có thể sử dụng nó nếu bạn muốn qua thuộc tính Response.Buffer= true -> tiến hành lấy hết dữ liệu và gửi 1 lần, Response.Buffer=false -> lấy được bao nhiêu gửi bấy nhiêu.

10. Hạn chế việc ép kiểu không cần thiết. Khi dữ liệu đã ở loại bạn cần thì việc ép kiểu nó về dạng đó là không cần thiết.

Tích hợp Google Search vào website của bạn

Bước 1

Truy cập http://www.google.com.vn/cse/?hl=vi

Chọn nút "Tạo công cụ tìm kiếm tùy chỉnh"

tich hop google search vao website

Bước 2: nhập thông tin: tên, mô tả, ngôn ngữ, trang web tìm kiếm ( có thể nhập nhiều trang web - mỗi url 1 dòng)

tich hop google search vao website

Có thể thử công cụ tìm kiếm bằng cách gõ nội dung cần tìm kiếm

tich hop google search vao website

Chọn các giao diện tìm kiếm có sẵn

tich hop google search vao website

Bước 3: Copy đoạn script chèn vào website của bạn

tich hop google search vao website

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

Dịch trang web của bạn sang 52 ngôn ngữ

Cách đơn giản để làm website của bạn thành web đa ngôn ngữ

lap trinh asp.net

Chỉ cần copy và paste “Translate This Button” vào vị trí bất kì trên website của bạn, hoàn toàn miễn phí và sử dụng đơn giản. Nó hoạt động tốt hầu hết trên mọi website. Translate This Button là JavaScript translation widget có dung lượng khá nhẹ, có thể dịch bất kỳ trang web nào một cách nhanh chóng bằng cách sử dụng ajax và google translate.

Code: copy và paste vào website của bạn

<!-- Begin TranslateThis Button -->

<div id="translate-this">

<a style="width:180px;height:18px;display:block;" class="translate-this-button" href="http://www.translatecompany.com/">Translate Company</a>

</div>

<script type="text/javascript" src="http://x.translateth.is/translate-this.js"></script>

<script type="text/javascript">

TranslateThis();

</script>

Load dữ liệu từ Server trong khi cuộn chuột giống facebook

Như tiêu đề, bài viết sẽ hướng dẫn các bạn thực hiện load dữ liệu từ server trong khi cuộn chuột giống facebook khi mà dữ liệu của bạn lớn, và bạn chỉ muốn show dữ liệu cho tới khi nào người dùng cuộn chuột xuống dưới để xem tiếp.
Để làm được bài này, các bạn cần chú ý chút về ajax, và jquery, cũng như một số kiến thức về webservice nhé.
Server Method: Đầu tiên là phương thức được sử dụng để lấy dữ liệu từ server, sau đó gen nó ra dạng HTML để dùng cho ajax như dưới đây

[WebMethod]

public static string GetDataFromServer() {

string resp = string.Empty;

for(int i = 0; i <= 10; i++){

      resp += "<p><span>" + counter++ + "</span> This content is dynamically appended " + "to the existing content on scrolling.</p>" ;

}

return resp;

}

Nếu bạn muốn load dữ liệu từ server thì dùng đoạn code dưới đây

lap trinh asp.net

Client Method: Ở phía client chúng ta sử dụng 2 thẻ div, một thẻ được đăng ký sự kiện scroll là mainDiv và một thẻ dùng để append dữ liệu tự động là wrapperDiv

lap trinh asp.net

Ở đây chúng ta sử lý sự kiện người dùng scroll chuột xem là scroll xuống hay lên, nếu xuống thì thực hiện gen dữ liệu ra

if($("#mainDiv").scrollTop() >= ($("#wrapperDiv").height() - $("#mainDiv").height()) && $contentLoadTriggered == false)

Bạn có thể nhìn thành quả của bạn theo 2 hình dưới đây

lap trinh asp.net

lap trinh asp.net

10. PHP - Làm việc với PHP và mảng dữ liệu: foreach

Hàm foreach tương tự như hàm While, nếu sử dụng while kết hợp thông qua một danh sách kết quả từ truy vấn

foreach ($row as $value) {

echo $value;

echo “<br>”;

}

Ví dụ về việc sử dụng foreach. Mở tập select.php sửa đổi lại như sau.

<?php

//connect to MySQL

$connect = mysql_connect("localhost", "root", "")

or die("Hey loser, check your server connection.");

//make sure we're using the right database

mysql_select_db("moviesite");

$query = "SELECT movie_name, movie_type " ."FROM movie ";

$results = mysql_query($query)

or die(mysql_error());

//while ($row = mysql_fetch_array($results,MYSQL_ASSOC)){

while ($row = mysql_fetch_assoc($results)) {

         foreach ($row as $val1) {

                 echo $val1;

                 echo " ";

          }

         echo "<br>";

         //extract($row);

         //echo $movietype_id;

         //echo " - ";

         //echo $movietype_label;

}

?>

Sau khi cho chạy chương trình, giao diện như sau:

: php & mysql

9. PHP - Bắt đầu với My SQL và PHP như thế nào?

Một vài hàm thường dùng là:

$mysql_connect ("hostname", "user", "pass"): Kết nối đến MY SQL server.

$mysql_select_db("database name"): Tương đương với lệnh USE trong My SQL, làm cho cơ sở dữ liệu được chọn hoạt động

$mysql_query("query"): Gởi bất kỳ câu lệnh của My SQL đến server

$mysql_fetch_rows("biến kết quả từ truy vấn"): Trả về 1 dòng kết quả của một dữ liệu truy vấn

$mysql_fetch_array("biến kết quả từ truy vấn"): Trả về nhiều dòng kết quả của truy vấn

$mysql_error(): Đưa ra lỗi được trả về từ My SQL server

Bạn có thể gởi bất kỳ My SQL nào đến server thông qua câu lệnh PHP hoặc câu lệnh Mysql_query.

Ví dụ:

$query = “SELECT * from TABLE”;

$results = mysql_query($query);

Bạn cũng có thể dùng như sau:

$results = mysql_query(“SELECT * from TABLE”);

1.1. Kết nối MY SQL Server

Lệnh kết nối với hàm PHP là mysql_connect, với cú pháp như sau:

$host = “localhost”;

$user = “bp5am”;

$pass = “bp5ampass”;

$connect = mysql_connect($host, $user, $pass);

Trong đó :

$host là tên của máy chủ

$user:tên của máy người dùng

$pass:mật khẩu truy cập của người dùng

1.2. Đọc, tạo cơ sở dữ liệu

Để tạo một cơ sở dữ liệu cho bạn cần 3 bảng:

· Một bảng movie: Ta sẽ lưu trữ tên và thông tin của movie.

· Một bảng movietype: Nơi lưu trữ những catalog của movie.

· Một bảng people: Ta sẽ lưu trữ tên của các diễn viên và đạo diễn.

Chúng làm việc như thế nào?

- Đầu tiên ta thực hiện kết nối đến My SQL server, sau đó tạo lập cơ sở dữ liệu nếu không tạo được sẽ đưa ra thông báo lỗi.

- Sau đó bắt đầu tạo từng bảng riêng lẻ

- Đưa dữ liệu vào các bảng

1.3. Truy vấn cơ sở dữ liệu

Chúng ta đã tạo ra cơ sở dữ liệu, bây giờ muốn nhận lại thông tin từ dữ liệu đó, dùng công thức như sau:

SELECT [fieldnames]

AS [alias]

FROM [tablename]

WHERE [criteria]

ORDER BY [fieldname to sort on] [DESC]

LIMIT [offset, maxrows]

· SELECT [fieldnames]: Quyết định đầu tiên mà vùng chứa tên đặc biệt mà bạn muốn nhận lại. Nếu bạn muốn thấy tất cả thông tin bạn chỉ cần chọn dấu *

· AS: Bạn có thể sử dụng bí danh để nhóm hai hoặc nhiều hơn hai vùng khác nhau mà có thể chuyển đến chúng * như là một biến lớn

SELECT first_name, last_name AS full_name. . . ORDER BY full_name . . .

Bạn không thể sử dụng tham số AS với tham số WHERE, bởi vì nó bị giới hạn trong MY SQL. Khi WHERE được thực thi thì cột giá trị không biết

· FROM: Tên bảng cần truy xuất thông tin

· WHERE: Danh sách điều kiện chọn lọc dữ liệu

· ORDER BY: Để sắp xếp dữ liệu trong vùng

· LIMIT: Giới hạn kết quả trả về

1.4. WHERE , oh WHERE

Đưa ra điều kiện để hiển thị thông tin mà bạn cần

SELECT * FROM customers WHERE gender = “Male”

Trả về tất cả các thông tin khách hàng có giới tính “Nam”

Các phép toán so sánh trong câu lệnh WHERE:

· =,<,>,>=,<=,!=

· LIKE và %: So sánh một phần của đoạn code với đoạn chứa nó, xuất ra tất cả những mẫu tin có liên quan đến nó.

Ví dụ:

SELECT * FROM products WHERE description LIKE “%shirt%”

8. PHP - Tổng quan về MySQL

MySQL là hệ thống cơ sở dữ liệu quan hệ. Ý nghĩa cơ bản của MySQL là nó có thể lưư trữ thông tin ở những vùng khác nhau và liên kết chúng lại với nhau. Chúng ta có thể chứa bất cứ thứ gì trong một cơ sở dữ liệu. Ví dụ như những thông tin liên quan đến một người: chẳng hạn như first name, last name, address, phone….

MySQL cho phép bạn tạo những thông tin riêng lẻ trên bảng hoặc những khu vực chứa thông tin thích hợp. Trong MySQL mỗi bảng bao gồm những trường dữ liệu (field) riêng lẻ.

1.1.1. Cấu trúc MySQL

Bởi vì MySQL là hệ quản lý dữ liệu quan hệ, nó cho phép chúng ta tạo những bảng thông tin riêng, hoặc những vùng thông tin thích hợp. Trong hệ thống cơ sở dữ liệu không quan hệ, tất cả những thông tin được lưu trữ trong một bảng lớn tạo nên những khó khăn trong việc sắp xếp và chỉ có thể chép dữ liệu mà bạn muốn. Trong SQL, mỗi bảng bao gồm những phần riêng biệt, biễu diễn mỗi thông tin.

Bạn có thể tạo ra cơ sở dựa trên những loại thông tin mà bạn lưu trữ. Những bảng riêng biệt của MySQL liên kết với nhau nơi mà giá trị của vùng phổ biến là như nhau.

Ví dụ: Cho rằng bảng bao gồm tên khách hàng, địa chỉ và số ID, bảng khác bao gồm số ID, nơi ở, ….Vùng chung là số ID, thông tin được lưu trữ trong hai bảng riêng biệt sẽ liên kết với nhau nơi mà số ID là như nhau. Điều này cho chúng ta thông tin về khách hàng cùng lúc.

1.1.2. Các kiểu dữ liệu

Khi bạn tạo một bảng ban đầu, bạn cần nói với MySQL server kiểu nào của thông tin sẽ lưu trữ trong mỗi bảng. Các kiểu khác nhau được cho trong bảng sau:

Loại MySQL

Diễn tả

Ví dụ

Char(length)

Mọi ký tự đều có thể là loại này, nhưng có chiều dài cố định

Trạng thái của khách hàng có 2 ký tự

Varchar(length)

Mỗi ký tự đều có thể trong loại này, dữ liệu có thể thay đổi chiều dài từ 0 đến 255 ký tự.

Địa chỉ của khách hàng có chữ và số, thay đổi trong chiều dài

Int(length)

Có chiều dài từ -2147483648 đến 2147483647.

Số sản phẩm trao tay

Int(length)

unsigned

Lưu trữ số từ 0 đến 4294967295.

ID khách hàng

Text

Kích thước dữ liệu là 65536 ký tự.

Cho phép đoạn text dài hơn được lưu trữ, không có loại giới hạn đến 255 ký tự.

Decimal(length, dec)

Có thể lưu trữ số thập phân

Giá cả

Enum(“option1”, “option2”,..

Lưu trữ giá trị chắc chắn như đúng hoặc sai

Giới tính của người dùng nam hoặc nữ

Date

Lưu trữ ngày như yyyy-mm-dd

Ngày sinh nhật,…

Time

Lưu trữ giờ như hh:mm:ss

Giờ một hoạt động mới được đưa vào trang Web

Datetime

Lưu trữ ngày và giờ như yyyy-mm-dd hh:mm:ss

Ngày và giờ sau khi người đến thăm trang Web

Mặc dù những loại trên đáp ứng được nhu cầu cần thiết, một bảng các kiểu cho dưới đây cũng thường gặp.

Loại MySQL

Diễn giải

tinyint(length)

Lưu trữ số nguyên từ -128 đến 127 (thêm tham số unsigned thì cho phép lưu trữ từ 0 đến 255)

smallint(length)

Lưu trữ số nguyên từ -32768 đến 32767 (thêm tham số unsigned thì cho phép lưu trữ từ 0 đến 65535)

loại MySQL

Diễn giải

mediumint(length)

Lưu trữ số từ -8388608 đến 8388607 (thêm tham số unsigned cho phép lưu trữ từ 0 đến 16777215)

bigint(length)

Lưu trữ số từ -9223372036854775808 đến -9223372036854775807 (nếu thêm tham số unsigned cho phép lưu trữ từ 0 đến 184467440709551615)

Tinytext

Cho phép lưu trữ trên 255 ký tự

mediumtext

Cho phép lưu trữ trên 1677215 ký tự

longtext

Cho phép lưu trữ trên 4294967295 ký tự

Blob

Bằng với kiểu text, trừ trường hợp dương khi sắp xếp và so sánh, cho phép lưu trữ trên 65535 ký tự

tinyblob

Bằng với kiểu tinytext, trừ trường hợp dương khi sắp xếp và so sánh

mediumblob

Bằng với kiểu mediumtext, trừ trường hợp dương khi sắp xếp và so sánh

longblob

Bằng với kiểu longtext, trừ trường hợp dương khi sắp xếp và so sánh

year(length)

Lưu trữ một năm trong 4 ký tự mặc định.

1.1.3. Lựa chọn kiểu cho đúng

Trước tiên, trường sẽ chứa cả chữ và số?

Nếu trả lời có như varchar, text, char, tinytext, mediumtext, longtext, blob, tinyblob, mediumblolb, longblob. Sau đó cần quan tâm có bao nhiêu ký tự được lưu trữ? Nó sẽ biến đổi thế nào?

· Có bao nhiêu ký tự được lưu trữ? Thay đổi thế nào?

· 0 đến 255 ký tự, chiều dài thay đổi: sử dụng varchar nếu bạn muốn xóa tất cả những khoảng trắng, giá trị mặc định. Sử dụng longtext nếu bạn thay đổi về chiều dài. Sử dụng blob nếu bạn không giữ về khoảng cách.

· 256->65536 ký tự: Sử dụng text nếu bạn không cần trường hợp dương trong tìm kiếm, sắp xếp, so sánh. Dùng blob nếu cần trường hợp dương.

· 65537->1677215 ký tự: Sử dụng mediumtext nếu bạn không cần trường hợp dương trong tìm kiếm, sắp xếp, so sánh. Dùng mediumblob nếu cần trường hợp dương.

· 1677216->4294967295 ký tự: Sử dụng longtext nếu bạn không cần trường hợp dương trong tìm kiếm, sắp xếp, so sánh. Dùng longblob nếu cần trường hợp dương

Nếu trả lời có thì có lẽ chứa chữ cái và số, nhưng phải một trong số có giới hạn về giá trị enum

Nếu trả lời không, nó bao gồm thời gian, ngày tháng

1.1.4. NULL/NOT NULL

My SQL server của bạn muốn biết vùng dữ liệu của bạn có rỗng hay không, bạn dùng NULL hoặc NOT NULL. Nếu vùng dữ liệu được định nghĩa là NOT NULL thì người dùng bắt buộc phải nhập dữ liệu vào. Nếu dùng NULL thì vùng dữ liệu sẽ không chứa giá trị gì hết.

1.1.5. INDEXES

MySQl sử dụng INDEXES để giải quyết việc nghiên cứu dòng thông tin. INDEXES làm việc thế nào? Bạn tưởng tượng bạn có một cái phòng đầy ắp, toàn những thứ bạn có được mà chưa bao giờ bạn đụng đến. Bạn muốn tìm lại thông tin gì đó, bạn phải mất khá nhiều thời gian để làm việc này. Bạn cảm thấy khó chịu và bạn bắt đầu sắp xếp chúng, tổ chức lại chúng.

Bạn thử tưởng tượng lượng thông tin được lưu trữ trong bảng, vào thời gian nào đó bạn cần tìm vài thứ, bạn bắt đầu tìm tất cả những dòng, bạn sẽ làm gì nếu có 10000 dòng? Chuyện gì sẽ xảy ra?

Bằng cách sử dụng hệ thống chọn lọc bên trong, MySQl sẽ giúp bạn tìm nhanh chóng và chính xác, nó làm được điều này nhờ sử dụng INDEXES, cũng được biết như một khóa.

MySQL yêu cầu INDEX trong mỗi bảng, vì thế có vài thứ được đến. Thông thường, bạn sử dụng khóa chính, hoặc tạo ra sự duy nhất để giữ dữ liệu riêng lẻ. Trường này phải “not null” và “unique”

1.1.6. UNIQUE

Chúng ta có thể sử dụng UNIQUE để thể hiện tính độc quyền, không thể chèn thêm dữ liệu, khi thêm vào chương trình sẽ báo lỗi.

1.1.7. Tăng tự động(auto Increment)

Bạn có thể thiết kế vùng tăng tự động bằng cách dùng lệnh Auto_Increment, ta có thể đặt lệnh cho bất cứ vùng nào trong bảng.

1.1.8. Những tham số khác

Bạn có thể làm những chí định khác khi tạo cơ sở dữ liệu, nhưng tốt hơn cho người sử dụng. Để biết thêm về danh sách những tham số, bạn có thể tham khảo thêm :www.mysql.com

1.1.9. Các kiểu bảng của My SQl và kỹ thuật lưu trữ

Những phiên bản mới gần đây của My SQL thường sử dụng 5 loại chính

. MyISAM

. MERGE

. MEMORY

. InnoDB

. BDB

1.1.10. Lệnh và cú pháp trong My SQL

Các lệnh và cấu trúc của MySQL thường dùng:

§ . CREATE: Tạo mới một cơ sở dữ liệu hoặc một bảng

§ . ALTER: Thay đổi bảng

§ . SELECT: Chọn dữ liệu

§ . DELETE: Xóa dữ liệu từ bảng

§ . DESCRIBE: Cho biết cấu trúc và chi tiết của bảng

§ . INSERT INTO tablename VALUES: Đặt giá trị vào bảng

§ . UPDATE: Sửa đổi dữ liệu trong bảng

§ . DROP: Xóa toàn bộ bàng hoặc cơ sở dữ liệu

7. PHP - Những cú pháp xen lẫn trong php

1. Xen lẫn giữa <?php và ?>

Bạn có thể xem code php trong html trong cách khác

- <? và ?> Phải mở trong file php.ini với thẻ mở ngắn.

- <% và %> Phải mở trong file php.ini với thẻ ASP

- <script language=”PHP”> and </script>.Đây là giá trị không chuyển đổi trong file php.ini

2. Xen lẫn trong mệnh đề echo

Bạn đã sử dụng print_r(), nhưng bạn cũng đã sử dụng print() để trình bày đoạn text hoặc giá trị biến trong trang web của bạn. Sự khác nhau giữa echo() và printf() là khi bạn sử dụng print(), một giá trị 0 hoặc 1 sẽ được trả lại cho sự thành công hay thất bại của lệnh print(). Trong trường hợp này, bạn cũng có thể nói mọi thứ không in ra khi sử dụng lệnh print(). Trong khi echo() chỉ đưa ra những gì không có mà bạn biết là không có hoặc nó làm việc không chính xác.

Trong các trường hợp khác thì cả hai là như nhau.

3. Xen lẫn giữa các phép toán logic.

Các phép toán and(&&), or(||) là các phép toán logic.

4. Xen lẫn trong việc sử dụng dấu (“”).

Ngoài việc sử dụng dấu (“”) ta cũng có thể sử dụng dấu (= <<<)

5. Xen lẫn những giá trị tăng, giảm

· ++$value:Tăng biến lên 1, trả về giá trị đã tăng.

· $value++:Trả về giá trị , sau đó tăng lên 1.

· --$value:Giảm 1, trả về giá trị đã giảm.

· $value--:Trả về giá trị, sau đó giảm 1.

· $value=$value+1:Tăng giá trị lên 1.

· $value+=1:Tăng giá trị lên 1.

6. PHP–Mảng trong PHP

Mảng là một danh sách chứa thông tin với khóa và được lưu trữ với một tên biến. Một mảng có dòng thông tin và khóa, khóa là cột đầu tiên trong bảng. Khóa phải đồng nhất để dễ tổ chức và sử dụng.
1. Cú pháp của mảng.
a. Mảng một chiều

<?php

$husband = array("firstname"=>"Albert","lastname"=>",instein","age"=>"124");
echo $husband[firstname];

?>

Kết quả xuất ra màn hình Hình 2.10.1.1:

array trong php

Hinh 2.10.1.1

Chú ý: Sử dụng => để thay cho dấu bằng, khi ấn định những giá trị đến khóa của mảng. Điều này cho bạn xuất ra “Albert” và tất cả giá trị vẫn được lưu trữ trong biến $husband.

Bạn cũng có thể đặt một mảng giá trị theo cách sau:

$husband[“firstname”] = “Albert”;

$husband[“lastname”] = “Einstein”;

$husband[“age”] = 124;

b. Mảng đa chiều:

Ví dụ:

<?php

$table1 = array(“husband” => array(“firstname”=>”Albert”,“lastname”=>”Einstein”,“age”=>124),

“wife” => array(“firstname”=>”Mileva”,“lastname”=>”Einstein”,“age”=>123));

//do the same for each table in your restaurant

?>

Nếu muốn xuất firstname của mọi người, ta dùng hàm xuất như sau:

<?php

echo $table1[“husband”][“firstname”];

echo “ & “;

echo $table1[“wife”][“firstname”];

?>

Kết quả Hình 2.10.1.2:

lap trinh php va MySQL

Hình 2.10.1.2

Để đơn giản ta có thể dùng một cách khác để lưu trữ mảng như sau:

<?php

$flavor[] = “blue raspberry”;

$flavor[] = “root beer”;

$flavor[] = “pineapple”;

?>

Để xuất thông tin ra ta thực hiện câu lệnh như sau:

echo $flavor[0]; //xuất “blue raspberry”

echo $flavor[1]; // xuất “root beer”

echo $flavor[2]; // xuất “pineapple”

2. Sắp xếp mảng

PHP cung cấp nhiều cách để lưu trữ giá trị của mảng, sau đây là mô tả một vài hàm sắp xếp trong mảng.

arsort(array) :Sắp xếp một mảng giảm theo giá trị và duy trì quan hệ của khóa/ giá trị

asort(array): Sắp xếp một mảng tăng theo giá trị và duy trì quan hệ của khóa/ giá trị

rsort(array): Sắp xếp một mảng giảm theo giá trị

sort(array): Sắp xếp một mảng tăng theo giá trị

Ví dụ:

<?php

$flavor[] = "blue raspberry";

$flavor[] = "root beer";

$flavor[] = "pineapple";

sort($flavor);

print_r($flavor);

?>

Kết quả như Hình 2.10.1.3:

sap xep mang trong php

Hình 2.10.1.3

Chú ý:

Ở đây dùng hàm mới prinf_r, chức năng của hàm này là xuất thông tin về một biến mà người ta có thể đọc nó dễ dàng. Nó thường được dùng để kiểm tra giá trị của mảng, một cách cụ thể.

Ở đây hàm sort dùng để sắp xếp theo thứ tự Alpha

5. PHP - Truyền biến giữa các trang

Có bốn cách cơ bản để truyền biến giữa các trang: truyền biến trong URL, qua session, cookie hoặc với một HTML form.

1. Truyền biến qua URL
a. Phương thức đầu tiên để truyền biến giữa các trang là thông qua một URL.

Ví dụ một URL:

http://www.mydomain.com/news/articles/showart.php?id=12345

Những phần sau dấu ? gọi là chuổi truy vấn (query string). Có thể nối giữa các biến trong URL bằng cách dùng dấu &

Như ví dụ sau: http://www.mydomain.com/news/articles/showart.php?id=12345&lang=en

Ở đây có một vài bất lợi :

· Mọi người có thể nhìn thấy giá trị của biến, những thông tin nhạy cảm thì không được bảo mật khi sử dụng cách thức này.

· Người dùng có thể đổi giá trị biến trong URL, mở những phần mà người lập trình không muốn hiển thị.

· Một người sử dụng có thể gặp phải những thông tin không chính xác hoặc đã cũ khi dùng URL đã được lưu với những biến cũ trong đó..

b. Ký tự đặc biệt của URL.

Khi truyền biến qua URL , trong trường hợp biến đó chứa khoảng trắng, dấu & hay một ký tự đặc biệt nào đó, thì ta ta dùng hàm urlencode()

2. Session và Cooking
a. Session

Session là tập hợp những biến tạm tồn tại cho đến khi đóng trình duyệt, trừ khi ta có những chỉ định khác trong php.ini.

Mọi session có một session ID duy nhất, có thể được truyền qua cookie hoặc qua URL nếu phương thức trước không được phép.

Để bắt đầu một session, sử dụng hàm session_start() và không được dùng hàm session_register, trong trường hợp ta giả định register_globals trong php.ini là off.

b. Cookies.

Cookies là những mẫu thông tin nhỏ được lưu trên máy người dùng web. Các Cookies do Webserver phát sinh, lưu trữ lại, sau đó sẽ được đọc ở lần truy cập sau.

Để có thể sử dụng một cookies bạn phải sử dụng hàm: setcookie() như sau: setcookie(‘tên cookie’, ‘giá trị’, ‘thời gian kết thúc’, ‘đường dẫn’, ‘vùng’, ‘kết nối an toàn’);

3. HTML FORMS
a. Lưu chuyển thông tin với form.

Form là mã trong HTML, nó được bao bởi một cặp thẻ mở và đóng: <form> </form>, nó có những thuộc tính sau:

Action: Thuộc tính này chỉ ra đường dẫn URL của trang mà Form sẽ được gởi đến để xử lý, nó chứa đường dẫn URL tương đối hoặc URL tuyệt đối.

Method: Thuộc tính này chỉ ra kiểu HTTP yêu cầu trình duyệt gởi thông tin đến server, nó phải được thiết lập là POST hoặc GET.

Name: Đây là thuộc tính hữu hiệu nhất trong việc quản lý các thành phần của form. Tên form không được gởi đến server khi form được gởi đi.

Các kiểu phần tử nhập trên form:

· Text:Đây là kiểu căn bản nó có những thuộc tính sau: Text có 3 thuộc tính:

Size: chiều rộng ô text tính bằng số ký tự.

Maxlength:Giới hạn số ký tự tối đa có thể nhập vào.

Value:chứa giá trị mặc định trong văn bản, người dùng có thể nhập giá trị khác

· Checkbox: Tên và giá trị của hộp kiểm này chỉ này chỉ được truyền nếu được chọn khi form được gởi. Nếu từ checked có trong thẻ thì hộp kiểm được chọn mặc định.

· Radio: Nút này cho phép người dùng chọn chỉ một trong số các lựa chọn có cùng tên.

· Select: Là hộp chọn sổ xuống, thường cho phép người dùng chọn một từ một danh sách, sự lựa chọn này có thể mô tả với thuộc tính value.

· Password: Giống với kiểu text, tuy nhiên văn bản nhập vào hộp được hiển thị bằng ký tự thay thế (ký tự “*”)

Những nút khác được miêu tả như nút submit, reset, hoặc những hình ảnh trên những nút do người dùng tạo ra.

4. PHP - Sử dụng hằng và biến

1. Tổng quan về hằng:

Tương tự như trong những ngôn ngữ lập trình khác, hằng trong PHP cũng là một giá trị được khai báo trước khi sử dụng. Nó phải bắt đầu bằng chữ cái hoặc dấu gạch dưới (­_) và không được bắt đầu bằng số, nó có thể là một chuổi.

Hằng trong PHP được định nghĩa bằng hàm define(). Nó không thay đổi và không được được định nghĩa lại.

Vd: tạo một file mới, lưu với tên moviesite.php

<html>

<head>

<title>My Movie Site</title>

</head>

<body>

<?php

define (“FAVMOVIE”, “The Life of Brian”);

echo “My favorite movie is “;

echo FAVMOVIE;

?>

</body>

</html>

Kết quả: Trên trình duyệt xuất hiện như Hình 2.3.1:

giáo trình php tiếng Việt

Hinh 2.3.1

2. Tổng quan về biến.

Không giống như hằng, nó không cần định nghĩa, có thể thay đổi trong chương trình. Cách đặt tên của biến cũng giống như cách đặt tên của Hằng. Biến phân biệt chữ hoa và chữ thường.

Tất cả biến trong PHP đều bắt đầu bằng dấu “$” bất chấp đó là loại biến gì: chuổi, số nguyên, số động hoặc mảng, tất cả chúng đều trông giống nhau. Nó tự động hiểu các kiểu biến người dùng không cần phải khai báo kiểu biến.

Nói chung, khi sử dụng biến trong PHP ta cần quan tâm đến 3 vị trí khác nhau của biến:

1. Khai báo ngay trong mã lệnh PHP

2. Chuyển tiếp từ một trang HTML.

3. Là biến sẳn có trong hệ thống PHP.

Vd:

Sử dụng lại ví dụ moviesite.php chỉ thêm vào biến movierate:

<html>

<head>

<title>My Movie Site</title>

</head>

<body>

<?php

define ("FAVMOVIE", "The Life of Brian");

echo "My favorite movie is ";

echo FAVMOVIE;

echo "<br>";

$movierate = 5;

echo "My movie rating for this movie is: ";

echo $movierate;

?>

</body>

</html>

Kết quả hiển thị như Hình 2.3.2.1:

lập trình php

Hinh 2.3.2.1

Chú ý:

· Trong PHP, phép gán là dấu” =”, so sánh là “= =”:

· PHP có thể tự động chuyển đổi kiểu trong các phép tính.

· PHP Có thể thực hiện việc cộng một biến số với một chuổi có số đứng đầu:

Vd:

$ a = 2 ;

$ b = “2 con heo con”;

$c = $a + $b;

Echo $c;

Kết quả : $c = 4.

PHP có một số hàm toán học được xây dựng dựa trên số mà bạn có thể sử dụng những biến chứa con số như những hàm sau:

- rand(min),(max) phát sinh ra một số ngẫu nhiên.

- cell(number) làm tròn số thập phân thành một số nguyên kế tiếp lớn hơn.

- floor(number) làm tròn một số thập phân xuống một số nguyên nhỏ hơn.

- number_format(number[,dec place] [,dec point] [,thousands]):Định dạng một số thập phân theo cách : chọn chữ số ờ phần thập phân, dấu ngăn cách giữa phần thập phân và phần nguyên, dấu phân cách giữa 3 chữ số của phần nguyên.

- max(argument1, argument2, ...):Trả về giá trị lớn nhất trong các đối số.

- min(argument1, argument2, ...): Trả về giá trị nhỏ nhất.

3. PHP - Sử dụng “echo” để trình bài text

Hàm “echo” là hàm xuất cơ bản trên trình duyệt Web.

Vd:

<?php

echo “I’m a lumberjack.”;

echo “And I’m okay.”;

?>

Kết quả Hình 2.1.1:

lap trinh php

Hinh 2.1.1

Chúng ta có thể lồng HTML với PHP.

Vd:

<?php

echo “<h1>I’m a lumberjack.</h1>”;

echo “<h2>And I’m okay.</h2>”;

?>

Kết quả như Hình 2.1.2:

giao trinh php

Hinh 2.1.2

2. PHP - Hai nguyên tắc cơ bản trong PHP

1.  PHP hiển thị trong trang Web với thẻ mở và thẻ đóng như sau:

<?php

// First line of code goes here;

// Second line of code goes here;

// Third line of code goes here;

?>

2. Những dòng PHP kết thúc bằng dấu “;”.Lời chú thích đựoc viết sau “//” (trên mỗi dòng) hoặc” /*” ở đầu đoạn chú thích và “*/” ở cuối đoạn chú thích.

Chúng ta cần cần nắm vững 2 nguyên tắc này để viết code PHP đúng cú pháp, không mất thời gian tìm và gỡ lỗi.

1. PHP - SƠ LƯỢC VỀ APACHE, PHP, MYSQL VÀ CÁCH CÀI ĐẶT

1.1. Tóm tắt sơ lược về Apache, PHP, MySQL:

Apache, PHP, MySQL là các phần của chương trình phần mềm mã nguồn mở. Phần mềm này là sự hợp tác của những lập trình viên có đầu óc.Bằng việc thay đổi trên những mã nguồn có sẵn, các lập trình viên trên thế giới tiếp tục hoàn thiện và phát triền nó ngày càng trở nên mạnh hơn và hiệu quả hơn. Sự đóng góp của những người này được đưa ra công khai cho người khác sử dụng mã nguồn, tạo ra các phần mềm nổi tiếng trên thế giới.

Tại sao mã nguồn mở gây chấn động?

-Nó miễn phí: vì là mã nguồn mở nên các lập trình viên có thể dựa trên mã nguồn sẵn có để phát triển thêm, phần mềm này không có bản quyền nên mọi người có thể tự do sử dụng .

-Nó dựa trên nền chữ thập (cross_platform) và kỹ thuật trung lập(technolory-neutral). Nó không có một nền tảng cụ thể. Tập đoàn mã nguồn mở bảo đảm rằng nó không được phát triển bởi một cá nhân nào. Do đó định nghĩa mã nguồn mở được cung cấp bởi OSI (open source initiative), mã nguồn mở không phụ thuộc vào bất cứ một kỹ thuật cá nhân hay một loại giao diện, nó phải là một kỹ thuật trung lập.

-Nó không bị giới hạn bởi những phần mềm khác, điều này có nghĩa là nếu một chương trình mã nguồn mở phân phối cho nhiều chương trình thì những chương trình khác có thể cũng là mã mở nguồn mở và giao dịch trong tự nhiên, điều này làm cho phần mềm phát triển tối đa và linh hoạt.

-Nó có tính đa dạng: được phát triển bởi nhiều người thuộc nhiều nền văn hoá, nhiều lĩnh vực phong phú.

Những phần AMP ( Apache, MySQL, PHP) làm việc với nhau như thế nào?

Tưởng tượng trang web động như một nhà hàng, khách đến ăn không cần quan tâm đến nó làm ra như thế nào coi như nó có sẳn và người bồi bàn giúp bạn chọn món ăn.

Tôi có thể mô tả 3 thành phần của AMP như sau:

· Apache: Cứ tưởng tượng như một đầu bếp . Khi khách hàng yêu cầu món ăn . Cô ta nhanh nhẹn linh hoạt và có thể chuẩn bị vô số những món ăn khác nhau. Hoạt động của Apache trong nhiều phương thức giống nhau là phân tích những file riêng lẻ và đưa ra kết quả.

· PHP: giống như người bồi bàn trong khách sạn . Anh ta nhận lời đề nghi của khách hàng và mang đến món ăn từ trong nhà bếp với những lời hướng dẫn cụ thể.

· MySQL: là những kho lưu trữ, những thành phần thông tin.

Khi khách đến ăn (người thăm trang web) đến nhà hàng Anh ta sẽ chú ý đến món ăn với nhu cầu của mình. Người bồi bàn (PHP) lấy thức ăn theo yêu cầu từ trong nhà bếp được làm bởi đầu bếp(Apache). Người đầu bếp này sẽ đến kho để lấy những nguyên liệu(dữ liệu) để chuẩn bị cho món ăn.

1.1.1. Apache :

Hoạt động của apache như là web server của bạn : công việc chính của nó là phân tích bất kỳ những file yêu cầu của trình duyệt web nào và đưa ra những kết quả chính xác.Apache tuyệt vời có thể hoàn thành hầu hết những yêu cầu của bạn.

1.1.2. PHP:

PHP là một ngôn ngữ mở rộng chính mà cho phép trang web của bạn hoạt động. Nó linh hoạt và tương đối nhỏ. Nó đã được áp dụng và phát triển trong kinh doanh. Nó cũng giống như ngôn ngữ Asp của Microsoft, Nhưng PHP thân thiện hơn,dẽ sử dụng hơn.

1.1.3. MySQL :

MySQL là một cấu trúc dữ liệu có thể kết hợp với PHP, Apache để làm việc với nhau. Nó là ngôn ngữ truy vấn có cấu trúc. Nó đưa ra hiệu ứng và tốc độ cao.

Nó cập nhật dữ liệu, xóa dữ liệu, thêm dữ liệu mà không ảnh hưởng đến cấu trúc hệ thống.

1.2. Cài đặt:

Các bước cài đặt bộ ba Apache,PHP,MySQL

Bước 1: tải bộ ba Apache, PHP, MySQL tại địa chỉ :

182Hhttp://www.apachefriends.org/download.php?xampp-win32-1.4.16-installer.exe

Bước 2 : Cài đặt bình thường như những ứng dụng khác

Bước 3 : Kiểm tra cài đặt thành công chưa:

· Sau khi cài đặt trên màn hình có biểu tượng như Hình 1.2-1

lap trinh php

Hinh 1.2.1

· Nhấp đúp vào biểu tượng sẽ xuất hiện như Hình 1.2-2

giao trinh php

Hinh 1.2.2

· Nhấp vào nút start của Apache và MySQL cho chương trình chạy Hình 1.2.3

tai lieu php tieng viet

Hinh 1.2.3

Sau đó thực hiện các thao tác để viết lệnh trên PHP hoặc MySQL

Lưu ý:khi thực hiện lệnh trên PHP hoặc MySQL thi vẫn để chương trình XAMPP chạy song song với chương trình đang thực hiện.

Để kiểm tra việc cài đặt có thành công chưa ta thực hiện như sau.

Vào một trình soạn thảo chẳng hạng như Notepad gõ dòng lệnh:

<?php

echo “hello mom“;

?>

Lưu vào thư mục đã cài đặt XAMP: xamp\htdocs. Với đuôi *.php

Sau đó mở trình duyệt web gõ 183Hhttp://localhost/*.php

Nếu thành công trình duyệt sẽ xuất hiện như Hình 1.2.4:

bai giang php

Hinh 1.2.4

Như vậy là việc cài đặt đã thành công.

Hoặc gõ như sau:

<?php

phpinfo();

?>

Bạn sẽ thấy kết quả như Hình 1.2.5:

lap trinh php tieng viet

Hinh 1.2.5

Các câu lệnh quản lý MySQL hữu ích - P1

Để quản lý MySQL, người ta thường dùng nhiều nhất là phpMyAdmin, nó là phần mềm mã nguồn mở nổi tiếng. Tuy nhiên nếu bạn muốn biết cách quản lý MySQL bằng các câu lệnh Linux, thì đây sẽ là một bài chia sẻ không thể bỏ qua. Cùng bắt đầu nhé !
Bài viết này sử dụng môi trường MySQL cài đặt trên CentOS. Đầu tiên, để quản lý, chúng ta đăng nhập vào SSH và dùng lệnh:

mysql -u root -p
Enter password:

Sau đó server sẽ yêu cầu nhập vào pass root MySQL, nếu nhập thành công bạn sẽ được chuyển đến phần quản lý MySQL.
1. Command create mysql database: Tạo cơ sở dữ liệu MySQL

mysql>CREATE DATABASE <DATABASE-NAME>;
Query OK, 1 row affected (0.00 sec)

Thay <DATABASE-NAME> bằng tên của bạn muốn tạo.
2. Command create MYSQL User: Tạo user database

mysql> grant usage on *.* to <DATABASE-USERNAME>@localhost identified by '<PASSWORD>';
Query OK, 0 rows affected (0.00 sec)

Thay <DATABASE-USERNAME> và <PASSWORD> thành thông tin của bạn.
3. Command Grand privileges for User to Database: Gán quyền cho user database vừa tạo

mysql> grant all privileges on <DATABASE-NAME>.* to <DATABASE-USERNAME>@localhost ;
Query OK, 0 rows affected (0.00 sec)

4. Command change pass user mysql: Thay đổi mật khẩu Mysql user

mysql>use mysql;
mysql>update user set password=PASSWORD("<YOUR-NEW-PASSWOD>") where User='<DATABASE-USERNAME>';

Còn nữa….

Hướng dẫn lập trình cơ bản với Android phần 22

II. Tạo và sử dụng 1 Content Provider do người dùng tự định nghĩa

Để dễ hiểu hơn các bạn mở Project ContentProviderDemo trong Sourcecode đã down về. Trong Project đó mình tạo 1 Content Provider Books, mỗi bản ghi Book bao gồm 2 trường : ID và Title.

Sau đây là các bước để tạo 1 Content Provider cơ bản ( cụ thể là tạo

ContentProvider Book)

1. Tạo 1 class thừa kế lớp ContentProvider

Mã:

public class BookProvider extends ContentProvider

2. Định nghĩa 1 biến Uri (public static final ) được gọi CONTENT_URI. Các xâu này luôn được bắt đầu bằng “content://” tiếp theo đó là nội dung của mà ContentProvider xử lý. Xâu này phải có đặc tính là duy nhất.

Mã:

public static final String PROVIDER_NAME = "com.vietandroid.provider.Books";

public static final Uri CONTENT_URI = Uri.parse("content://" + PROVIDER_NAME + "/books");

3. Khai báo các xâu để định nghĩa cho từng thuộc tính tương ứng với các cột giá trị từ Cursor.

Mã:

public static final String _ID = "_id";

public static final String TITLE = "title";

lập trình android cơ bản

4. Chúng ta cần tạo hệ thống chứa dữ liệu cho ContentProvider, có thể chưa dưới nhiều hình thức : sử dụng XML, thông qua CSDL SQLite, hay thậm chí là WebService. Trong Demo này chúng ta sử dụng cách phổ biến nhất đó là SQLite:

Mã:

private SQLiteDatabase bookDB;

private static final String DATABASE_NAME = "Books";

private static final String DATABASE_TABLE = "titles";

private static final int DATABASE_VERSION = 1;

tai lieu lap trinh android tieng viet

5. Định nghĩa tên của các cột mà chúng ta sẽ trả lại giá trị cho các clients.Nếu chúng ta đang sử dụng Database ContentProvider hay các lớp SQLiteOpenHelper, tên các cột này chính là id của các cột trong cơ sở dữ liệu SQL. Trong trường hợp này, chúng ta phải gộp cả cột có giá trị là số nguyên được gọi “_id” để định nghĩa id của mỗi bản ghi.

Nếu đang sử dụng cơ sở dữ liệu SQLite, nó sẽ là INTEGER PRIMARY KEY AUTOINCREMENT. Tùy chọn AUTOINCREMENT không bắt buộc, có tác dụng tự động tăng ID của mỗi bản ghi lên nếu người dùng không nhập. Android cung cấp SQLiteOpenHelper giúp tạo và quản lý các phiên bản của cơ sở dữ liệu.

Mã:

private static final String DATABASE_CREATE = "create table " + DATABASE_TABLE +

" (_id integer primary key autoincrement, " + "title text not null);";

private static class DatabaseHelper extends SQLiteOpenHelper

{

public DatabaseHelper(Context context) {

        super(context, DATABASE_NAME , null,DATABASE_VERSION);

}

@Override

public void onCreate(SQLiteDatabase db) {

        db.execSQL(DATABASE_CREATE);

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        db.execSQL("DROP TABLE IF EXISTS titles");

        onCreate(db);

}

}

6. Nếu chúng ta muốn public các dữ liệu kiểu byte như bitmap thì các trường mà chứa dữ liệu này nên là một xâu với 1 content://URI cho file đó. Đây chính là liên kết để các ứng dụng khác có thể truy cập và sử dụng dữ liệu bitmap này.

7. Sử dụng Cursor để thao tác trên tập dữ liệu : query (), update(), insert(), delete()….. Có thể gọi phương thức ContentResolver.notifyChange() để biếtkhi nào dữ liệu được cập nhật.

Add Book

Mã:

@Override

public Uri insert(Uri uri, ContentValues values) {

long rowID = bookDB.insert(DATABASE_TABLE,"", values);

if(rowID > 0){

         Uri mUri = ContentUris.withAppendedId(CONTENT_URI, rowID);

         getContext().getContentResolver().notifyChange(mUr i, null);

         return mUri;

}

throw new SQLException("Failed to insert new row into " + uri);

}

Get All Books

Mã:

@Override

public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {

SQLiteQueryBuilder sqlBuilder = new SQLiteQueryBuilder();

sqlBuilder.setTables(DATABASE_TABLE);

if(uriMatcher.match(uri) == BOOK_ID)

       sqlBuilder.appendWhere(_ID + "=" + uri.getPathSegments().get(1));

if(sortOrder == null || sortOrder == "") sortOrder = TITLE;

Cursor c = sqlBuilder.query(bookDB, projection, selection, selectionArgs, null, null, sortOrder);

c.setNotificationUri(getContext().getContentResolv er(), uri);

return c;

}

}

Mình chỉ demo 2 chức năng là thêm sách và lấy toàn bộ bản ghi trong CSDL , ngoài ra các phương thức edit, sửa , update, xóa... các bạn có thể tự làm .

8. Khai báo Content Provider trong file AndroidManifest.xml

Mã:

<provider android:name = "BookProvider"

android:authorities="com.vietandroid.provider.Books" />

Như vậy chúng ta đã tạo xong ContentProvider Book tự định nghĩa.

Hướng dẫn lập trình cơ bản với Android phần 21- Android Content Provider

Android Content Provider

Trước khi vào bài, các bạn down Sourcecode của bài học tại đây

Sourcecode của bài học bao gồm 3 Project demo :

ContentProviderDemo

ContentProviderDemo1

ContentProviderDemo2

Mỗi Demo sẽ giải quyết từng vấn đề của Tutorial. Các bạn cứ add hết vào workspace để tiện theo dõi.

I. Giới thiệu Content Provider

Content Provider là 1 trong 4 thành phần cơ bản của 1 ứng dụng Android thường có bao gồm:

1. Activity

2. Service

3. Broadcast Receiver

4. Content Provider

Một Content Provider cung cấp một tập chi tiết dữ liệu ứng dụng đến các ứng dụng khác. Thường được sử dụng khi chúng ta muốn tạo cơ sở dữ liệu dưới dạng public (các ứng dụng khác có thể truy xuất ).

Dữ liệu thường được lưu trữ ở file hệ thống, hoặc trong một SQLite database. Đơn giản để các bạn có thể hình dung như : Danh bạ, Call log, cấu hình cài đặt...trên điện thoại là dữ liệu dưới dạng Content Provider.

Content Provider hiện thực một tập phương thức chuẩn mà các ứng dụng khác có thể truy xuất và lưu trữ dữ liệu của loại nó điều khiển.

Tuy nhiên, những ứng dụng không thể gọi các phương thức trực tiếp. Hơn thế chúng dùng lớp Content Resolver và gọi những phương thức đó. Một Content Resolver có thể giao tiếp đến nhiều content provider; nó cộng tác với các provider để quản lý bất kỳ giao tiếp bên trong liên quan.

Đơn giản hơn, chúng ta có thể làm 1 ứng dụng nhỏ để lấy tất cả các thông tin cấu hình trong máy load lên listview. Các bạn có thể chạy Project

ContentProviderDemo1 trong SourcecodeDemo.

Android Content Provider  Android Content Provider

Chúng ta có thể tìm hiểu sơ qua về code của demo này, rất ngắn gọn

Mã:

ContentResolver cr = getContentResolver();

Cursor cursor = cr.query(Settings.System.CONTENT_URI, null, null, null, null);

startManagingCursor(cursor);

ListView listView = (ListView) findViewById(R.id.listView);

String[] from = { Settings.System.NAME, Settings.System.VALUE };

int[] to = { R.id.textName, R.id.textValue };

SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.row, cursor, from, to);

listView.setAdapter(adapter);

Như các bạn thấy, chỉ cần 2 dòng code đơn giản để lấy được con trỏ thao tác trên tập dữ liệu cần lấy:

Mã:

ContentResolver cr = getContentResolver();

Cursor cursor = cr.query(Settings.System.CONTENT_URI, null, null, null, null);

Lớp Content Resolver cung cấp các phương thức xử lý dữ liệu thông qua các Uri, mỗi Content Provider có 1 Uri cụ thể , ở đây Uri Settings.System.CONTENT_URI sẽ trả lại tập dữ liệu là thông tin cấu hình của thiết bị.

Sau khi lấy được con trỏ tới tập dữ liệu, việc còn lại đơn giản là bind data lên listview để hiển thị:

Mã:

startManagingCursor(cursor); ListView listView = (ListView) findViewById(R.id.listView);

String[] from = { Settings.System.NAME, Settings.System.VALUE };

int[] to = { R.id.textName, R.id.textValue };

SimpleCursorAdapter adapter = new

SimpleCursorAdapter(this, R.layout.row, cursor, from, to);

listView.setAdapter(adapter);

Hướng dẫn lập trình cơ bản với Android phần 20 - Android SQLite Database

Hướng dn lập trình cơ bản vi Android - Bài 6

Bài 6 : Android SQLite Database

Trong bài hôm nay mình sẽ giới thiệu với các bạn cơ sở dữ liệu trên Android - SQLiteDatabase.

1. Giới thiệu SQLite Database

Mỗi ứng dụng đều sử dụng dữ liệu, dữ liệu có thể đơn giản hay đôi khi là cả 1 cấu trúc. Trong Android thì hệ cơ sở dữ liệu được sử dụng là SQLite Database, đây là hệ thống mã nguồn mở được sử dụng rộng rãi trong các ứng dụng ( Mozilla

Firefox sử dụng SQLite để lưu trữ các dữ liệu về cấu hình, iPhone cũng sử dụng cơ sở dữ liệu là SQLite).

Trong Android , cơ sở dữ liệu mà bạn tạo cho 1 ứng dụng thì chỉ ứng dụng đó có quyền truy cập và sử dụng, các ứng dụng khác thì không. Khi đã được tạo, cơ sở dữ liệu SQLite được chứa trong thư mục /data/data/<package_name>/databases .

Tiếp theo mình sẽ giới thiệu với các bạn cách tạo và sử dụng cơ sở dữ liệu SQLite . Cách tốt nhất để hiểu lý thuyết là thực hành, các bạn có thể tạo ngay 1 project trong workspace đặt tên là : SQLiteDemo. Ứng dụng này đơn giản chỉ tạo 1 cơ sở dữ liệu USER bao gồm 2 trường ( id , name ) , ngoài ra có các thao tác thêm , đọc , sửa , xóa.

Các bước thực hiện với CSDL:

1. Tạo 1 CSDL ( thông thường chỉ cần làm 1 lần )

2. Mở CSDL đó

3. Thêm giá trị vào trong table

4. Truy vấn.

5. Đóng CSDL

1. Tạo cơ sở dữ liệu.

Đầu tiên các bạn add 1 class DBAdapter để xử lý tất cả các thao tác liên quan đến

CSDL.

Mã:

public static final String KEY_ID = "_id";

public static final String KEY_NAME = "name";

private DatabaseHelper mDbHelper;

private SQLiteDatabase mDB;

private static final String DATABASE_CREATE = "create table users (_id integer primary key autoincrement, "+ "name text not null);";

private static final String DATABASE_NAME = "Database_Demo";

private static final String DATABASE_TABLE = "users";

private static final int DATABASE_VERSION = 2;

private final Context mContext;

Tạo 1 lớp bên trong DBAdapter được extend từ lớp SQLiteOpenHelper, override 2 phương thức onCreate() và onUpgrade() để quản lý việc tạo CSDL và version của CSDL đó.

Mã:

private static class DatabaseHelper extends SQLiteOpenHelper{

public DatabaseHelper(Context context, String name, CursorFactory factory, int version) {

super(context, name, factory, version); // TODO Auto-generated constructor stub

}

@Override

public void onCreate(SQLiteDatabase db) {

// TODO Auto-generated method stub

db.execSQL(DATABASE_CREATE);

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

// TODO Auto-generated method stub

Log.i(TAG, "Upgrading DB");

db.execSQL("DROP TABLE IF EXISTS users");

onCreate(db);

}

}

2. Mở CSDL :

Mã:

public DBAdapter open(){

mDbHelper = new DatabaseHelper(mContext, DATABASE_NAME, null, DATABASE_VERSION);

mDB = mDbHelper.getWritableDatabase(); return this;

}

3. Thêm giá trị vào CSDL

Mã:

public long createUser(String name){

ContentValues inititalValues = new ContentValues();

inititalValues.put(KEY_NAME, name); return mDB.insert(DATABASE_TABLE, null, inititalValues);

}

4. Truy vấn

Bạn có thể get toàn bộ data hoặc có thể get data theo ID ( tiện cho việc chỉnh sửa hay cập nhật thông tin của từng bản ghi).

Mã:

public Cursor getAllUsers(){

return mDB.query(DATABASE_TABLE, new String[] {KEY_ID, KEY_NAME}, null, null, null, null, null);

}

Còn rất nhiều các thao tác như sửa, xóa, update.... bản ghi, các bạn có thể tự phát triển.

Tất cả các chức năng đó đều được cung cấp bởi lớp SQLiteDatabase, các bạn chỉ cần cụ thể hóa bằng các câu truy vấn là được.

5. Đóng CSDL

Mã:

public void close(){

mDbHelper.close();

}

6. Sử dụng CSDL

Để test CSDL mà bạn vừa tạo, các bạn có thể thêm 1 vài dòng code để thêm 1 user và hiển thị CSDL lên màn hình thông qua lớp Activity ban đầu:

Ở đây mình create 1 user thông qua câu lệnh mDB.createUser("Username"); sau đó

Mã:

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

mDB = new DBAdapter(this); mDB.open();

mDB.createUser("Do Minh Thong");

getData();

}

private void getData(){

mCursor = mDB.getAllUsers();

startManagingCursor(mCursor);

String[] from = new String[]{DBAdapter.KEY_NAME};

int[] to = new int[] {R.id.text1};

SimpleCursorAdapter users = new SimpleCursorAdapter(this, R.layout.users_row, mCursor, from, to);

setListAdapter(users);

}

Kết quả :

lap trinh co so du lieu android

Sourcecode đầy đủ : http://www.mediafire.com/?yzw2d1ijymo

Bài này là bài cơ sở để mình viết tiếp Phần 7 : ContentProvider , các bạn chú ý theo dõi nhé

Hướng dẫn lập trình cơ bản với Android phần 19

Đầu tiên là tạo 1 giao diện điều khiển service chơi nhạc bằng layout đơn giản :

Mã:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:padding="4dip" android:gravity="center_horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent">

<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="0" android:paddingBottom="4dip" android:text="@string/local_service_binding"/>

<Button android:id="@+id/bind" android:layout_width="wrap_content"

android:layout_height="wrap_content" android:text="@string/bind_service">

<requestFocus />

</Button>

<Button android:id="@+id/unbind" android:layout_width="wrap_content"

android:layout_height="wrap_content" android:text="@string/unbind_service">

</Button>

<Button android:id="@+id/play" android:layout_width="wrap_content"

android:layout_height="wrap_content" android:text="@string/Play">

</Button>

</LinearLayout>

Tạo 1 class LocalService.java extend từ Service và một lớp con LocalBinder thừa kế từ lớp Binder ( dùng để điều khiển service )

Mã:

public class LocalService extends Service {

public class LocalBinder extends Binder {

LocalService getService() {

       return LocalService.this;

}

}

}

Từ đó nạp chồng phương thức onBind bằng cách trả lại giá trị mBinder

Mã:

private final IBinder mBinder = new LocalBinder();

@Override

public IBinder onBind(Intent intent) {

return mBinder;

}

Tạo một đối tượng MediaPlayer chơi nhạc đơn giản ( sử dụng để chơi file abc.mp3 đặt trong folder res/raw ):

Mã:

MediaPlayer mMediaPlayer;

public void startMp3Player() {

mMediaPlayer =MediaPlayer.create(getApplicationContext(),

R.raw.abc); mMediaPlayer.start();

}

public void mp3Stop() {

mMediaPlayer.stop();

mMediaPlayer.release();

}

Ở lớp LocalServiceBinding.java extend từ lớp Activity chúng ta chỉ cần để ý đến đối tượng mConnection có nhiệm vụ giám sát kết nối của service chơi nhạc.

Mã:

private ServiceConnection mConnection = new ServiceConnection() {

public void onServiceConnected(ComponentName className, IBinder service) {

mBoundService = ((LocalService.LocalBinder)service).getService();

Toast.makeText(LocalServiceBinding.this, R.string.local_service_connected,

Toast.LENGTH_SHORT).show();

}

public void onServiceDisconnected(ComponentName className) {

mBoundService = null;

Toast.makeText(LocalServiceBinding.this,

R.string.local_service_disconnected, Toast.LENGTH_SHORT).show();

}};

Và xử lý sự kiện 3 button ( Bind, Unbin, Play/Stop )

Mã:

private OnClickListener mBindListener = new OnClickListener() {

public void onClick(View v) {

bindService(new Intent(LocalServiceBinding.this, LocalService.class), mConnection, Context.BIND_AUTO_CREATE); mIsBound = true; mPlayButton.setEnabled(true);

}};

private OnClickListener mPlayListener = new OnClickListener() {

public void onClick(View v) {

if(mPlayButton.getText() == "Play"){

            mBoundService.startMp3Player(); mPlayButton.setText("Stop");

}

else{

       mBoundService.mp3Stop(); mPlayButton.setText("Play");

}

}};

private OnClickListener mUnbindListener = new OnClickListener() {

public void onClick(View v) {

      if (mIsBound) {

             unbindService(mConnection); mIsBound = false;

             mPlayButton.setEnabled(false);

     }

}};