第二次使用时,ASP记录集字段为空

时间:2014-04-28 12:02:09

标签: vbscript asp-classic recordset

有谁知道为什么这句话

Response.write(rs.Fields.Item("password")&" ; "&rs.Fields.Item("password"))

这样做:

myPass ; 

这很奇怪,我从今天早上起就在寻找解决方案。它让我发疯,因为这个结果就是这个代码:

if rs("password") = rs("password") then

是假的!

编辑:

经过其他测试后,我又做了一个发现:

Response.write(rs.Fields.Item("name")&" ; "&rs.Fields.Item("name"))

做:

amdin ; admin

如果我通过他的序数索引更改“密码”,它会执行相同的显示:

myPass ; 

编辑:相关代码:

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost; DATABASE=crm_sandbox; UID=root;PASSWORD=tahina; OPTION=3" 

if Request.Form("login") <> "" or Request.Form("mdp") <> "" or Request.Form("redirect") <> "" then
    Response.write(Request.Form("mdp")&" ; "&Request.Form("login")&" ; "&Request.Form("redirect")&"<br>")
    if Request.Form("login") = "" then
        rapport = "<p style='color: red; font-weight: bold;'>Erreur : Veuillez remplir votre nom d'utilisateur.</p>"
    elseif Request.Form("mdp") = "" then
        rapport = "<p style='color: red; font-weight: bold;'>Erreur : Veuillez remplir votre mot de passe.</p>"
    elseif Request.Form("login") <> "" and Request.Form("mdp") <> "" then
        sql = "SELECT id, mdp, nom, initiales, couleur, droit FROM connection WHERE nom='"&Request.Form("login")&"';"
        Set rs = Server.CreateObject("ADODB.Recordset")
        rs.open sql, conn

        if rs.eof then
            rapport = "<p style='color: red; font-weight: bold;'>Erreur : Nom d'utilisateur inconnu.</p>"
        elseif rs("mdp") <> Request.Form("mdp") then
            rapport = "<p style='color: red; font-weight: bold;'>Erreur : Mot de passe incorect.</p>"
        elseif Request.Form("mdp") = rs("mdp") then
            Session("util_id") = rs("id")
            Session("util_nom") = rs("nom")
            Session("util_couleur") = rs("couleur")
            Session("util_initiales") = rs("initiales")
            Session("util_droit") = rs("droit")
            Session.Timeout = 660 'On créer une session de 11 heures
            rapport = "<p style='color: green; font-weight: bold;'>Vous êtes à présent connecté !</p>"

            if Request.Form("redirect") <> "" then
                rapport = rapport&"<p>Vous allez être rédirigé vers votre page dans 3 secondes</p>"
            end if
        end if
    end if
end if

2 个答案:

答案 0 :(得分:1)

我之前确实遇到过此问题,当页面首次运行时,记录集的第一个值(值)返回一个值,但在第二次读取记录集(值)时返回空值。或者说你当前的设置正是如此。

这实际上并不是一个众所周知的问题,但仍有一些支持论坛和问题的答案也是如此。

Example Page 1
Example Page 2

有一些可能导致此问题的理论,例如,在表列数据类型说明符中没有正确的数据类型。记录集对象中的一个小故障,它只返回一次值,因此必须存储在一个对象中。

因为它是返回Null

的同一变量的第二次调用

E.g。

'  [Good Read-out] - object empties itself
if rs( "password")_
= rs("password") then
' [Bad Read-out] - object no longer contains values. 

这不是一个全面的陈述,这是一个异常,一个小故障,并没有一个坚实的理由支持它除了机器中的幽灵以外的最小流行率。

解决此问题:

仅从当前记录 ONE 时间读出变量。这将不允许该对象清空,因此您可以在以后的代码中比较您的检查,而不会有任何麻烦。

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost; DATABASE=crm_sandbox; UID=root;PASSWORD=tahina; OPTION=3" 

if Request.Form("login") <> "" or Request.Form("mdp") <> "" or Request.Form("redirect") <> "" then
    Response.write(Request.Form("mdp")&" ; "&Request.Form("login")&" ; "&Request.Form("redirect")&"<br>")
    if Request.Form("login") = "" then
        rapport = "<p style='color: red; font-weight: bold;'>Erreur : Veuillez remplir votre nom d'utilisateur.</p>"
    elseif Request.Form("mdp") = "" then
        rapport = "<p style='color: red; font-weight: bold;'>Erreur : Veuillez remplir votre mot de passe.</p>"
    elseif Request.Form("login") <> "" and Request.Form("mdp") <> "" then
        sql = "SELECT id, mdp, nom, initiales, couleur, droit FROM connection WHERE nom='"&Request.Form("login")&"';"
        Set rs = Server.CreateObject("ADODB.Recordset")
        rs.open sql, conn



        '------------------------------------------------
        'Place record set values in variables first. 
        Dim rMDP, rID, rNom, rCouleur, rInit, rDroit
        rMDP = rs("mdp")
        rID = rs("id")
        rNom = rs("nom")
        rCouleur = rs("couleur")
        rInit = rs("initiales")
        rDroit = rs("droit")
         '------------------------------------------------



        if rs.eof then
            rapport = "<p style='color: red; font-weight: bold;'>Erreur : Nom d'utilisateur inconnu.</p>"
        elseif rMDP <> Request.Form("mdp") then
            rapport = "<p style='color: red; font-weight: bold;'>Erreur : Mot de passe incorect.</p>"
        elseif Request.Form("mdp") = rMDP then
            Session("util_id") = rID
            Session("util_nom") = rNom
            Session("util_couleur") = rCouleur
            Session("util_initiales") = rInit
            Session("util_droit") = rDroit
            Session.Timeout = 660 'On créer une session de 11 heures
            rapport = "<p style='color: green; font-weight: bold;'>Vous êtes à présent connecté !</p>"

            if Request.Form("redirect") <> "" then
                rapport = rapport&"<p>Vous allez être rédirigé vers votre page dans 3 secondes</p>"
            end if
        end if
    end if
end if

答案 1 :(得分:0)

始终检索记录集值并将它们放在变量中,然后对其进行操作。我在大约15年前开始使用经典ASP时的第一天就学会了rs值的一些奇怪问题。