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;