ตัวอย่างการผลิตทางสถิติที่สามารถนับจำนวนผู้เยี่ยมชมและบันทึกจำนวนการเข้าชม, IP และเวลา
ฉันสร้างเว็บไซต์ www.zydn.net แน่นอนว่าฉันก็เหมือนคนอื่น ๆ เช่นกัน ฉันเห็นว่าเคาน์เตอร์พลิกกลับทุกวันและฉันรู้สึกมีความสุขมาก แต่แล้วฉันก็คิดว่าใครก็ตามที่อ่าน มันเหรอ? เว็บไซต์ของฉัน? พวกเขาเป็นเพื่อนใหม่หรือเพื่อนเก่า? ไม่รู้ว่ามากี่ครั้งแล้วอยากนับให้หมดเลยสมัครขอสถิติฟรีแต่ได้ลองเลข N ติดกันก็ยังไม่พอใจ อนิจจา ดูเหมือนมีทางเดียวเท่านั้น อาหารและเสื้อผ้าก็พอทำเองได้ แค่ทำมันแห้ง ระดับเหม็น หวังว่าผู้เชี่ยวชาญจะหัวเราะเยาะ และฉันจะไม่ขอคำแนะนำ
ฉันใช้ไลบรารี ACCESS เป็นตัวอย่าง ที่จริงแล้วหากต้องการใช้ไลบรารี SQL SERVER คุณจะต้องเปลี่ยนคำสั่งของไลบรารีลิงก์เท่านั้น
โครงสร้างห้องสมุดมีดังนี้
ชื่อไฟล์ไลบรารี: CONT.ASP เดิมทีคือ CONT.MDB แต่หลังจากสร้างขึ้นแล้ว ส่วนขยายก็เปลี่ยนไปเป็น ASP เพื่อป้องกันไม่ให้ดาวน์โหลดไลบรารี
ชื่อตาราง: แท็บ
คำอธิบายประเภทข้อมูลชื่อฟิลด์
ID กำหนดหมายเลขผู้เยี่ยมชมโดยอัตโนมัติ
ข้อความ IP ใช้เพื่อบันทึก IP ของผู้เข้าชม
วันที่และเวลา dat1 ใช้เพื่อบันทึกครั้งสุดท้ายที่ผู้เยี่ยมชมเยี่ยมชม
วันที่และเวลาที่ใช้ในการบันทึกเวลาที่ผู้เยี่ยมชมครั้งแรก
หมายเลข CS เป็นจำนวนเต็มที่ใช้บันทึกจำนวนการเข้าชมของผู้เยี่ยมชม
โปรแกรมนี้เรียบง่ายมาก โดยมีเพียงสองไฟล์เท่านั้น dispcont.asp ใช้เพื่อแสดงผลทางสถิติ และ contpage.asp ใช้สำหรับข้อมูลทางสถิติ
มาดูสถิติของ CONTPAGE.ASP กันก่อน โดยมีโค้ดดังนี้:
-
ตั้งค่า Conn=Server.CreateObject(ADODB.Connection)
Connstr=DBQ=+server.mappath(cont.asp)+;DefaultDir=;DRIVER={ไดรเวอร์ Microsoft Access (*.mdb)};
Conn.Open connstr '*****คำสั่งข้างต้นใช้เพื่อเชื่อมต่อกับไลบรารี cont.asp คือชื่อไฟล์ไลบรารี
keren=request.cookies(keren) 'อ่านคุกกี้ ชื่อของคุกกี้คือ: keren 555 - E ของ Ah Yu เป็นนักวรรณกรรมที่มีกลิ่นเหม็น และเขารู้วิธีใช้พินอินเท่านั้น
ถ้า keren= แล้ว 'ตรวจสอบว่า cookes ว่างเปล่าหรือไม่ ถ้าว่างเปล่า แสดงว่าเป็นเพื่อนใหม่ ไม่เช่นนั้นจะเป็นเพื่อนเก่า
sql=SELECT * FROM แท็บโดยที่ id=-1
ตั้งค่า rs=server.createobject (ADODB.Recordset)
rs.เปิด sql,conn, 1, 3
rs.addnew 'หากเป็นผู้เยี่ยมชมใหม่ ให้เพิ่มบันทึกใหม่ในไลบรารี
rs(cs)=1 'จำจำนวนการเข้าชมเป็น 1
rs(ip)=request.servervariables(remote_addr) 'จำ IP,
rs(dat)=now 'จำวันที่และเวลาปัจจุบันไว้
rs(dat1)=date 'จำวันที่ปัจจุบันและใช้เป็นวันที่เข้าชมครั้งแรกในภายหลัง
response.cookies(keren)=rs(id) 'เขียนคุกกี้ เนื้อหาเหมือนกับ ID'
response.cookies(keren).expires=date+365 'กำหนดวันที่ใช้งานได้ของคุกกี้โดยเริ่มจากตอนนี้ 365 วัน
'ข้างต้นคือวิธีจัดการกับเพื่อนใหม่' เราควรทำอย่างไรกับเพื่อนเก่า? ดูด้านล่าง:
sql=SELECT * FROM tab โดยที่ id=&keren 'ไปที่ฐานข้อมูลเพื่อค้นหาบันทึกของเพื่อนเก่าของเรา
ตั้งค่า rs=server.createobject (ADODB.Recordset)
rs.เปิด sql,conn, 1, 3
rs(cs)=rs(cs)+1 'โอเค เจอแล้ว เพิ่ม 1 ให้กับจำนวนการเข้าชม
rs(ip)=request.servervariables(remote_addr) 'ดู IP ของเขาแล้วจดบันทึกไว้
rs(dat)=now 'จำเวลาปัจจุบัน ซึ่งเป็นเวลาที่เข้าชมครั้งล่าสุด
response.cookies(keren)=rs(id) 'เขียนคุกกี้อีกครั้ง ฉันไม่รู้ว่าประโยคนี้ซ้ำซ้อนหรือเปล่า ฉันยังไม่ได้ลองเลย
response.cookies(keren).expires=date+365 'ตั้งเวลาหมดอายุของคุกกี้ เพื่อที่ฉันจะไม่จดจำมันเมื่อครบหนึ่งปี
สิ้นสุดถ้า
rs.update 'ฉันได้เขียนทุกอย่างที่ควรสังเกตแล้ว มาอัปเดตไลบรารีกันดีกว่า
rs.close 'ปิดวัตถุชุดระเบียน
set conn=nothing 'ปล่อย conn ฉันยังคิดว่าควรเปิดและปิดการเชื่อมต่อเมื่อใดก็ได้ ฉันคิดว่ามันไม่พึงปรารถนาที่สุดที่จะใส่ไว้ใน SESSION 4
-
เอาล่ะ บันทึกพร้อมแล้ว มีโค้ดมากกว่า 20 บรรทัด เป็นโปรแกรมเล็กๆ ที่เรียบง่าย แต่ผมคิดว่าผู้เชี่ยวชาญต้องมีลูกเล่นที่ชาญฉลาด อย่าลืมสอน Ayu ด้วย
เขียนโปรแกรมแล้วต้องทำอย่างไร? ง่ายมาก เพียงค้นหาสถานที่ในหน้าแรกและเพิ่มโค้ดบรรทัดนี้: <img src=contpage.asp width=0 height=0>
ขั้นต่อไปคือโชว์สถิติมีคนเก่งกว่าอายูอีกเยอะแต่ก็ยังอยากอวดความอัปลักษณ์ของตัวเอง
ชื่อไฟล์: dispcont.asp โปรดดูโค้ด:
-
ตั้งค่า Conn=Server.CreateObject(ADODB.Connection)
Connstr=DBQ=+server.mappath(cont.asp)+;DefaultDir=;DRIVER={ไดรเวอร์ Microsoft Access (*.mdb)};
Conn.Open connstr '*****คำสั่งข้างต้นใช้เพื่อเชื่อมต่อกับไลบรารี cont.asp คือชื่อไฟล์ไลบรารี
page3=คำขอ(เพจ)
ถ้า page3= แล้วก็ page3=session(contpag) 'จำนวนหน้า, หน้าปัจจุบัน'
ถ้า page3= ดังนั้น page3=1
pa=คำขอ(pa)
ถ้า pa= แล้วก็ pa=session(contpa) 'แสดงหมายเลขต่อหน้า
if pa= then pa=15 'ตามค่าเริ่มต้น แต่ละหน้าจะแสดง 15 รายการ ซึ่งสามารถเปลี่ยนแปลงได้ตามใจชอบ
เซสชั่น(contpag)=page3
เซสชั่น(contpa)=pa
หน้า=pa 'หมายเลขที่แสดงต่อหน้า****************** โปรแกรมข้างต้นถูกนำมาใช้เพื่อใช้ฟังก์ชันเพจ
SQL=SELECT * FROM เรียงลำดับแท็บตาม -dat,-id
หรี่แสง
ตั้งค่า rs=Server.CreateObject(ADODB.RecordSet)
rs.เปิด sql,conn,1,1
ซีเอสไอ=0
ซีเอส1=0
ซีเอส100=0
csdat1=0
ทำในขณะที่ไม่ใช่ rs.eof
csi=csi+rs(cs)
ถ้า rs(cs)=1 แล้ว cs1=cs1+1
ถ้า rs(cs)>=100 ดังนั้น cs100+1
ถ้า datevalue(rs(dat))=date แล้ว
csdat1=csdat1+1
สิ้นสุดถ้า
rs.movenext
วนซ้ำ
ZS=RS.RECORDCOUNT
'************************************************ * ***8โปรแกรมต่อไปนี้ใช้สำหรับการแสดงเพจ
-
<หัว>
<title>สถิติคอมพิวเตอร์ยอดเยี่ยม</title>
</หัว>
<body style=font-size: 9pt bgcolor=#D8EDF8>
มีเรคคอร์ด <%Response.Write zs%> ทั้งหมด และเพจปัจจุบันคือ <%Response.Write page3%> แต่ละเพจจะแสดง: [<a href=dispcont.asp?pag=<%=page3%> &pa=15>15 ] รายการ [<a href=dispcont.asp?pag=<%=page3%>&pa=20>20] รายการ [<a href=dispcont.asp?pag=<%=page3%>&pa=30>30] รายการ [<a href=dispcont.asp?pag=<%=page3%>&pa=40>40] รายการ
[<a href=dispcont.asp>รีเฟรช]
<div align=ซ้าย>
<เส้นขอบตาราง=0 cellpadding=0 style=font-size: 9pt>
<tr><td>หมายเลขหน้า</td><%page2=1
สำหรับหน้าขั้นตอน i=1 ถึง zs
ถ้า page3=cstr(page2) แล้ว
%><td >[<%Response.เขียนหน้า2%>]</td>
<% อื่น ๆ %>
<td ><a href=dispcont.asp?pag=<%Response.Write page2%>>[<%Response.Write page2%>]</td>
<% สิ้นสุดถ้า
หน้า2=หน้า2+1
ต่อไป
sn=pages*(page3-1) 'หมายเลขบันทึกปัจจุบัน=จำนวนที่แสดงต่อหน้า*จำนวนหน้า-จำนวนที่แสดงต่อหน้า
ถ้า sn>zs แล้ว sn=0
rs.move sn,1
'************************************ ย่อหน้าข้างต้นใช้สำหรับเพจ
%> </tr></table>
</div> <table style=font-size: 9pt width=100% bordercolorlight=#000000 border=1 bordercolordark=#FFFFFF bgcolor=#A4D1E8 cellspacing=0 cellpadding=3>
<tr><td>หมายเลข</td><td>หน้าแรกที่เข้าชมล่าสุด</td><td>IP ที่เข้าชมล่าสุด</td><td>จำนวนหน้าแรก</td><td>วันที่เข้าชมครั้งแรก</td > </tr><%
สำหรับ i=1 ไปยังเพจ
การตอบสนองเขียน </tr>
การตอบสนองเขียน <td>&rs(ID)&</td>
Response.เขียน <td>&rs(dat)&</td>
การตอบสนองเขียน <td>&rs(IP)&</td>
การตอบสนองเขียน <td>&rs(CS)&</td>
การตอบสนองเขียน <td>&rs(DAT1)& </td>
การตอบสนองเขียน </tr>
rs.movenext
ถ้า rs.eof ให้ออกเพื่อ
ต่อไป
RS.ปิด
-
<tr><td>ทั้งหมด<%=zs%></td><td>จำนวนการเข้าชมมากกว่า 100 ครั้ง<%=cs100%> </td><td>จำนวนการเข้าชมคือ 1:< % =cs1%></td><td>จำนวนการเข้าชมทั้งหมด<%=csi%></td><td>การเข้าชมวันนี้: <%=csdat1%></td></tr>
</ตาราง>
'****************************** ด้านบนนี้เป็นการแสดงเลขหน้าที่สมบูรณ์และสามารถใช้งานได้หลังจากคัดลอกทั้งหมดแล้ว กรณีที่ไม่มีบันทึกเดียวจะไม่ได้รับการพิจารณา