English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

語言為ASP,由於論壇有單一使用者,卻能連續投票無數次的缺陷
,打算從IP著手防止灌票,所以想出了這寫法:

Set conn = Server.CreateObject("ADODB.Connection")

conn.open "Provider=Microsoft.jet.OLEDB.4.0;Data Source=" & Server.

MapPath("DATA/main.mdb")

sql = "select * from online where online_ip ='" & ip & "'"

ip=Request.ServerVariables("REMOTE_ADDR")

SET rs = Server.CreateObject("ADODB.Recordset")

rs.Open Sql,conn,1,3

if ip=rs("online_ip") then

founderr=true

errmsg=errmsg+"
"+"

  • 請勿重複投票!"
    end if

    資料庫路徑沒問題
    但最後出現的錯誤訊息為"錯誤 '80020009' 發生例外狀況 savevote.asp, 列17 "也就是 if ip=rs("online_ip") then 這一列

    請問有何解呢?
    還是有更好的寫法??

    2007-02-05 21:44:00 · 1 個解答 · 發問者 ? 2 in 電腦與網際網路 程式設計

  • 1 個解答

    嗨。你的 if ip=rs("online_ip") then 這一列從測試觀點會有幾種例外:

    1. Recordset rs 的 online_ip 回傳值可能不只一個,因為你的 sql 並無限定單一紀錄回傳。可以用

    sql = "select distinct * from online where online_ip ='" & ip & "'"

    2. rs("online_ip") 的型別是什麼?電腦是不是還沒有跑到操作子就因為例外跳出?

    3. rs("online_ip") 回傳會不會沒有值?

    建議:

    1. online 這個 table 應該加上 time_stamp 紀錄,然後把 time_stamp 紀錄也放入判斷。意思是允許管理員設定多長時間從一台相同電腦不能重複投票。

    2. 根據 ip 屏閉投票有其限制,例如使用者在大賣場、網咖等等公開電腦登入論壇投票忘記登出。

    2007-02-10 21:23:40 · answer #1 · answered by mh 7 · 0 0

    fedest.com, questions and answers