Đào Tạo PHP & Mysql

Học PHP Online - PHP Framework - Tự Học PHP

Lập Trình PHP Căn Bản

Bài 17: Xây dựng hệ thống bình chọn bằng PHP và MYSQL

Ở loạt bài trước, chúng ta đã bàn tới các ứng dụng quản lý người sử dụng, xây dựng bộ đếm, tạo mã bảo mật để phòng chống những người có dụng ý xấu trên website. Tiếp theo, trong bài này chúng ta sẽ bàn về cách thức xây dựng hệ thống cho phép người dùng bình chọn khi họ tiến hành thăm viếng website của chúng ta. Để xây dựng hệ thống bình chọn chúng ta cần phân tích xem hệ thống này cần có bao nhiêu bảng quan hệ.



A- Phân tích và thiết kế cơ sở dữ liệu:


Trong tình huống này chúng ta cần 1 bảng câu hỏi và 1 bảng câu trả lời.


Phân tích quan hệ giữa chúng ta có:


1 Câu hỏi có nhiều câu trả lời.


1 câu trả lời chỉ dành cho 1 câu hỏi.


Vậy giữa 2 bảng này sẽ phát sinh một khóa ngoại, là khóa dùng để liên kết giữa hai bảng này.

 
Bài 17: Xây dựng hệ thống bình chọn trên website bằng PHP&MYSQL

Vậy ta có cú pháp tạo 2 bảng như sau.

 
Bảng câu hỏi ( question)

Bảng câu trả lời (anwser)

Nhập liệu bằng CSDL ta có:

B- Xây dựng trang bình chọn poll.php

 

Kết nối cơ sở dữ liệu:

Lựa chọn câu hỏi có trong cơ sở dữ liệu để liệt kê ra trên website, sau đó ta lại tiếp tục liệt kê các câu trả lời của câu hỏi đó bằng cách sử dụng dấu chọn lựa (radio). Như vậy chúng ta sẽ phải chạy cùng lúc 2 câu truy vấn lồng nhau trong suốt quá trình truy xuất.

Và màn hình sẽ xuất ra như hình bên dưới


Bài 17: Xây dựng hệ thống bình chọn trên website bằng PHP&MYSQL


Và khi người dùng nhất nút Bình chọn, chúng ta sẽ gọi lại chính trang đó để xử lý dữ liệu mà người dùng vừa lựa chọn.


Vậy ta phải sử dụng lệnh isset() để kiểm tra xem người dùng có nhấn nút bình chọn không, tiếp đến ta lấy ra id mà người dùng vừa tiến hành chọn ở form bên dưới.


Cuối cùng ta cập nhật dữ liệu bằng cách lấy số trong cơ sở dữ liệu cộng tiếp cho 1 đơn vị nữa. Và đưa người dùng sang trang kết quả.


Vì trong đoạn code này có lệnh header nên chúng ta phải đặt quá trình xử lý này ở trên form. Nếu không sẽ bị lỗi dữ liệu khi gởi.

Vậy toàn bộ code của trang poll.php này như sau.

C- Xây dựng trang kết quả bình chọn result.php


Ở trang này, ta sẽ lấy giá trị question id của người bình chọn từ trang poll.php và tính toán xem tỷ lệ phần trăm của các câu hỏi ấy như thế nào.


Đầu tiên, ta lấy giá trị từ poll.php?questionid=1. vậy 1 là giá trị ta sẽ có được từ $_GET['questionid']. Tiếp đến ta lại dùng giá trị vừa lấy được này để liệt kê thông tin câu hỏi và tính toán giá trị.


Để tính toán giá trị, ta cần biết tổng số bình chọn trong toàn bộ các câu trả lời hiện nay là bao nhiêu. Bằng câu lệnh SUM ta có thể làm được điều đó.

Câu lệnh này cho phép ta lấy ra tổng số bình chọn trong cơ sở dữ liệu của câu hỏi mà ta truyền vào. Để SUM được acount ta cần phải GROUP(gom nhóm) chúng ta lại theo mã câu hỏi mà chúng ta cần tìm. having là mệnh đề theo sau có ý nghĩa tương đương với where, nó thường được sử dụng theo GROUP.


Như vậy để lấy ra tổng số phiếu bình chọn ta chỉ việc thực thi câu truy vấn này, và lấy tên cột tạm là total.

kế tới, ta lại tính toán số phiếu của từng câu hỏi trong cơ sở dữ liệu, dựa vào tổng số câu hỏi này.


Ví dụ: Tổng số lượt bình chọn là 10

câu 1 là 3

câu 2 là 4

câu 3 là 2

câu 4 là 1

Vậy suy ra phần trăm trên tổng số 10 của 4 câu này được tính bằng cách lấy. số liệu của từng câu chia cho tổng số câu hỏi và nhân cho 100. Ví dụ câu 1 là: (3/10)*100 = 30%


Để làm tròn kết quả ta sử dụng hàm round(). Giúp dữ liệu đưa về sự đồng bộ và rõ ràng nhất.


Vậy code xử lý của chúng ta như sau:

Kết quả khi xuất ra sẽ có hình như sau:


Bài 17: Xây dựng hệ thống bình chọn trên website bằng PHP&MYSQL


Vậy toàn bộ mã nguồn của trang result.php này như sau:

Download toàn bộ mã nguồn của bài này tại đây.


Mọi sự góp ý, cũng như thắc mắc của các bạn dành cho bài viết vui lòng sử dụng tính năng thảo luận tại diễn đàn. Hoặc thông qua việc liên hệ của hệ thống website. Mong sẽ nhận được nhiều ý kiến đóng góp từ các bạn.

 


(Bùi Quốc Huy)
26590
Bạn vẫn chưa hiểu rõ vấn đề ?. Bạn vẫn còn nhiều điều thắc mắc ?. Bạn gặp lỗi khi thực hành mã lệnh trên ?. Hãy tham gia diễn đàn QHOnline.Info để nhận được sự giúp đỡ từ phía cộng đồng nhanh nhất. Đồng thời tải những tài liệu giá trị tại diễn đàn. Việc đăng ký là hoàn toàn miễn phí, hãy đăng ký ngay để chúng tôi giúp đỡ bạn nhé.

Ghi rõ nguồn từ website QHOnline.Info - Khi bạn phát hành lại thông tin từ website này

Phản hồi của bạn Tiếng Anh Telex VNI VIQR





Kenny (12:01 22/01/2010)

tets thử hệ thống comment như thế nào.

Reply

dai ca mu chu (21:25 25/01/2010)

hihi/
Thanks các bác nhiều
có tài liệu bài 19 chưa?
hihi cho em xem với!

Reply

Trần Duy Phương (22:03 10/02/2010)

Mình test bài này ok.
Nhưng có điều là cho xem kết quả thấy chưa hay. Nếu vẽ thêm biểu đồ thì hay hơn.
Nhưng không biết vẽ như thế nào? Tác giả có thể hướng dẫn thêm không?

Reply

nguyễn đăng sơn (17:19 21/09/2010)

mình muốn sang phần nâng cao nhưng click vào chỉ thấy mục lục chứ không thấy hiện bài như phần cơ bản.
ai có thể hướng dẫn cho mình được không ?
thanks !

Reply

laothanhcachmang (22:14 29/09/2010)

thanks pác nhiều

Reply

Nguyễn Văn Huấn (22:19 05/11/2010)

Mình đang lam trang web code php mà mình khong biết code trang quản trị bài viết thế nào cả. Anh chị nào biết thì giúp mình với nhé! Cám ơn nhiều lám!

Reply

tran tieu hue (15:08 24/11/2010)

sao em lam bai 17 binh chon ma no bao loi vay ne anh
Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' in C:AppServwwwgioithieuvieclam esult.php on line 30

Reply

tran tieu hue (15:22 24/11/2010)

cho em hoi em lam bai 17 bi loi nhu vay ne
Warning: Cannot modify header information - headers already sent by (output started at C:AppServwwwgioithieuvieclampoll.php:10) in C:AppServwwwgioithieuvieclampoll.php on line 20

Reply

Nguyễn Hữu Thỏa (20:48 20/12/2010)

Bài bạn làm hay lắm. Nhưng nó có lỗi là có thể bình chọn nhiều lần,mỗi người chỉ được bình chọn một lần thôi. nên dùng session thì hơn

Reply

Bùi văn Thiêm (13:25 27/02/2011)

Hay .Chi tiết và rễ hiểu .Lúc nào mình cần xây dựng ứng dụng thực tế ở trang kết quả mình sẽ thay bằng cái biểu đồ cột nhìn pro hơn

Reply

nguyenhoa (10:07 24/07/2011)

có ai biết cách xuất dữ liệu ra 1 table gồm nhiều fiel ko? chỉ cho em với.thanks

Reply

tang trong nghia (18:49 02/10/2011)

help
ở chổ này ghi như thế nào
$conn=mysql_connect("localhost","root","root") or die("can not connect database");
mysql_select_db("poll_exam",$conn);
if(isset($_POST['ok']))

Reply

Lan Anh (14:18 02/12/2011)

cho em hỏi,sao code giỏ hàng không thấy chạy vậy,bảo giúp em nha, em mới học nên không rõ, cảm ơn anh chị nhìu

Reply

PHP MYSQL Online - Hoc PHP - Dao Tao PHP - Học PHP - CakePHP Framework - Lap Trinh PHP Can Ban - Lap Trinh PHP Nang Cao - PHP Framework - Tài liệu,Thư viện
Copyright 2007-2010 © QHOnline.Info | Powered By QHOnline Version 2.0 - XHTML Valid