09/10/2018, 17:39

Viết Counter bằng ASP

<SPAN class=spnMessageText id=msg>Đầu tiên ta có một file cơ sở dữ liệu bằng Access tên là Counter.mdb với bảng (Table) là Counter và trường (Fields) tên là Count - với kiểu dữ liệu là Long Integer
Và file counter của chúng ta sẽ được trình bày như sau:
Code:
 
&lt;% 
'Khai báo biến sẽ sử dụng 
Dim Count 'Nhận giá trị của số Counter 
Dim strSQL 'Nhận giá trị của câu truy vấn SQL 
Dim Conn 'Kết nối đến cơ sở dữ liệu 
Dim objRS 'Kết nối Recordset 

'Tạo và mở kết nối tới file cơ sở dữ liệu Counter.mdb 
Set Conn = Server.CreateObject("ADODB.Connection") 
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" &amp; Server.MapPath("Counter.mdb") 
</SPAN>

<SPAN class=spnMessageText>strSQL = "SELECT * FROM Counter " 
Set objRS = Conn.Execute(strSQL) 

'Kiểm tra xem trong trường Count có giá trị hay không? 
If NOT objRS.EOF Then 'Tương đương - Nếu chưa đến cuối mẩu tin (mẩu tin không rỗng) thì 

'Gán biến Count bằng với giá trị của mẩu tin trong cơ sở dữ liệu 
Count = objRS("Count") 
'Và sau đó tăng giá trị của biến Count lên thêm 1 đơn vị 
Count = (Count + 1) 

'Rồi cập nhật giá trị mới này vào cơ sở dữ liệu 
'Câu truy vấn SQL để cập nhật giá trị vào CSDL 
strSQL = "UPDATE Counter SET Count = (" &amp; Count &amp; ") " 
'Thực thi câu truy vấn này 
Set objRS = Conn.Execute(strSQL) 

'Ngược lại nếu đã đến cuối mẩu tin trong CSDL, tức là trong CSDL trường Count chưa có giá trị 
ELSE 

'Gán cho biến Count giá trị bắt đầu từ 1 
Count = 1 

'Và cập nhật vào CSDL 
'Câu truy vấn SQL thêm mới dữ liệu vào CSDL 
strSQL = "INSERT INTO Counter (Count) VALUES (" &amp; Count &amp; ") " 

'Thực thi câu truy vấn 
Set objRS = Conn.Execute(strSQL) 

End If 

'Đóng và huỷ kết nối 
objRS.Close 
Set objRS = Nothing 
strSQL = "" 
%&gt;
Giờ các bạn có thể Include file Counter.asp này vào trang nào mà bạn muốn hiển thị bộ đếm và bạn chỉ việc hiển thị giá trị của nó bằng cách
thêm &lt;% =Count%&gt; vào chỗ nào bạn muổn hiển thị. Hoặc có thể bạn cho hiển thị ngay trong file Counter.asp rồi Include cả file Counter.asp này vào nơi cần hiển thị bộ đếm.</SPAN>
newcinc viết 19:46 ngày 09/10/2018
Hình như bạn viết hơi bị dài:
Chỉ cần thế này là đủ:
DBase: File: counters.mdb
Table: Counters(cval)
----------------------------
'KHai báo connection String đến database
cnDrv="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &server.MapPath("d16092002/Counters.mdb") &";"

'Tao biến Recordset
set rs=Server.CreateObject("ADODB.Recordset")

'Query tăng Counter
StrSQL="UPDATE Counters SET cval=cval+1"

'Thực thi query
rs.Open StrSQL, cnDrv

Sau khi tăng Counter, chúng ta sẽ hiện nó ra:
StrSQL="SELECT cval FROM Counters;"
rs.Open StrSQL, cnDrv
If not rs.EOF and not rs.BOF Then Response.Write(rs("cval")) End If
rs.Close
set rs=nothing

------------------>
Vấn đề không phải là ở chỗ tăng counter, mà ở chỗ counter đặt ở đâu,...
Nếu là counter số người truy cập, đặt trong hàm Application_OnStart() của file global.asa
Nếu là các counter khác, đặt chỗ cần đặt.

Cái mình muốn đề cập là các bạn thường không để ý câu Query: ....set cval=cval+1 vì nghĩ nó không chạy.........

Một vài gòp ý, mong được trao đổi thêm với các bạn vể ASP
White_Rose viết 19:49 ngày 09/10/2018
Cái này là Hit Point (đếm số lần click) chứ có phải là Counter (đếm số lượt truy cập) đâu
aspnet viết 19:49 ngày 09/10/2018
Sorry, có lẽ mình hơi nhầm một chút ... Cái này lần trước mình viết lấy cả IP để đếm mỗi lần khách ghé từng site
aspnet viết 19:40 ngày 09/10/2018
HIc, sao diễn đàn này cái phần post bài sao chuối quá, hic, khó chịu thật, tự dưng nó cứ thêm mấy cái tag html vào là sao nhỉ?
newcinc viết 19:47 ngày 09/10/2018
Bài viết được gửi bởi White_Rose
Cái này là Hit Point (đếm số lần click) chứ có phải là Counter (đếm số lượt truy cập) đâu
Bạn hiểu lầm rồi...
Đoạn code đó chỉ là cập nhật và hiển thị một counter nào đó....
Còn chuyện Hit Couter hay Đếm số người truy cập thì đều sử dụng cùng đoạn code đó được, vấn đề là đặt nó ở đâu thôi.

Hit counter thì đặt trong trang muốn đếm

Đếm người truy cập thì đặt trong global.asa

Mình đã nói rồi mà...
White_Rose viết 19:40 ngày 09/10/2018
Nếu đếm số người theo mình nên sử dụng thêm một trường lưu IP thì hơn vì nhiều host không hỗ trợ global.asa.
DTB viết 19:44 ngày 09/10/2018
đúng thế.
Và trong trường hợp đó đoạn code của NewCinC tuy ngắn nhưng không xài được.
Xài đoạn code của Aspnet thì có đủ cả Update lẫn Insert. Nhưng chắc phải chỉnh lại chút đỉnh để xài lâu dài, cho nhiều tình huống khác nhau.
newcinc viết 19:48 ngày 09/10/2018
Trời....
DTB là ai mà kết luận hàm hồ dzậy ta?
Tớ chỉ cho bạn một cách: copy đoạn code của tớ về rồi thử chạy xem nó có chạy không?
Còn counter thì chỉ cần Select ra và Update thôi. Counter mà cho Insert thì ........ để làm số liệu giả à.......
Tớ đã làm đoạn code đó cho các site sau:
www.webvieclam.com
www.matbao.com
www.daigiatrade.com
www.tandonghiepiz.com
www.kinhdofood.com
....
sao không có trang nào không chạy ngoại trừ DTB vậy nhỉ????????
aspnet viết 19:51 ngày 09/10/2018
Chắc chắn nhất thì phải có INSERT nữa, phải có trường hợp khi CSDL mới bắt đầu. chưa có dứ liệu chứ.
Bài liên quan
0