Monday, April 13, 2015

Chiến lược marketing tổng thể cho website bán hàng

Website bán hàng mà tôi muốn nói ở đây là website bán hàng từ loại nhỏ đến tầm trung. Tôi chưa có kinh nghiệm với loại lớn nên không dám lạm bàn.


Còn với chữ marketing, hàm ý ở đây là chiến lược giúp gia tăng doanh số bán hàng, không có ý nghĩa khác.

Dưới đây tôi sẽ trình bày vốn kiến thức sau hơn 2 năm bắt đầu là marketer từ không chuyên đến bán chuyên (tự nhận thôi ạ!)

A. Website

Mặc dù không ai nói rằng phải có website bạn mới bán hàng trực tuyến được, nhưng đa số đều biết có web bạn sẽ có khả năng bán hàng hiệu quả hơn. Tại sao?
  • Website là mảnh đất của bạn, tòa lâu đài của bạn, nơi chúng ta tự do làm những gì chúng ta muốn, bạn tha hồ thể hiện ý tưởng trên đó, nó là nơi bạn chào đón những khách hàng tương lai, bạn mời họ vào, nghỉ ngơi, tham quan rồi ra về trong vui vẻ. 
  • Rất nhiều các kỹ thuật quảng cáo hiệu quả cần đến website, bạn sẽ biết ngay ở phần B, kênh quảng cáo.
Có website không khó, nhưng có website bán hàng hiệu quả lại không dễ. Chưa nói đến nội dung (cái này được đề cập ở phần riêng), những chức năng của web rất cần được quan tâm:
  • Bạn có sử dụng giỏ hàng không?
  • Bạn để khách hàng đặt mua thông qua số điện thoại hay thông qua form?
  • Nếu qua form thì thông tin thu thập của bạn cần có các trường nào?
  • Về hình thức thì: background ra sao, màu chủ đạo là gì, hình ảnh trong bài viết sẽ được bố cục thế nào, số điện thoại được để ở đâu, menu nên như thế nào, ảnh đại diện ra sao...
Thương mại điện tử về cơ bản là phải dựa vào thanh toán điện tử, tuy nhiên nước ta, thanh toán điện tử bị cản trở bởi lòng tin hơn là về kỹ thuật, do vậy, các cửa hàng nhỏ thường áp dụng cách gọi điện. Trên Facebook họ có thể chỉ cần thông qua comment hoặc inbox, rất sơ khai, nhưng không còn cách nào khác.

B. Kênh quảng cáo

Vốn ít là đặc điểm của các cơ sở kinh doanh loại nhỏ hoặc loại trung nhưng mới thành lập. Do ít như vậy nên cái gì cũng nhỏ hơn bình thường. Tiền quảng cáo nhỏ muốn sống sót được thì phải sử dụng hiệu quả. Mà muốn hiệu quả cái dễ làm nhất về mặt đầu tư đó là tập trung vào những kênh lớn, những kênh có độ tin cậy cao, đã được chứng minh.

Ở Việt Nam thì hai kênh lớn đó chính là Google và Facebook.

Nói chung hai kênh này được cái dễ dùng, hỗ trợ tốt, cách gì chưa rõ lên mạng gõ là ra ngay. Bạn chỉ cần một thẻ VISA là oki.

Mới đầu sẽ thấy quảng cáo sao khó thế vì mình chưa biết gì cả.

Sau lại thấy dễ thế có up mấy cái ảnh rồi viết giá vào, cài CPC tự động thế là đã bán được hàng rồi. Đời còn gì dễ hơn thế.

Rồi vài tuần sau, ôi thôi, tốn cả triệu tiền quảng cáo mà ngày có vài khách chỉ đủ hòa vốn!

Để quảng cáo tốt bạn sẽ cần:
  • Nắm được các kỹ thuật quảng cáo cơ bản, cập nhật những kỹ thuật mới nhất
  • Có nội dung quảng cáo tốt
  • Có khả năng phân tích các phản hồi từ quảng cáo
Giờ chúng ta sẽ đi vào từng cái. 

Thế nào là nắm được các kỹ thuật cơ bản? Với tôi đó là các kỹ thuật như:
  • Quảng cáo từ khóa trên Google Search
  • Quảng cáo hiển thị trên mạng hiển thị của Google
  • Quảng cáo bài post, tăng like, truy cập web trên Facebook
Các kỹ năng nhỏ hơn đòi hỏi đi kèm sẽ bao gồm:
  • Phân tích từ khóa: tìm những từ khóa mà người mua sản phẩm của bạn tìm kiếm, xác định mức độ cạnh tranh của từng từ khóa, nhằm vào các từ khóa dài hơn để giảm thiểu giá thầu.
  • Hiểu được cơ chế của mạng hiển thị, cách thức hiển thị, HTML5 và Flash. Hiểu sức mạnh của hình ảnh so với từ ngữ. 
  • Hiểu cơ chế đấu giá, cách viết quảng cáo, dừng chữ hoa, thường, thử nghiệm để trải nghiệm thực tế.
Những kỹ thuật cao hơn mà bạn chắc chắn muốn tìm hiểu:
  • Tiếp thị lại
  • Tiếp thị lại động
  • Quảng cáo nhiều sản phẩm
  • Quảng cáo video
Trong 4 cái trên, ít nhất bạn phải hiểu được tiếp thị lại. Đây là kỹ thuật cơ bản nhất để có được khách hàng thực sự.

Mặc dù có một số khách hàng "háu ăn", thấy quảng cáo là họ có thể mua luôn được nhưng đa số mà đúng hơn là 95% - 98% khách hàng vào trang web rồi ra đi mà không mua sản phẩm, có nhiều lý do lắm. Họ chưa có nhu cầu thực sự, họ click vào website của bạn chỉ đơn giản là tìm hiểu sản phẩm thội. Hoặc họ muốn mua đấy nhưng đang là cuối tháng rồi, họ chưa có tiền, đợi đến đầu tháng sau vậy. Hoặc, ừa tao có tiền đấy, tao cũng muốn mua, nhưng mày có vẻ không ngon lắm, tao phải đợi thêm xem thế nào đã, biết đâu đấy tao lại tìm được chỗ mua nào ngon hơn, tiền mà, phải quý chớ.

Thôi thì chẳng biết lý do gì. Nhưng có điều này thì chúng ta biết chắc, họ có quan tâm đến sản phẩm. Chúng ta nếu tiếp tục cung cấp quảng cáo đều đặn cho họ, sẽ đến thời điểm khi họ có nhu cầu, khi họ đang có tiền và rồi họ sẽ mua của bạn. Tiếp thị lại hiểu theo cách đơn giản là quảng cáo lặp lại, nó hiệu quả vì nó bắn quảng cáo chính xác đến khách hàng tiềm năng cao nhất.

Nội dung quảng cáo có thể hiểu đơn giản là một phần trong Nội dung, cái được đề cập ở phần C. Nội dung quảng cáo là cái mào đầu, đó là câu chữ, hình ảnh để hấp dẫn khách hàng, mà tôi có thể gọi đó là thính. Người câu cá không thả ngay mồi xuống hồ nước

Phân tích phản hồi của quảng cáo là gì?

Đó là kỹ thuật giúp bạn đánh giá các chiến dịch của bạn có đang hoạt động hiệu quả không? hiệu quả thì hiệu quả như thế nào? tức là phải định lượng được, số má hẳn hoi chứ không phải chỉ biết mơ hồ chung chung.

Thí dụ, chiến dịch này với 100K một ngày thì đem lại bao nhiêu tương tác, bao nhiêu like, comment, share, bao nhiêu truy cập website và quan trọng nhất là bao nhiêu đơn hàng!

Khi các chiến dịch quảng cáo nhiều hơn, web có nhiều sản phẩm, việc phân tích lỗ lãi sẽ trở nên khó khăn. ROI không thể đơn giản cộng trừ một hai lần là ra, khi ấy có thể bạn sẽ cần một chương trình quản lý bán hàng online nơi bạn biết được hiệu quả đồng vốn rõ ràng cũng như nhiều thông tin quan trọng khác.

Kỹ thuật cần thiết phải mở rộng: Google Analystic - công cụ thống kê web rất hiệu quả của Google

C. Nội dung

Nội dung bao gồm rất nhiều thứ, trong đó có text, ảnh, video, nhạc...tất cả những gì thông tin mà bạn cung cấp cho người dùng đều có thể coi là nội dung.

Các cửa hàng thiên về mặt thẩm mỹ như quần áo, mỹ phẩm, tóc,..thường chỉ quan tâm đến ảnh (chụp ảnh sản phẩm) nội dung text lại sơ sài, chỉ nói về tính năng.

Lại có những cửa hàng nội dung text thì tốt nhưng ảnh chụp bằng điện thoại hay nói chung là hình ảnh xấu. Giờ đẹp quá người ta không thích, nhưng xấu thì chưa bao giờ được ai thích cả, cho nên nhất quyết là không được XẤU.

Nếu có ý tưởng triển khai được nội dung video thì quá tốt, nhưng không có thì hai mặt văn bản và hình ảnh phải chú ý.

Về văn bản: phải có được nội dung tốt xuất phát từ sự hiểu rõ về sản phẩm mình bán và nhu cầu khách hàng mua sản phẩm là vì cái gì, họ muốn đẹp da? họ muốn giảm cân, họ muốn bộ đồ tôn dáng, họ muốn trông cao lên, họ muốn sang hơn?...Vâng chỉ có hai điều đó thôi ạ, hiểu mình (hiểu sản phẩm mình bán) và hiều người (hiểu cái muốn của khách).

Về hình ảnh: hình ảnh đẹp muốn có thì cần thiên về mặt kỹ thuật nhiều hơn, phải có máy ảnh tốt, thậm chí là studio chuyên về chụp ảnh để có được cả ánh sáng nền nữa. Nếu có điều kiện bạn có thể đầu tư, còn không thì đi thuê cũng được. Cần nhớ có những cái không thể không thuê. Chẳng hạn bán quần áo, cần mẫu đẹp, trong khi mình vốn tự có không đạt thì phải thuê. Còn nếu mình đạt, tự chụp mình mặc đồ thì rất tốt.

D. Sản phẩm

Sản phẩm dù là mua hay tự làm đều phải làm sao khi đến tay được người dùng nó phải có tính chất mà tôi gọi là khác biệt. Ý của từ khác biệt ở đây không phải là cái gì đó quái dị, quá nổi trội, như thế nhiều khi thành kệch cỡm, khác biệt ở đây chỉ cần là: nó làm cho bạn có cái gì đó để không bị lẫn với những người khác cùng bán sản phẩm như bạn.

Hướng tới chất lượng tốt cũng tạo ra khác biệt, bởi như vậy bạn đã phân biệt bản thân với những nhà cung ứng có chất lượng trung bình. Tuy nhiên cũng có nhiều nhà cung ứng cung cấp chất lượng cao cho nên cách dễ nhất để tạo ra khác biệt là thông qua cảm quan.

Bạn cần có hệ thống nghe tên rất oách "nhận diện thương hiệu". Hiểu đơn giản đó là logo, bao bì, tem nhãn, cách bạn đóng gói, buộc nơ, hay thậm chí cả cách vận chuyển đến tay khách hàng.

Wednesday, April 8, 2015

Hướng dẫn Redirect 301 bằng .htaccess cho website bán hàng

Nguyên nhân cần đổi hướng URL có rất nhiều, từ đơn giản như bạn muốn sửa URL bài viết cụ thể nào đó, hoặc sửa ngày tháng của bài viết, hay sửa thư mục chứa một nhóm bài viết đều có khả năng ảnh hưởng đến URL...Đôi khi nghiêm trọng hơn là bạn muốn đổi sang tên miền hoàn toàn mới, như vậy là toàn bộ bài viết trên website sẽ có URL khác.

Redirect 301

Câu hỏi đầu tiên cho những ai chưa rõ: thế đổi hướng Redirect 301 có tác dụng gì?

Nó có hai tác dụng chính:
  • Đảm bảo rằng những người truy cập vào đường link cũ sẽ vẫn đến được nơi họ cần. Những đường link cũ này nằm ở đâu? Nó có thể nằm trên mạng xã hội, các diễn đàn, email mọi người gửi cho nhau, hoặc trên cỗ máy tìm kiếm của Google khi nó chưa index những thay đổi của bạn.
  • Đảm bảo giữ thứ hạng SEO trên Google của bạn. Bằng cách điền thông tin vào vào file .htaccess nằm ở thư mục gốc của website để thông báo chuyển hướng, bạn không chỉ giúp người dùng mà còn thông báo với Google rằng, những đường link đó đã chuyển sang địa chỉ mới. Và Google sẽ chuyển thứ hạng cho những đường link mới này. Điều này vô cùng quan trọng, nếu trước đây trang web của bạn từng có thứ hạng cao.
Vậy làm như thế nào?

Hãy đăng nhập vào tài khoản hosting của bạn để tải file .htaccess về. Lưu ý trước khi chỉnh sửa hãy tạo bản sao lưu của file này, vì nếu cái này bị lỗi site của bạn sẽ không truy cập được, khi đó bạn còn có file gốc để khôi phục lại hiện trạng bạn đầu.

Truy cập vào website: http://www.rapidtables.com/web/tools/redirect-generator.htm  (hoặc lên mạng tra từ khóa "redirect 301 htaccess generator" để tìm tool mà bạn thích)

Đây là công cụ tạo code Redirect 301 tự động, giúp bạn tránh bị lỗi. Bạn chọn như trong hình (Apache . htaccess redirect), điền tên URL cũ rồi mới vào. Cái này là dành cho các bạn chuyển hướng các URL cụ thể:

Apache . htaccess redirect

Nhấn Generate Code roài bạn copy đoạn code nó cho vào file . htaccess nhé.

Công việc phức tạp sẽ dành cho những ai phải chuyển hướng URL không theo quy luật, khi đó mỗi URL chuyển hướng bạn sẽ phải làm một dòng redirect 301, điều này sẽ vô cùng nặng nhọc nếu website của bạn có hàng trăm trang.

Ngược lại, những người chuyển sang tên miền hoàn toàn mới, nhưng cấu trúc URL đằng sau vẫn giữ nguyên thì code thêm vào khá đơn giản, vì kiểu chuyển hướng này có quy luật, bạn chỉ cần thêm đâu 4 - 5 dòng là được (cái này bạn tự tìm trên mạng nhé). Kiểu chuyển từ có www sang không có www hoặc ngược lại cũng tương tự, là có quy luật. Sau khi sửa bạn up lên thư mục gốc của tên miền cũ là được.

Quay lại với những người chuyển không theo quy luật. Ví dụ cụ thể tôi sẽ lấy câu chuyện của chính mình. Tôi cấu trúc website theo dạng:

Tên miền/năm tháng của bài viết/tên bài viết

Nhưng những người làm website bán hàng sau này sẽ hiểu, cấu trúc này sẽ rất khó để tiếp thị lại theo sản phẩm, họ sẽ buộc phải dùng tiếp thị lại động, vốn phức tạp hơn khi thêm vào từng trang và kiểm tra lỗi gắt gao vốn không thích hợp với những người làm kinh doanh online nhỏ.

Cấu trúc nào tốt hơn? Cái bên dưới í

Tên miền/thư mục bài viết/tên bài viết

Tại sao?

Vì người ta sẽ dựa vào thư mục bài viết, chính cái thư mục sẽ được dùng để làm tên sản phẩm hoặc nhóm sản phẩm gần nhau. Từ đó họ sẽ phân loại được cụ thể tập hợp được những người dùng.

Ok xong, vậy bây giờ làm thế nào?

Bạn phải nhớ điều này, đổi URL như trường hợp này giống như bạn sắp xếp lại đồ đạc của toàn bộ căn phòng trong một khách sạn sang trọng đang có hàng ngàn người ở. Hãy giảm thiểu các rắc rối cho họ. Nếu làm không khéo bạn sẽ không có chỗ để họ ăn, họ ngủ, hoặc sẽ vào nhầm phòng, không tìm thấy phòng của mình. Thiệt hại của bạn là rõ ràng. Hãy giảm thiểu điều đó.

Đây là các bước mà tôi cảm thấy sẽ có ích:
  1. Thực hiện chuyển đổi vào giờ mà bạn nhận được ít truy cập nhất, thường sẽ vào đêm khuya sau 12h.
  2. Dừng tất cả các quảng cáo liên quan trong khi bạn thực hiện chuyển đổi URL (Google Ads, Facebook Ads...). 
  3. Chuẩn bị sẵn file .htaccess đã bao gồm các lệnh Redirect 301 của bạn. Rồi up lên thư mục gốc của site. 
  4. Sửa lại toàn bộ quảng cáo của bạn để nó sang URL mới, mặc dù sau khi bạn up file .htaccess người dùng truy cập quảng cáo của bạn sẽ vẫn đến được nơi cần đến, tuy nhiên việc quảng cáo chuyển hướng là không hay, bạn vẫn phải sửa lúc nào đó nếu không sửa ngay lập tức được.
  5. Bật lại quảng cáo. Sửa lại các liên kết nội của website (phải làm), xóa các link cũ trên fanpage nếu thấy cần thiết, hoặc cứ để đó cũng được vì bạn đã Redirect rồi.
Trong các bước trên, khổ nhất là bước 3 và 4. Thực tình nếu bạn làm bước 3 hoàn hảo bạn có thể chuyển luôn sang bước 5 và đợi đến khi nào đỡ mệt mỏi rồi thực hiện bước 4. Tuy nhiên nếu được hãy làm theo các bước trên.

Nhìn lại web của tôi làm cho khách, có hàng trăm bài viết, và ngót nghét 60 - 70 quảng cáo các thể loại! Tôi khốn khỏ roài!

Rồi, giờ ta bàn về bước 3. Nếu bạn phải làm cho website có quá nhiều bài viết thì trước hết bạn nên tập trung vào những bài viết chính (về sau có thời gian sẽ làm nốt cho những cái còn lại):
  • Những bài mà bạn đang quảng cáo nhất định phải có Redirect 301, bạn phải có luôn để còn bật quảng cáo (nếu không bạn hoặc khách của bạn sẽ mất doanh thu)
  • Những bài có SEO tốt cũng phải có Redirect 301
Vậy đó quan trọng nhất là bạn phải có được file .htaccess chuẩn, bạn nên làm trước, vì bạn đã biết được URL gốc và URL bạn định chuyển sang. File .htaccess càng làm tốt bao nhiêu bạn càng đỡ bị thiệt hại doanh thu bấy nhiêu.

Tôi dự tính, công việc này sẽ ngốn khoảng 10 đến 20 tiếng làm việc! Đúng là ngu mà nếu ngay từ đầu biết được cấu trúc thì đâu vất thế này. Đành tự an ủi rằng ta có thêm tí kinh nghiệm, mà nói thẳng ra, đéo ai mà biết trước được hết, nhể.

Bổ sung đoạn quên

Cứ tưởng viết xong rồi, nhưng vẫn còn các bác à, đó là phần giải thích tầm quan trọng của việc cấu trúc thư mục cho bài viết. Khi chúng ta cấu trúc thư mục để tiếp thị lại (theo kiểu thường chứ tiếp thị lại động khổ lắm, up code từng trang, rồi nguồn cấp dữ liệu...) thì điều cần nhớ đó là phải phân loại bài viết thực cụ thể.

Cái này muốn bán điện thoại A thì phải để nó vào thư mục điện thoại A. Cái này phải 3 tháng sau người ta mới mua thì phải để nó vào thư mục đánh dấu nó lại để biết thời điểm thích hợp mà quảng cáo.

Phải nhắn với đứa quản trị nội dung, web tầm quan trọng của thư mục, bảo nó không thay đổi lung tung,...cái đó còn tùy vào website bạn dùng nữa mà nhắn nhủ nó thế nào.

Tuesday, March 3, 2015

Hàm Ngày tháng và Thời gian trong PHP

Hàm date() trong PHP được sử dụng để định dạng ngày và thời gian.

Hàm Date()

Hàm date() được dùng để định dạng một nhãn thời gian giúp cho việc đọc dữ liệu ngày và thời gian trở nên đơn giản hơn. Cú pháp:

date(format,timestamp)

Tham số  Mô tả
Định dạng (format) Yêu cầu. Chỉ định định dạng của nhãn thời gian
Nhãn thời gian (timestamp) Tùy chọn. Chỉ định một nhãn thời gian cụ thể. Theo mặc định là ngày và thời gian hiện tại

Một nhãn thời gian là một chuỗi các ký tự, biểu thị ngày tháng và / hoặc thời gian mà tại đó một sự kiện nào đó xảy ra.

Cách đơn giản để lấy một ngày

Các tham số định dạng của hàm date() xác định cách làm thế nào để định dạng ngày (hoặc thời gian).

Dưới đây là một số yếu tố thường được sử dụng cho ngày : 
  • d - Đại diện cho ngày của tháng (01 tới 31) 
  • m - Đại diện cho một tháng (01 tới 12) 
  • Y - Đại diện cho một năm (trong bốn chữ số) 
  • l (dạng viết thường của L) - Đại diện cho các ngày trong tuần
Các yếu tố khác như " /", " . " hoặc " - " cũng có thể được chèn vào giữa các yếu tố để thêm định dạng bổ sung.

Ví dụ dưới đây định dạng ngày hôm nay trong ba cách khác nhau:

<?php
echo "Today is " . date("Y/m/d") . "<br>";
echo "Today is " . date("Y.m.d") . "<br>";
echo "Today is " . date("Y-m-d") . "<br>";
echo "Today is " . date("l");
?>

Mẹo PHP - Tự động lấy năm bản quyền dùng cho website

Bạn sử dụng hàm date() để tự động cập nhật bản quyền năm trên website của bạn (thường nằm ở chân trang):

&copy; 2010-<?php echo date("Y")?>

Cách đơn giản để lấy thời gian

Dưới đây là một số yếu tố thường được sử dụng cho thời gian:
  • h - định dạng 12h (với số 0 đứng đằng trước) từ 01 đến 12
  • i - định dạng phút (với số 0 đứng đằng trước) từ 00 đến 59
  • s - định dạng giây (với số 0 đứng đằng trước) từ 00 đến 59
  • a - dạng viết thường của am hoặc pm
Ví dụ dưới đây cung cấp thời gian hiện tại trong định dạng cụ thể:

<?php
echo "The time is " . date("h:i:sa");
?>

Chú ý: hàm date() trong PHP sẽ lấy thời gian/ngày tháng của server!

Lấy múi giờ của bạn

Nếu thời gian bạn nhận được từ mã không phải là thời gian chính xác, nguyên nhân có thể nằm ở lý do máy chủ của bạn là ở nước khác hoặc được thiết lập cho múi giờ khác.

Vì vậy, nếu bạn cần thiết lập thời gian theo một địa điểm cụ thể, bạn có thể thiết đặt một múi giờ nhất định.

Ví dụ dưới đây đặt múi giờ "America / New_York", sau đó cung cấp kết quả đầu ra thời gian hiện tại trong các định dạng cụ thể :

<?php
date_default_timezone_set("America/New_York");
echo "The time is " . date("h:i:sa");
?>

Tạo ngày với hàm mktime() trong PHP

Các tham số tùy chọn thời gian trong hàm date() xác định một dấu thời gian. Nếu bạn không chỉ định một dấu thời gian, ngày và thời gian hiện tại sẽ được sử dụng (như trong ví dụ trên).

Các hàm mktime() trả về nhãn thời gian cho một ngày. Các nhãn Unix chứa số giây giữa Unix Epoch (ngày 01 Tháng 1 1970 00:00:00 GMT) và thời gian quy định.

Cú pháp:

mktime(hour,minute,second,month,day,year)

Ví dụ dưới đây tạo một ngày và thời gian từ thông số trong hàm mktime():

<?php
$d=mktime(11, 14, 54, 8, 12, 2014);
echo "Created date is " . date("Y-m-d h:i:sa", $d);
?>

Tạo ngày tháng từ chuỗi với hàm strtotime() trong PHP

Hàm PHP strtotime() được sử dụng để chuyển dạng ngày tháng dễ đọc cho con người sang dạng thời gian Unix

Cú pháp:

strtotime(time,now)

Ví dụ dưới đây tạo ngày và thời gian từ hàm strtotime():

<?php
$d=strtotime("10:30pm April 15 2014");
echo "Created date is " . date("Y-m-d h:i:sa", $d);
?>

PHP khá thông minh về việc chuyển đổi một chuỗi sang một ngày, vì vậy bạn có thể đưa vào các giá trị khác nhau:

<?php
$d=strtotime("tomorrow");
echo date("Y-m-d h:i:sa", $d) . "<br>";

$d=strtotime("next Saturday");
echo date("Y-m-d h:i:sa", $d) . "<br>";

$d=strtotime("+3 Months");
echo date("Y-m-d h:i:sa", $d) . "<br>";
?>


Tuy nhiên, hàm strtotime() không hoàn hảo, do vậy hãy nhớ kiểm tra chuỗi mà bạn đưa vào.

Nhiều ví dụ khác về hàm ngày tháng

Ví dụ dưới đây đưa ra các ngày vào ngày thứ 7 trong vòng 6 tuần:

<?php
$startdate = strtotime("Saturday");
$enddate = strtotime("+6 weeks",$startdate);

while ($startdate < $enddate) {
echo date("M d", $startdate),"<br>";
$startdate = strtotime("+1 week", $startdate);
}
?>


Ví dụ bên dưới cung cấp số ngày còn lại cho đến ngày mùng 4 tháng 7:

<?php
$d1=strtotime("July 04");
$d2=ceil(($d1-time())/60/60/24);
echo "There are " . $d2 ." days until 4th of July.";
?>

Saturday, February 28, 2015

Cú pháp của SQL

Bảng cơ sở dữ liệu

Một cơ sở dữ liệu thường bao gồm một hoặc nhiều bảng. Mỗi bảng được định danh bằng một tên (ví dụ như Khách hàng hoặc Đơn hàng). Bảng bao gồm các bản ghi (hàng) với dữ liệu.
Trong các bài viết về SQL, chúng tôi sẽ sử dụng bảng dữ liệu quen thuộc được nhiều người biết đến là Northwind (có sẵn trong MS Access và MS SQL Server).

Dưới đây là một phần thông tin được lấy ra từ bảng Customer:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1
Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico
4
Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK
5Berglunds snabbköpChristina BerglundBerguvsvägen 8LuleåS-958 22Sweden

Bảng trên bao gồm 5 bản ghi (mỗi bản ghi dành cho một khách hàng) và 7 cột dữ liệu (CustomerID, CustomerName, ContactName, Address, City, PostalCode, và Country).

Câu lệnh SQL

Hầu hết các hành động mà bạn cần phải thực hiện trên cơ sở dữ liệu được thực hiện với các câu lệnh SQL. Câu lệnh SQL sau sẽ lựa chọn tất cả các bản ghi của bảng Customer:

Ví dụ:

SELECT * FROM Customers;

Trong bài hướng dẫn này, chúng tôi sẽ hướng dẫn bạn về sự khác nhau giữa các câu lệnh SQL.

Hãy nhớ rằng ...

SQL là không phải là ngôn ngữ nhạy cảm với cách viết HOA hay viết thường: điều này có nghĩa là select cũng giống như SELECT

Trong hướng dẫn này, chúng tôi sẽ viết tất cả các từ khóa trong SQL ở dạng chữ HOA.

Dấu chấm phẩy sau câu lệnh SQL?

Một số hệ thống cơ sở dữ liệu đòi hỏi phải có dấu chấm phẩy ở cuối mỗi câu lệnh SQL.

Dấu chấm phẩy là cách tiêu chuẩn để tách mỗi câu lệnh SQL trong các hệ thống cơ sở dữ liệu cho phép nhiều câu lệnh SQL được thực hiện trong cùng một cuộc gọi đến máy chủ.

Trong hướng dẫn này, chúng tôi sẽ sử dụng dấu chấm phẩy ở cuối mỗi câu lệnh SQL.

Một số các lệnh SQL quan trọng nhất

  • SELECT - lấy dữ liệu từ cơ sở dữ liệu
  • UPDATE - cập nhật dữ liệu trong cơ sở dữ liệu
  • DELETE - xoá dữ liệu từ cơ sở dữ liệu
  • INSERT INTO - chèn dữ liệu mới vào một cơ sở dữ liệu
  • CREATE DATABASE - tạo ra một cơ sở dữ liệu mới
  • ALTER DATABASE - sửa đổi một cơ sở dữ liệu
  • CREATE TABLE - tạo ra một bảng mới
  • ALTER TABLE - sửa đổi một bảng
  • DROP TABLE - xoá một bảng
  • CREATE INDEX - tạo chỉ mục (khoá tìm kiếm)
  • DROP INDEX - xoá một chỉ mục (khóa tìm kiếm)

Friday, February 27, 2015

Giới thiệu về SQL

SQL là một ngôn ngữ chuẩn dùng cho việc truy cập và thao tác cơ sở dữ liệu.

SQL là gì?

  • SQL là viết tắt của Structured Query Language - Ngôn ngữ truy vấn có cấu trúc
  • SQL cho phép bạn truy cập và thao tác với cơ sở dữ liệu
  • SQL đạt chuẩn ANSI (American National Standards Institute - Viện tiêu chuẩn quốc gia Hoa Kỳ)

SQL có thể làm được gì?

  • SQL có thể thực hiện truy vấn đối với cơ sở dữ liệu
  • SQL có thể lấy dữ liệu từ cơ sở dữ liệu
  • SQL có thể chèn các bản ghi vào cơ sở dữ liệu
  • SQL có thể cập nhật các bản ghi trong cơ sở dữ liệu
  • SQL có thể xóa các bản ghi trong cơ sở dữ liệu
  • SQL có thể tạo ra cơ sở dữ liệu mới
  • SQL có thể tạo bảng trong cơ sở dữ liệu
  • SQL có thể tạo các thủ tục được lưu trữ trong cơ sở dữ liệu
  • SQL có thể hiển thị thông tin được lấy từ cơ sở dữ liệu
  • SQL có thể thiết lập quyền truy cập vào bảng, thủ tục, và hiển thị thông tin

SQL là một chuẩn - NHƯNG ....

Mặc dù SQL là một chuẩn ANSI (American National Standards Institute), nó vẫn có những phiên bản khác nhau.

Nhưng dù sao, để phù hợp với các tiêu chuẩn ANSI, tất cả đều hỗ trợ ít nhất là các lệnh quan trọng (chẳng hạn như SELECT, UPDATE, DELETE, INSERT, WHERE) theo cách tương tự nhau.

Lưu ý: Hầu hết các chương trình cơ sở dữ liệu SQL cũng có phần mở rộng độc quyền riêng của họ bên cạnh các tiêu chuẩn SQL!

Sử dụng SQL trong trang web của bạn

Để xây dựng một trang web lấy dữ liệu từ cơ sở dữ liệu, bạn sẽ cần:
  • Một chương trình quản lý cơ sở dữ liệu quan hệ RDBMS (ví dụ: MS Access, SQL Server, MySQL)
  • Sử dụng thành thạo ngôn ngữ kịch bản phía máy chủ, như PHP hoặc ASP
  • Sử dụng thành thạo SQL để có được các dữ liệu bạn muốn
  • Sử dụng thành thạo HTML / CSS

RDBMS

RDBMS là viết tắt của Hệ thống quản lý cơ sở dữ liệu quan hệ.

RDBMS là cơ sở cho SQL, và cho tất cả các hệ thống cơ sở dữ liệu hiện đại như MS SQL Server, IBM DB2, Oracle, MySQL, và Microsoft Access.

Các dữ liệu trong RDBMS được lưu trữ trong cơ sở dữ liệu đối tượng được gọi là bảng.

Một bảng là một tập hợp các dữ liệu liên quan, bảng bao gồm các cột và các hàng.

Wednesday, February 18, 2015

jQuery - Phương thức sự kiện

jQuery cho phép đáp ứng các sự kiện trong trang HTML.

Sự kiện là gì?

Tất cả những hành động khác nhau trên trang web mà có thể đáp ứng, được gọi là sự kiện.Một sự kiện đại diện cho thời điểm chính xác khi một cái gì đó xảy ra .

Ví dụ:
  • di chuyển chuột qua một thành phần
  • lựa chọn một radio button
  • click vào một thành phần
Thuật ngữ "fires" thường được sử dụng với các sự kiện (event). Ví du: "sự kiện nhấn phím "fires" thời điểm bạn nhấn một phím".

Dưới đây là một số sự kiện DOM phổ biến:

ChuộtBàn phímForm Tài liệu/Cửa sổ
click (nháy đơn)nhấn phímgửitải
nháy képphím xuốngthay đổithay đổi kích cỡ
di chuyển vàophím lênfocusscroll
di chuyển rablurunload

Cú pháp cho phương thức sự kiện trong jQuery

Trong jQuery, hầu hết sự kiện DOM có một phương thức tương đương jQuery. Để gán một sự kiện click vào tất cả các đoạn văn trên một trang, bạn có thể làm điều này:

$("p").click();

Bước tiếp theo là xác định những gì sẽ xảy ra khi sự kiện diễn ra. Bạn phải viết một hàm cho sự kiện:

$("p").click(function(){
// action goes here!!
});

Những phương thức sự kiện phổ biến trong jQuery

$(document).ready()

Phương thức $(document).ready() cho phép chúng ta thực hiện hàm khi tài liệu được tải xong hoàn toàn. Sự kiện này sẽ được giải thích ở bài cú pháp trong jQuery.

click()

Phương thức click gắn một hàm xử lý sự kiện cho phần tử HTML.

Hàm này thực thi khi người dùng click vào phần tử HTML.

Ví dụ dưới đây nói rằng: Khi một click xảy ra trên thẻ <p> nào đó; ẩn thẻ <p> ấy:

Ví dụ:

$("p").click(function(){
$(this).hide();
});


dblclick()

Phương thức dbclick() gắn một hàm xử lý sự kiện cho phần tử HTML.

Hàm này thực thi khi người click đúp vào một thành phần HTML:

Ví dụ:

$("p").dblclick(function(){
$(this).hide();
});


mouseenter()

Phương thức mouseenter() gắn một hàm xử lý sự kiện cho một phần tử HTML.

Hàm này sẽ thực thi khi con trỏ chuột được đưa vào khu vực của phần tử HTML được chọn:

Ví dụ:

$("#p1").mouseenter(function(){
alert("You entered p1!");
});


mouseleave()

Phương thức mouseleave() gắn một hàm xử lý sự kiện cho một phần tử HTML.

Hàm được thực thi khi con trỏ chuột được đưa ra khỏi phần tử HTML được chọn.

Ví dụ:

$("#p1").mouseleave(function(){
alert("Bye! You now leave p1!");
});


mousedown()

Phương thức mousedown() gắn một hàm xử lý sự kiện cho một phần tử HTML.

Hàm được thực thi khi con trỏ trái chuột được nhấn trong khi chuột di chuyển qua phẩn từ HTML đó. (cá nhân mình thấy nó rất giống hàm click)

Ví dụ:

$("#p1").mousedown(function(){
alert("Mouse down over p1!");
});

mouseup()

Phương thức mouseup() gắn một hàm xử lý sự kiện vào phần tử HTML.

Hàm được thực thi khi, chuột trái được nhả trong khi chuột di chuyển qua phần tử HTML:

Ví dụ:

$("#p1").mouseup(function(){
alert("Mouse up over p1!");
});


hover()

Phương thức hover()có hai chức năng và là sự kết hợp của hai hàm mouseenter() và mouseleave().

Hàm đầu tiên được thực thi khi chuột di chuyển vào thành phần HTML, và hàm thứ hai được thực thi khi chuột di chuyển ra ngoài thành phần HTML:

Ví dụ:

$("#p1").hover(function(){
alert("You entered p1!");
},
function(){
alert("Bye! You now leave p1!");
});


focus()

Phương thức focus() gắn một hàm xử lý sự kiện vào các trường trong form HTML.

Hàm này được thực thi khi trường trong form được "focus":

Ví dụ:

$("input").focus(function(){
$(this).css("background-color", "#cccccc");
});


blur()

Phương thức blur() gắn một hàm xử lý sự kiện vào các trường trong form HTML.

Hàm này được thực thi khi trường trong form mất focus.

Ví dụ:

$("input").blur(function(){
$(this).css("background-color", "#ffffff");
});


focus() và blur() xử lý hai sự kiện trái ngược nhau.

Hiệu ứng jQuery - Ẩn và Hiện

jQuery hide() và show()

Với jQuery, bạn có thể ẩn và hiện các thành phần HTML với phương thức tương ứng là hide() và show().

Ví dụ:

$("#hide").click(function(){
$("p").hide();
});

$("#show").click(function(){
$("p").show();
});



Nếu bạn click vào nút Ẩn, nội dung này sẽ ẩn đi, ấn nút Hiện để show ra


Cú pháp:

$(selector).hide(speed,callback);

$(selector).show(speed,callback);


Tham số tùy chọn tốc độ cho phép bạn chọn tốc độ ẩn/hiện cụ thể và có thể sử dụng các giá trị như: "slow", "fast", hoặc mili giây.

Các tham số tùy chọn callback (gọi lại) là một chức năng được thực hiện sau khi hide( ) hoặc show( ) hoàn thành hoàn toàn ( bạn sẽ tìm hiểu thêm về các chức năng gọi lại trong bài sau).

Ví dụ dưới đây minh họa cách sử dụng thông số tùy chọn tốc độ trong hide():

$("button").click(function(){
$("p").hide(1000);
});


Đây là một đoạn văn bản.
Đây là một đoạn văn bản khác.

jQuery toggle()

Với jQuery, bạn có thể chuyển đổi giữa hide() và show() với phương thức toggle().

Hiển thị thành phần ẩn và ẩn thành phần hiển thị:

Ví dụ:

$("button").click(function(){
$("p").toggle();
});


Cú pháp:

$(selector).toggle(speed,callback);

Tham số tùy chọn tốc độ cho phép bạn chọn tốc độ ẩn/hiện cụ thể và có thể sử dụng các giá trị như: "slow", "fast", hoặc mili giây.

Tham số callback là hàm sẽ được thực hiện sau khi toggle() hoàn thành.
Đây là một đoạn văn bản.Đây là một đoạn văn bản khác.

Tuesday, February 17, 2015

Bộ chọn của jQuery

Bộ chọn jQuery là một trong những phần quan trọng nhất của thư viện jQuery.

Bộ chọn jQuery

Bộ chọn jQuery cho phép bạn chọn và thao tác trên các thành phần HTML.

Bộ chọn jQuery được sử dụng để "tìm kiếm" (hoặc lựa chọn) phần tử HTML dựa trên id, class, kiểu, thuộc tính, giá trị của thuộc tính và nhiều yếu tố khác nữa. Nó dựa trên bộ chọn của CSS, và thêm vào đó có những bộ chọn tùy biến riêng.

Tất cả các bộ chọn trong jQuery bắt đầu với ký hiệu $ và dấu ngoặc đơn: $()

Lựa chọn phần tử theo tên

jQuery lựa chọn thành phần dựa trên tên của phần tử.

Bạn có thể chọn tất cả các thẻ <p> trong trang bằng cách:

$("p")

Ví dụ:

Khi người dùng click vào button, tất cả các thẻ <p> sẽ bị ẩn đi:

$(document).ready(function(){
$("button").click(function(){
$("p").hide();
});
});

Lựa chọn theo id

jQuery có thể sử dụng id của thẻ HTML để tìm ra phần tử cụ thể cần tác động.

Một id phải duy nhất trong trang, vì vậy bạn phải sử dụng #id selector khi bạn muốn tìm kiếm một thành phần duy nhất.

Để tìm phần tử với id cụ thể, viết ký tự thăng (#) theo sau bởi tên id của phần tử HTML:

$("#test")

Ví dụ:

Khi người dùng click vào butto, phần tử với id="test" sẽ bị ẩn đi:

$(document).ready(function(){
$("button").click(function(){
$("#test").hide();
});
});

Lựa chọn theo class

Bộ chọn jQuery theo class tìm phần tử với một class cụ thể.

Để tìm các phần tử với class cụ thể, viết dấu chấm theo sau bởi tên của class:

$(".test")

Ví dụ

Khi người dùng click vào button, thành phần với class="test" sẽ bị ẩn đi:

$(document).ready(function(){
$("button").click(function(){
$(".test").hide();
});
});

Thêm các ví dụ về bộ chọn trong jQuery

Cú phápMô tả
$("*")Chọn tất cả các thành phần
$(this)Chọn phần tử HTML hiện tại
$("p.intro")Chọn tất cả các thẻ p với class là intro
$("p:first")Chọn thẻ p đầu tiên
$("ul li:first")Chọn thẻ li đầu tiên nằm trong thẻ ul đầu tiên
$("ul li:first-child")Chọn tất cả các thẻ li đầu tiên nằm trong các thẻ ul
$("[href]")Lựa chọn tất cả các thẻ có thuộc tính href
$("a[target='_blank']")Lựa chọn tất cả các thẻ a với thuộc tính được chọn có giá trị bằng "_blank"
$("a[target!='_blank']")Lựa chọn tất cả các thẻ a với thuộc tính được chọn có giá trị khác "_blank"
$(":button")Lựa chọn tất cả các thẻ <button> và input có type là button (type="button")
$("tr:even")Lựa chọ tất cả các thẻ <tr> chẵn
$("tr:odd")Lựa chọn tất cả các thẻ <tr> lẻ

Chức năng trong một file riêng

Nếu trang web của bạn bao gồm nhiều trang, và bạn muốn chức năng jQuery của bạn vận hành dễ dàng, bạn có thể đưa file jQuery đó vào file .js riêng.Khi chúng tôi thực hành các bài tập liên quan đến jQuery trong các bài hướng dẫn, các chức năng được bổ sung trực tiếp vào bên trong thành phần <head> . Tuy nhiên, đôi khi nó là thích hợp hơn để đặt chúng trong một file riêng biệt, giống như thế này (sử dụng thuộc tính src để liên kết tới các file .js) :

Ví dụ:

<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js">
</script>
<script src="my_jquery_functions.js"></script>
</head>

Cú pháp của jQuery

Với jQuery, bạn có thể chọn thành phần HTML mình muốn thực hiện hành động trên chúng.

Cú pháp của jQuery

Cú pháp của jQuery bao gồm phần tử HTML được chọn và hành động lên (các) phần tử đó.

Cú pháp cơ bản là: $(selector).action()
  • Ký hiệu $ để định nghĩa/truy cập jQuery
  • Một (selector) là một hoặc nhiều phần tử HTML
  • Một jQuery action() là một hành động nào đó trên (các) phần tử
Ví dụ:

$(this).hide() - dùng để ẩn đi phần tử hiện tại. hides the current element

$("p").hide() - dùng để ẩn tất cả thành phần <p>

$(".test").hide() - dùng để ẩn các phần tử có class="test"

$("#test").hide() - dùng để ẩn phần tử có id="test".

Bạn quen thuộc với bộ chọn trong CSS?

jQuery sử dụng cú pháp của CSS để lựa chọn các phần tử. Bạn sẽ học được nhiều hơn về cú pháp selector trong chương kế tiếp.

Tài liệu sẵn sàng cho các sự kiện

Bạn có thể để ý, các ví dụ của chúng tôi về jQuery đều được nhúng vào bên trong tài liệu đã sẵn sàng dùng:

$(document).ready(function(){

// jQuery methods go here...

});


Điều này dùng để ngăn bất kỳ đoạn code jQuery nào được chạy trước khi toàn bộ tài liệu được tải đầy đủ (sẵn sàng để dùng).

Một thực hành tốt là đợi cho đến khi tài liệu được tải đầy đủ và sẵn sàng sử dụng. Nó cũng cho phép bạn sử dụng đoạn code JavaScript trước phần body của tài liệu, trong phần head.

Dưới đây là một số ví dụ về hành động sẽ bị thất bại nếu nó được chạy trước khi tài liệu được tải đầy đủ:
  • Khi bạn muốn ẩn một phần từ mà nó chưa được tạo ra
  • Khi bạn muốn lấy kích cỡ của ảnh mà nó chưa tải kịp
Mẹo: Nhóm jQuery cũng tạo các phương thức rút gọn cho tài liệu đã sẵn sàng:

$(function(){

// jQuery methods go here...

});


Sử dụng cú pháp nào mà bạn muốn. Chúng tôi nghĩ cách viết tài liệu sẵn sàng cho sự kiện là dễ hiểu hơn khi đọc code.

Bắt đầu với jQuery

Thêm jQuery vào trang web của bạn.

Có vài cách để bạn bắt đầu sử dụng jQuery trên website. Bạn có thể:
  • Download thư viện jQuery trên trang jQuery.com
  • Thêm jQuery từ CDN, chẳng hạn Google 

Download jQuery

Có hai phiên bản jQuery để bạn tải về:
  • Phiên bản cho người dùng - phiên bản được nén để giảm kích thước, cái này chính là phiên bản được nhúng vào trang web
  • Phiên bản cho nhà phát triển - phiên bản dùng để kiểm thử và phát triển thêm (không nén và dễ dàng đọc được code)
Cả hai phiên bản bạn đều có thể tải về từ jQuery.com

Thư viện jQuery là một file JavaScript, và bạn có thể liên kết nó với HTML bằng thẻ <script> (lưu ý là thẻ <script> phải được đưa vào trong khu vực thẻ <head>):

<head>
<script src="jquery-1.11.2.min.js"></script>
</head>


Mẹo: Đưa file vừa tải về vào cùng thư mục với trang web mà bạn muốn sử dụng nó.

Bạn có tự hỏi tại sao chúng ta không có đoạn type="text/javascript" vào bên trong thẻ <script>

Đơn giản vì điều đó là không cần thiết trong HTML5. JavaScript là ngôn ngữ script mặc định trong HTML5 và trong tất cả các trình duyệt hiện đại!

jQuery CDN

Nếu bạn không muốn tải và lưu jQuery bằng host của riêng mình, bạn có thể sử dụng nó từ CDN (Mạng phân phối nội dung).

Cả Google và Microsoft đều host jQuery.

Để sử dụng jQuery từ Google hoặc Microsoft, bạn sử dụng một trong các cách sau đây:

Google CDN:

<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
</head>


Microsoft CDN:

<head>
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.11.2.min.js"></script>
</head>


Một lợi ích lớn khi web của bạn sử dụng jQuery được host trên Google hoặc Microsoft:

Nhiều người dùng đã từng tải jQuery từ Google hoặc Microsoft khi họ truy cập website nào đó. Do vậy, khi người dùng truy cập trang web của bạn, trang web sẽ được tải nhanh hơn so với việc bạn tự host jQuery (tự nhúng jQuery thông qua file trên hosting của bạn). Ngoài ra, hầu hết các CDN đảm bảo để bạn tải được dữ liệu từ máy chủ gần bạn nhất, điều này cũng giúp website tải nhanh hơn.

Giới thiệu về jQuery

Mục đích của jQuery là làm cho bạn sử dụng các ứng dụng JavaScript dễ dàng hơn trên website.

Những gì là nền tảng bạn cần biết

Trước khi bạn bắt đầu học jQuery, bạn cần phải có các kiến thức nền tảng về:
Nếu bạn muốn học các chủ đề này, trên Blog Mạng Lưới Toàn Cầu có khá nhiều, bạn có thể tham khảo nhé.

jQuery là gì?

jQuery là thư viện nhỏ gọn JavaScript giúp bạn "viết ít hơn nhưng làm được nhiều hơn".

Mục đích của jQuery là giúp bạn sử dụng JavaScript được dễ dàng hơn.

jQuery cung cấp rất nhiều lệnh phổ biến mà yêu cầu rất nhiều dòng lệnh JavaScript để thực hiện, và chúng được gói gọn lại để bạn có thể gọi thông qua một dòng lệnh.

jQuery cũng làm đơn giản hóa rất nhiều thứ từ JavaScript, ví dụ như câu lệnh gọi AJAX và thao tác DOM.

Thư viện jQuery bao gồm các chức năng sau:
  • Thao tác trên HTML/DOM
  • Thao tác trên CSS
  • Phương thức sự kiện HTML
  • Hiệu ứng và hình ảnh động
  • AJAX
  • Tiện ích
Mẹo: Thêm vào đó, jQuery có rất nhiều plugin cho hầu hết các nhiệm vụ.

Tại sao lại là jQuery?


Hiện có rất nhiều framework JavaScript nhưng jQuery vẫn phổ biến nhất và ngày càng rộng mở.

Nhiều công ty hàng đầu thế giới sử dụng jQuery, ví dụ như:
  • Google
  • Microsoft
  • IBM
  • Netflix 

jQuery làm việc trên tất cả các trình duyệt?

Các team hỗ trợ jQuery hiểu rõ các rắc rối liên quan đến trình duyệt, và họ có hỗ trợ giải quyết những vấn đề đó thông qua thư viện jQuery. jQuery vấn chạy chính xác trên tất cả các trình duyệt phổ thông, bao gồm cả trình duyệt cổ lai hy Internet Explorer 6!

Friday, February 13, 2015

Chương trình quản lý bán hàng online - xác định các yêu cầu và chi tiết chức năng

Kinh doanh rất khắc nghiệt - nếu bạn không tiến bộ nghĩa là bạn thụt lùi - bởi tất cả mọi người đều chạy nhanh về phía trước.

Kinh doanh online có thuận lợi, vì bản chất của nó dựa trên nền công nghệ nên nó tạo điều kiện cho chúng ta ứng dụng công nghệ thông tin vào việc cải tiến dịch vụ ở các khâu khác, và một trong những khâu quan trọng nhất phải làm đó là xây dựng hoàn chỉnh chương trình quản lý bán hàng online cho thật khớp với đặc thù kinh doanh của bạn.

Giờ thì chúng ta cùng trả lời xem, chương trình đang định xây dựng đem lại những lợi ích thiết thực cơ bản nào:
  • Nó cho phép chúng ta biết được sản phẩm nào đang bán chạy hoặc bị ế. Từ đó có những điều chỉnh quá trình marketing hoặc ngừng hẳn sản phẩm kém hiệu quả.
  • Nó tự động tính toán doanh thu theo ngày, tuần, tháng. Giảm thiểu công sức phải tính toán bằng tay.
  • Nó cho chúng ta biết đâu là khách hàng trung thành (mua nhiều lần), khách hàng vàng (mua giá trị lớn). Công cuộc này rất quan trọng. Nó giúp tập trung vào các khách hàng mục tiêu giá trị cao. Thực hiện marketing lại, khuyến mại để đẩy mạnh doanh thu.
  • Nó giảm thiểu rủi ro của việc nhập liệu sai (ví dụ bạn nhớ nhầm giá), tính toán sai (tính tổng tiền sai).
  • Với mô hình online, có thể quản lý từ xa, nhiều người ở những vị trí khác nhau có thể tiếp cận dữ liệu.
Tóm lại rất nhiều lợi ích được tìm thấy, quan trọng nhất chúng ta đang tạo ra được bộ dữ liệu lịch sử về quá trình mua hàng, chúng ta có thể khai thác sáng tạo những dữ liệu này theo những cách khác nhau, mà có thể khiến chính chúng ta bất ngờ!

Thí dụ nếu bạn định mở cửa hàng offline, bạn sẽ phải quan tâm xem, khu vực địa lý nào nhiều người mua nhất, là Cầu Giấy hay gần Hoàn Kiếm thì hơn...

Khách hàng thường gọi điện cho bạn vào khung giờ nào - nếu có thông tin này, bạn có thể điều chỉnh giá thầu tăng để thêm khả năng hiển thị quảng cáo của bạn trong những khung giờ đó, từ đó gia tăng cơ hội lợi nhuận.

Khách hàng thường mua những gì kèm với nhau. Nếu họ hay mua sản phẩm A kèm với sản phẩm M, bạn có thể thêm thông tin sản phẩm M khi quảng cáo những bài viết về A, hoặc bạn có thể giảm giá một chút khi khách hàng mua A và M.

Tất cả những điều trên hoàn toàn có thể thực hiện được nếu bạn có được bộ CSDL chuẩn và đầy đủ.

Áp dụng ở các cửa hàng trên mặt đất của chương trình quản lý bán hàng cũng rất quan trọng. Nếu bạn từng đến Big C, siêu thị rất lớn và quen thuộc ở Hà Nội, mỗi lần thanh toán bạn sẽ thấy cuối cùng nhân viên đưa cho bạn một tờ giấy ghi đầy đủ các mặt hàng mà bạn mua, nhưng còn nhiều thứ hơn ở đằng sau đó.

Big C nắm đầy đủ thông tin bạn mua gì, số lượng bao nhiêu, lượng tiền thế nào. Nếu bạn dùng Big Xu (một chiếc thẻ có tính năng giảm giá), họ sẽ biết bạn mua bao nhiêu lần rồi, ngày giờ nào. 

Những thông tin trên sẽ được phân tích riêng để giúp Big C nhập tăng những sản phẩm bán chạy, giảm những sản phẩm kém. Bày các sản phầm gần nhau nếu chúng được mua kèm. Chủ động điều chỉnh tăng lượng nhân viên vào những ngày và giờ cao điểm (vì họ biết trước điều này). Biết được chu kỳ mua hàng của khách theo tuần, tháng, mùa.

Như vậy để xây dựng được chương trình quản lý tốt, chúng ta phải đảm bảo:
  • Khai thác tối đa thông tin của khách hàng. Về sản phẩm, khách mua gì, số lượng bao nhiêu, ở đâu, điện thoại thế nào thường chúng ta biết rõ, nhưng nên có các thông tin khác như: giờ mua hàng, mua qua kênh nào,..thì tuyệt hơn nữa.
  • Nhập liệu chuẩn và đầy đủ.
  • Tìm cách khai thác sáng tạo thông tin có được.
  • Bảo mật để ngăn thông tin bị ăn cắp.
  • Có biện pháp backup phòng ngừa để ngăn phá hoại.

Mô hình lý tưởng của chương trình quản lý bán hàng online

Ở Việt Nam, cái khó nhất là lòng tin, người mua vớ vẩn linh tinh cũng nhiều, mà người bán lừa đảo cũng không ít. Vấn đề là người mua sợ thanh toán trước, không nhiều người tin người bán hàng sẽ chuyển đủ số lượng và chất lượng giống như cam kết.

Đất không chịu trời thì trời phải chịu đất, nhiều người bán chấp nhận COD - tức là khách nhận được hàng mới phải thanh toán tiền.

Thường các shop online muốn khách gọi điện đến đặt hàng, tuy nhiên khi đặt qua điện thoại, bạn sẽ phải ghi ra giấy thông tin của khách, rồi sau đó nhập lại vào chương trình quản lý bán hàng online.

Bạn có thể thấy điều này làm phát sinh chi phí và các rắc rối khác như:
  • Tiền điện thoại của khách gọi đến cho bạn.
  • Thời gian bạn phải bỏ ra để nhập liệu.
  • Có thể có lỗi phát sinh vì các lý do như nghe nhầm, gõ nhầm.
Thế nhưng tại sao người bán không muốn khách tự nhập dữ liệu mua hàng qua form trực tuyến?  như vậy không phải đơn giản hơn rất nhiều hay sao?

Lý do nằm ở chỗ: vì không phải thanh toán trước, tính cam kết sẽ không cao, nên trong nhiều trường hợp đặt hàng qua form người dùng rất dễ thay đổi. Khi gọi điện nghĩa là họ sẽ phải bỏ ra một chi phí nào đó (thay vì hầu như không mất gì khi gõ qua form), và họ đang tiếp xúc với một người thực sự (thay vì tương tác với máy). Vì vậy, đặt hàng bằng cách gọi điện có tỷ lệ thất bại hoặc giao đi giao lại thấp hơn form khá nhiều => người bán, cũng giống như tôi, thích khách hàng gọi điện hơn.

Mô hình lý tưởng gạt bỏ các rắc rối trên.

Nếu bạn từng dùng thẻ VISA hoặc Paypal để mua sản phẩm nào đó trên mạng, bạn sẽ thấy các thao tác rất đơn giản và dễ dàng.

Bạn chỉ cần chọn các sản phẩm cần mua, sau đó điền thông tin cá nhân để thanh toán, tiền của bạn được chuyển cho người bán, còn bạn sẽ có sản phẩm hoặc dịch vụ cần. Nếu là dịch vụ online bạn sẽ được sử dụng gần như ngay lập tức (ví dụ: game, ebook, tên miền, hosting). Nếu là sản phẩm vật chất (điện thoại, sách giấy) sẽ mất thời gian (từ một cho đến vài ngày) để nó được ship đến tay bạn.

Ở đây, chính thao tác nhập liệu của người dùng sẽ tạo các dữ liệu cho đơn hàng online (bạn không phải gõ lại lần nữa, và bạn không gõ nhầm được!), và gần như 100% đó là những người mua thực sự, vì họ đã thanh toán tiền cho bạn (hiếm khi bị từ chối).

Khụ, nhưng nói thì nói vậy thôi, trong lúc chờ đợi mô hình lý tưởng xảy ra chúng ta vẫn cứ phải bán hàng.

Và quan trọng hơn, các tính năng, chức năng của chương trình quản lý bán hàng online không phụ thuộc nhiều vào việc người dùng có thanh toán qua mạng hay là COD, vì vậy hãy sử dụng nó ngay khi có thể.

Xác định yêu cầu và chi tiết chức năng

Cứ định bỏ qua phần này nhưng rồi cuối cùng vẫn phải viết vì không thể đừng được nữa. Bởi vì khi chương trình trở lên phức tạp nó cần một bản mô tả chức năng đầy đủ để được kiểm thử toàn bộ xem có khớp với yêu cầu hay chưa. Với vài trăm yêu cầu lớn nhỏ khiến việc nhớ trong đầu là bất khả, dẫn đến việc chúng ta phải có bản tường trình bằng văn bản.

Thôi không dài dòng nữa ợ. Đâm vào đề luôn.

Chức năng tạo vận đơn

Dùng để tạo đơn hàng, bao gồm: địa chỉ, số điện thoại, mua sản phẩm gì, cái nhãn này về sau dán lên sản phẩm để ship hàng cũng như khách hàng nhìn vào.


Các trường dữ liệu:
  • Số điện thoại: Có chức năng báo quên nhập số, báo thiếu số (ví dụ dưới 10 số là nó báo).
  • Địa chỉ: Cũng có chức năng báo quên, vì đây là dữ liệu bắt buộc phải có mới giao hàng được.
  • Họ tên và Quận: hai trường này có thể nhập có thể không, không bắt buộc.
  • 5 trường sản phẩm: Sản phẩm chọn từ danh mục sản phẩm được tạo từ trước, với các mô tả cụ thể như mã sản phẩm, giá.
  • Bên cạnh trường tên là trường giá sản phẩm: Giá được show ra khi người dùng chọn sản phẩm, để họ tránh nhầm lẫn. Trường giá là tự động điền, nó lấy thông tin từ trường sản phẩm. Trường sản phẩm lấy từ CSDL, trong khi trường giá dùng JavaScript để lấy thông tin từ trường sản phẩm.
  • Tiếp theo là trường số lượng, điền số lượng sản phẩm khách muốn mua. Cái này cũng chủ động báo thiếu nếu quên nhập.
  • SP Plus là thông tin đi kèm sản phẩm. Tức là nếu có nhu cầu chúng ta có thể đính kèm thông tin mở rộng vào danh mục sản phẩm mua. Ví dụ khách mua nhiều có quà, thì cần phỉa có trường này để bổ sung thông tin.
  • Phí ship: nhập phí ship hàng, hiện tại chủ yếu freeship nội thành nên mặc định của trường này hiện tại là 0 - có thể cần thêm chức năng tùy chỉnh
  • Thanh toán và Lý thuyết về cơ bản là một: Trường lý thuyết tính toán tự động các sản phẩm rồi tính thành tiền. Tuy nhiên đôi khi thanh toán của chúng ta khác một chút trên lý thuyết nên trường Thanh toán sẽ được điền sau.
  • TT Plus nó cũng giống SP Plus nhưng là dùng để bổ sung thông tin cho trường thanh toán, thí dụ như khách đã chuyển khoản. Giảm giá vì lý do nào đó...
  • Ghi chú: trường bổ sung thông tin, dành cho các mục đích thông báo thêm, chẳng hạn như, giao trước giờ nào đó...
  • Nhận hộ, dành cho khách hàng nhờ người nhận hộ.
  • Nút Xóa dùng để xóa thông tin đã nhập. 
  • Nút Tạo Vận Đơn đùng để tạo.
  • Sáng <-> Chiều dùng để chuyển đổi vận đợn từ sáng sang chiều hoặc ngược lại.

Friday, February 6, 2015

Các kiểu kết nối cơ sở dữ liệu MySQL bằng PHP

PHP 5 và các phiên bản về sau làm việc với cơ sở dữ liệu MySQL thông qua hai phương pháp:
  • MySQLi extension (chữ i viết tắt cho từ cải tiến (improved)) 
  • PDO (PHP Data Objects) 
Các phiên bản trước đây của PHP sử dụng MySQL extension (không có i). Tuy nhiên, phần mở rộng này không được tán thành từ năm 2012.

Vậy tôi nên sử dụng MySQLi hay PDO

Nếu bạn cần câu trả lời nhanh gọn thì đó là: "Tùy vào bạn thích cái nào hơn!"

Cả MySQLi và PDO đều có những lợi thế riêng.

PDO làm việc với 12 hệ thống cơ sở dữ liệu khác nhau, trong khi MySQLi chỉ làm việc với duy nhất hệ cơ sở dữ liệu MySQL mà thôi.

Vì vậy nếu bạn cần chuyển đổi dự án để làm việc với các hệ cơ sỡ dữ liệu khác nhau thì PDO sẽ tốt cho bạn hơn. Bạn chỉ phải thay đổi mã kết nối và vài câu truy vấn. Với MySQLi bạn phải viết lại code hoàn toàn, bao gồm cả truy vấn.

Cả hai đều hướng đối tượng nhưng MySQLi cung cấp API cho bạn.

Cả hai đều hỗ trợ Prepared Statements. Prepared Statements giúp bạn được bảo vệ khỏi các cuộc tấn công sử dụng SQL injection và điều này rất quan trọng cho các ứng dụng web cần tính bảo mật.

Các ví dụ về MySQL, bao gồm cả cú pháp của MySQLi và PDO

Trong phần này và các phần sau, chúng tôi đưa ra ba cách để làm việc với PHP và MySQL:
  • MySQLi (hướng đối tượng) 
  • MySQLi (thủ tục) 
  • PDO

Cài đặt MySQLi

Dùng cho Linux và Windows: Các extension của MySQLi được cài đặt mặc định trong hầu hết các trường hợp khi gói PHP5 mysql được cài đặt.

Hướng dẫn cài đặt chi tiết, xem tại đây: http://php.net/manual/en/mysqli.installation.php

Cài đặt PDO

Hướng dẫn chi tiết xem tại đây:http://php.net/manual/en/pdo.installation.php

Mở và kết nối với MySQL

Trước khi chúng ta có quyền truy cập vào cơ sở dữ liệu MySQL, chúng ta cần kết nối với server:

Ví dụ (MySQLi hướng đối tượng):

<?php

$servername = "localhost";

$username = "username";

$password = "password";


// Tạo kết nối

$conn = new mysqli($servername, $username, $password);


// Kiểm tra kết nối

if ($conn->connect_error) {

die("Connection failed: " . $conn->connect_error);

}

echo "Connected successfully";

?>


Chú ý: trong ví dụ theo kiểu hướng đối tượng ở trên: $connect_error sẽ có vấn đề với các phiên bản trước PHP 5.2.9 và 5.3.0. Nếu bạn cần đảm bảo khả năng tương thích với các phiên bản trước đó, sử dụng đoạn code thay thế dưới đây:

// Kiểm tra kết nối

if (mysqli_connect_error()) {

die("Database connection failed: " . mysqli_connect_error());

}



Ví dụ (MySQLi thủ tục):

<?php

$servername = "localhost";

$username = "username";

$password = "password";


// Tạo kết nối

$conn = mysqli_connect($servername, $username, $password);


// Kiểm tra kết nối

if (!$conn) {

die("Connection failed: " . mysqli_connect_error());

}

echo "Connected successfully";

?>



Ví dụ (PDO):

<?php

$servername = "localhost";

$username = "username";

$password = "password";


try {

$conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);

// set the PDO error mode to exception

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

echo "Connected successfully";

}

catch(PDOException $e)

{

echo "Connection failed: " . $e->getMessage();

}

?>



Chú ý rằng trong ví dụ về PDO ở trên, chúng ta cũng đã xác định được một cơ sở dữ liệu (myDB ) . PDO đòi hỏi một cơ sở dữ liệu hợp lệ để kết nối. Nếu không có cơ sở dữ liệu được chỉ định, một ngoại lệ (exception) được ném ra.

Mẹo: Lợi ích lớn của PDO là nó có một lớp ngoại lệ để xử lý bất kỳ vấn đề có thể xảy ra trong các truy vấn cơ sở dữ liệu của chúng ta. Nếu một ngoại lệ được ném trong khu vực try { }, kịch bản ngừng thực thi và đổ trực tiếp vào khu vực catch( ) { }.

Đóng kết nối

Kết nối sẽ được đóng tự động khi mã kết thúc, để đóng kết nói trước đó, sử dụng đoạn code sau:

Ví dụ (MySQLi hướng đối tượng):

$conn->close();


Ví dụ (MySQLi Thủ tục):

mysqli_close($conn);


Ví dụ (PDO):

$conn = null;

Tuesday, January 27, 2015

Hướng dẫn cách nhận tiền từ Google Adsense

Chơi Adsense là hình thức kiếm tiền online mà nhiều chủ trang web ở Việt Nam (cũng như thế giới) tham gia. Blog Mạng Lưới Toàn Cầu cũng có chơi hơn một năm nay. Hôm nay sau khi đạt đến hạn mức thanh toán, Google đã gửi tiền cho mình. Cùng xem cách thức nhận tiền đơn giản và nhanh chóng từ Google trong bài viết này nhé.

Sau khi đăng nhập vào Google Adsense, bạn click vào hình bánh răng cưa rồi chọn thanh toán để thấy các thông tin cần thiết:

Chọn thanh toán

Hình thức thanh toán đơn giản nhất đối với người dùng Việt Nam (để nhận tiền từ Google) là dịch vụ chuyển tiền của Western Union. Hạn mức thanh toán tối thiểu là 100 USD. Nếu chưa chọn, bạn nên chọn sử dụng Western Union.

Khi vượt hạn mức tối thiểu, Google sẽ gửi tiền cho bạn và thông báo ở mục thanh toán, thường rơi vào ngày 21 đến 23 của tháng.

Bạn sẽ thấy thông báo tương tự như sau:

Tiền đã được chuyển về Việt Nam

Điều này có nghĩa là tiền của bạn đã được chuyển về Việt Nam (Đã được phát hành). 

Khi click vào đường link bạn sẽ thấy các thông tin nhận tiền:

Biên lai thanh toán gửi từ Google
Bạn phải ghi lại các thông tin quan trọng sau (nếu nhà có máy in thì bạn nên in ra cho chính xác):
  • Số tiền thanh toán
  • Mã số chuyển tiền
  • Chứng minh thư nhân dân
  • Thông tin người gửi tiền, trong trường hợp của mình là Google Ireland, Ltd., Dublin 4, Ai-len
Làm sao để nhận được số tiền này?

Rất đơn giản, bạn tìm đến bất cứ ngân hàng nào có biểu tượng nhận và gửi tiền của Western Union. Nó có màu vàng rất nổi bật:


Bạn ra quầy bảo mình muốn nhận tiền từ Western Union, họ sẽ đưa cho bạn tờ giấy điền thông tin. Sau khi điền xong, họ sẽ kiểm tra 1 - 2 phút rồi đưa tiền cho bạn, bạn có thể chuyển ngay sang tiền Việt nếu muốn.

Đợt rồi mình kiếm được trên 2 triệu, tất nhiên là không nhiều sau một năm chơi (ngày có vài nghìn à!), tuy nhiên có tiền cũng thích lắm :) Bạn nào chơi khéo, chơi giỏi, kiếm tiền từ Adsense đủ ăn là có khả năng. Chúc các bạn may mắn.

Lưu ý: 
  • Bạn không mất thêm chi phí để nhận tiền. 
  • Kể từ ngày chuyển tiền về Việt Nam bạn có tối đa 60 ngày để nhận tiền.

Monday, January 26, 2015

Hàm rand() và mt_rand() trong PHP

Hai hàm này có chức năng như nhau, dùng để tạo các số ngẫu nhiên. Điểm khác biệt duy nhất là hàm mt_rand() nhanh hơn 4 lần so với rand(). Và không gian ngẫu nhiên của nó cũng rộng hơn.

Cú pháp:
  • rand(): sẽ cho ra một số nguyên ngẫu nhiên, giá trị lớn nhất có thể là 32767 (còn gọi là  getrandmax)
  • mt_rand(): sẽ cho ra số nguyên ngẫu nhiên, giá trị lớn nhất có thể là 2147483647 (còn gọi là mt_getrandmax)
  • rand(min, max): min, max là tùy chọn. Kết quả sẽ cho ra số ngẫu nhiên trong khoảng min max (có thể dùng số âm). 
  • mt_rand(min, max): min, max là tùy chọn. Kết quả cho ra số ngẫu nhiên nguyên trong khoảng min, max (có thể dùng số âm).
Ví dụ:

<?php
echo rand()."</br>";
echo mt_rand()."</br>";
echo rand(13, 345)."</br>";
echo mt_rand(1, 600)."</br>";
?>

Đây là kết quả của tôi:

23840
1751926519
72
41

Dĩ nhiên của bạn sẽ khác, vì cái này là ngẫu nhiên.

Hàm abs() trong PHP

Hàm abs() dùng để lấy giá trị tuyệt đối của một giá trị. Nếu còn nhớ môn toán hồi cấp 2, bạn sẽ hiểu giá trị tuyệt đối là gì.

Dành cho những ai chưa rõ:
  • Giá trị tuyệt đối của 0 là 0
  • Giá trị tuyệt đối của một số dương A là chính số A đó
  • Giá trị tuyệt đối của số âm X là số dương Y sao cho X + Y = 0
Ví dụ giá trị tuyệt đối của 3 là 3, của - 2.5 là 2.5

Cú pháp trong PHP: abs(số)

Thông tin kỹ thuật:
  • Trả về giá trị là số.
  • Nếu tham số dầu vào là dạng float, giá trị trả về cũng ở dạng float. Nếu tham số đầu vào là số thực, giá trị trả về cũng là số thực.
  • Phiên bản PHP yêu cầu: 4 trở lên.
Ví dụ:

<?php
echo(abs(6) . "<br>");
echo(abs(-9) . "<br>");
echo(abs(-3.1) . "<br>");
echo(abs(3.1));
?>

Kết quả:

6
9
3.1
3.1

Tự thiết kế hàm riêng

Bạn có tự tay thiết kế được hàm riêng giống hàm abs() trong PHP không? Câu trả lời là có. Rất đơn giản thôi. Dưới đây tôi sẽ trình bày một cách:

<?php
function GT_TD($x) {
    if ($x>=0) {$y = $x;} else {$y = (-1) * $x;}
    return $y;
}

echo(GT_TD(6) . "<br>");
echo(GT_TD(-9) . "<br>");
echo(GT_TD(-3.1) . "<br>");
echo(GT_TD(3.1));
?>

Chạy đoạn code trên bạn sẽ thấy nó cho kết quả tương tự hàm abs().

Saturday, January 24, 2015

Thực hành: sắp xếp mảng trong PHP không cần dùng hàm

Trong PHP bạn có đầy đủ các hàm sắp xếp mảng, điều đó có nghĩa là bình thường khi cần thiết bạn sẽ áp dụng các hàm đó thôi, để tiết kiệm thời gian và công sức - không phải gõ code thuần để làm lại việc này nữa. Bạn lại hỏi mình, thế bài viết này có ý nghĩa gì? Câu trả lời là: luyện tư duy.

Điều quan trọng nhất trong lập trình đó là tư duy và chăm chỉ, cả hai cái đều bổ sung cho nhau rất tốt. 

Nếu có tư duy đúng bạn có thể chuyển đổi bài toán sang bất kỳ ngôn ngữ nào.

Giờ chúng ta đi vào vấn đề chính. Giả dụ tôi có hàm như sau: 

$bang_diem = array(7, 5.5, 9, 6, 7.2, 7.8, 10, 5);

Bạn thấy rằng hàm này không được sắp xếp có thự tự, giờ chúng ta phải xếp lại theo thứ tự tăng dần mà không được dùng hàm xây dựng sẵn là sort()

Ý tưởng: theo thứ tự tăng dần có nghĩa là cái bé nhất xếp đầu tiên, tiếp theo là cái lớn hơn cái bé nhất nhưng lại nhỏ hơn những cái còn lại, cứ thế cho đến phần tử cuối cùng. 

Chúng ta tưởng tượng giống như việc xếp hàng ngày xưa, người nhỏ nhất ở đầu, nhỡ mà trong khi xếp hàng, chúng ta thấy ai nhỏ hơn mà lại ở phía sau ta bảo họ đổi chỗ lên trên. 

Hoặc chúng ta làm thế này, ta tìm người thấp nhất bảo họ đứng ra một chỗ, tiếp theo với những người còn lại chúng ta lại tiếp tục tìm người thấp nhất trong số đó rồi bảo họ xếp tiếp người đầu tiên vừa được cho ra riêng một chỗ. Cứ làm như thế chúng ta có được một hàng có thứ tự cao dần về phía sau.

Như vậy có thể nói hàm sắp xếp theo thứ tự có thể quy về cách thức tìm giá trị cực đại hoặc cực tiểu.

Theo yêu cầu của đề bài là theo thứ tự tăng dần nên chúng ta sẽ phải tìm giá trị cực tiểu n lần (với n là số phần tử của mảng)

Đây là đoạn code giúp tìm giá trị nhỏ nhất của mảng:

$bang_diem = array(7, 5.5, 9, 6, 7.2, 7.8, 10, 5);

$clength = count($bang_diem);

for($x = 0; $x < $clength; $x++) {

        $min=$bang_diem[$x];

            for($y = 0; $y < ($clength); $y++) {

                if ($min > $bang_diem[$y]) {

                    $min = $bang_diem[$y];

}}}

Giải thích:
  • Đầu tiên để đếm số phần tử của mảng ta dùng hàm count.
  • Dùng 2 vòng lặp for lồng nhau để tiến hành so sánh.
  • Gán $min có giá trị là phần tử đầu tiên, sau đó đem phần tử đó so sánh với các phần tử còn lại của mảng, bất cứ khi nào $min lớn hơn một phần từ nào đó nghĩa là $min vẫn chưa phải nhỏ nhất thì khi ấy $min được gán giá trị nhỏ hơn này. if ($min > $bang_diem[$y]) {$min = $bang_diem[$y];}
  • Quá trình so sánh này được lặp lại đúng bằng số phần từ của mảng, cho nên cuối cùng sau n lần nó sẽ tìm được đúng phần tử cần tìm - là phần tử nhỏ nhất của mảng.
Vậy công việc tiếp theo là gì? Đó là chúng ta sẽ lôi phần tử nhỏ nhất này ra một chỗ khác. Cụ thể là nhồi nó vào mảng mới.

Tiện đây, tìm giá trị lớn nhất của mảng, ta chỉ việc đổi dấu là xong.

Tìm max:

$bang_diem = array(7, 5.5, 9, 6, 7.2, 7.8, 10, 5);

$clength = count($bang_diem);

for($x = 0; $x < $clength; $x++) {

        $max=$bang_diem[$x];

            for($y = 0; $y < ($clength); $y++) {

                if ($max < $bang_diem[$y]) {

                    $max = $bang_diem[$y];

}}}

Giờ ta đã tìm được giá trị nhỏ nhất của mảng, làm thế nào ta tìm được giá trị nhỏ thứ nhì? Cách dễ nhất là loại bỏ phần tử nhỏ nhất đầu tiên đi và lặp lại đoạn mã tìm giá trị nhỏ nhất, vì giá trị nhỏ nhất đầu tiên đã bị loại, giá trị nhỏ nhất mới chính là cái thứ nhì.

Nhưng trong khi chúng ta không biết hàm loại bỏ phần tử khỏi mảng thì phải dùng cách nào để biến giá trị nhỏ nhất không được xét tới nữa.

Đơn giản là gán giá trị nhỏ nhất đó thành giá trị lớn nhất.

Đây là toàn bộ đoạn code giúp bạn sắp xếp thứ tự tăng dần:

<?php
$bang_diem = array(7, 5.5, 9, 6, 7.2, 7.8, 10, 5);
$sap_xep = array();

$clength = count($bang_diem);

for($x = 0; $x < $clength; $x++) {
        $max=$bang_diem[$x];
            for($y = 0; $y < ($clength); $y++) {
                if ($max < $bang_diem[$y]) {
                    $max = $bang_diem[$y];}}}


for ($m = 0; $m < $clength; $m++) {
    for($x = 0; $x < $clength; $x++) {
        $min=$bang_diem[$x];
            for($y = 0; $y < ($clength); $y++) {
                if ($min > $bang_diem[$y]) {
                    $min = $bang_diem[$y];
}}}
$sap_xep[$m] = $min;
for($t = 0; $t < $clength; $t++) {if ($bang_diem[$t]==$min) {$bang_diem[$t]=$max;}}}


for($x = 0; $x < $clength; $x++) {
echo $sap_xep[$x];
echo ", ";}
?>

Bạn có thể thấy quá trình tìm min được lặp lại đúng bằng số phần tử của mảng. Phần tử nhỏ nhất được quẳng vào mảng mới $sap_xep theo thư tự tăng dần, vì vậy cuối cùng ta có được điều như ý.