Базовый скрипт входа в систему с хранимой процедурой - PullRequest
0 голосов
/ 09 июля 2019

Я работаю над сценарием входа в систему, он работал несколько недель назад, но я не знал, почему он больше не работает. Код кажется мне правильным, по крайней мере, я уверен, что хранимая процедура в порядке (я тестировал ее на MySQL Workbench). Позвольте мне показать вам код:

Я думаю, что проблема здесь:

set objParameter = command.CreateParameter ("@v_count", 2, 2, 40)
       command.Parameters.Append objParameter

но я не могу понять, как ее решить, любой намек был бы очень признателен, tyvm.

Я пытался написать эту строку в коде:

Response.Write ("<p>" & v_count & "</p>")

чтобы посмотреть, какой вывод я получу, и это всегда «7», независимо от учетной записи, которую я использую для входа в систему.

<%
' *** LOGON
'LoginAction = Request.ServerVariables("URL")
'If Request.QueryString<>"" Then LoginAction = LoginAction + "?" + Server.HTMLEncode(Request.QueryString)
session.Contents.RemoveAll()

'Response.Write "HERE"
'Response.End
Dim oggconn
Dim valUsername
Dim valPassword
Private v_count
valUsername=CStr(Request.Form("Login"))
valPassword=CStr(Request.Form("Password"))
v_count=0
if valUsername<>"" then

   Set oggconn = Server.CreateObject("ADODB.Connection")
       oggconn.Open (MM_cn_STRING)

   set command = Server.CreateObject("ADODB.Command")
       command.ActiveConnection = oggconn
       command.CommandText = "get_dati_user"
       command.CommandType = 4
       ' parametri di input
       ' formato: nomecampo, tipo, tipo di parametro, lunghezza, valore
       ' set objParameter = command.CreateParameter ("@username", adVarChar, adParamInput, 30, username)

       ' parametri di output
   set objParameter = command.CreateParameter ("@v_login", 202, 1, 40, valUsername)
       command.Parameters.Append objParameter
   set objParameter = command.CreateParameter ("@v_pass", 202, 1, 40, valPassword)
       command.Parameters.Append objParameter
   set objParameter = command.CreateParameter ("@v_count", 2, 2, 40)
       command.Parameters.Append objParameter
   set objParameter = command.CreateParameter ("@v_ID_Utente", 202, 2, 40)
       command.Parameters.Append objParameter
   set objParameter = command.CreateParameter ("@v_Nome", 202, 2, 40)
       command.Parameters.Append objParameter
   set objParameter = command.CreateParameter ("@v_Cognome", 202, 2, 40)
       command.Parameters.Append objParameter
   set objParameter = command.CreateParameter ("@v_Email", 202, 2, 100)
       command.Parameters.Append objParameter
   set objParameter = command.CreateParameter ("@v_isAdmin", 202, 2, 40)
       command.Parameters.Append objParameter
   set objParameter = command.CreateParameter ("@v_isUser", 202, 2, 40)
       command.Parameters.Append objParameter
   set objParameter = command.CreateParameter ("@v_isSupAdmin", 202, 2, 40)
       command.Parameters.Append objParameter
   set objParameter = command.CreateParameter ("@v_CanView", 202, 2, 40)
       command.Parameters.Append objParameter
   set objParameter = command.CreateParameter ("@v_CanMod", 202, 2, 40)
       command.Parameters.Append objParameter
   set objParameter = command.CreateParameter ("@v_CanConfirm", 202, 2, 40)
       command.Parameters.Append objParameter
   set objParameter = command.CreateParameter ("@v_CanDel", 202, 2, 40)
       command.Parameters.Append objParameter
   set objParameter = command.CreateParameter ("@v_Funzione", 202, 2, 40)
       command.Parameters.Append objParameter
   ' execute per eseguire senza avere un recordset di ritorno
 command.Execute 
 v_count = command.Parameters("@v_count").Value

 ' ricavo l'userID appena inserito

             if v_count <> 0 then
                  Session("Login")=valUsername
                  Session("PWD")=valPassword
                  Session("ID_Utente") = command.Parameters("@v_ID_Utente").Value
                  Session("Nome") = command.Parameters("@v_Nome").Value
                  Session("Cognome") = command.Parameters("@v_Cognome").Value
                  Session("CanView") = command.Parameters("@v_CanView").Value
                  Session("CanMod") = command.Parameters("@v_CanMod").Value
                  Session("CanConfirm") = command.Parameters("@v_CanConfirm").Value
                  Session("isAdmin") = command.Parameters("@v_isAdmin").Value
                  Session("isUser") = command.Parameters("@v_isUser").Value
                  Session("isSupAdmin") = command.Parameters("@v_isSupAdmin").Value
                  Session("Email") = command.Parameters("@v_Email").Value
                  Session("CanDel") = command.Parameters("@v_CanDel").Value
                  Session("Funzione") = command.Parameters("@v_Funzione").Value
                  Session("MM_cn_STRING")=MM_cn_STRING
                  Session("Id_Int")=""
                  Session("Operazione")=""
                  Session("vcount")=v_count
                  oggconn.Close
Response.Write ("<p>" & v_count & "</p>")
Response.Write ("<p>" & valUsername & "</p>")
Response.Write ("<p>" & valPassword & "</p>")
Response.Write ("<p>" & Session("Cognome") & "</p>")
                  ' response.redirect("Main_Menu.asp")
              else
                  oggconn.Close
                  response.redirect("Main_Message.asp?ID=LOGON_FAILED")

             end if
 else

end if
%>

Код должен извлекать запись учетной записи, которую я использую для входа в систему, но я могу войти в систему, используя любую текстовую строку, потому что значение v_count всегда равно 7. Это изменится, если я изменю значение в: ("@ v_count ", 2, 2, 40). Как я могу заставить его выбрать правильный идентификатор пользователя из БД? Это хранимая процедура, я протестировал ее на верстаке, и она, кажется, работает как положено:

CREATE DEFINER=`root`@`localhost` PROCEDURE `get_dati_user`(
IN v_login VARCHAR(45),
IN v_pass VARCHAR(45),
OUT v_count int,
OUT v_ID_Utente VARCHAR(45),
OUT v_Nome VARCHAR(100),
OUT v_Cognome VARCHAR(100),
OUT v_Email VARCHAR(100),
 OUT v_isAdmin VARCHAR(45),
 OUT v_isUser VARCHAR(45),
 OUT v_isSupAdmin VARCHAR(45),
 OUT v_CanView VARCHAR(45),
 OUT v_CanMod VARCHAR(45),
 OUT v_CanConfirm VARCHAR(45),
OUT v_CanDel VARCHAR(45),
OUT v_Funzione VARCHAR(500)
)
BEGIN

select t_utenti.ID_Utente into v_count 
from t_utenti where t_utenti.login=v_login and t_utenti.pwd =v_pass;

 if (v_count >0) THEN
 SELECT
 ID_Utente,
    Email,
    Nome,
    Cognome,
    CanView,
    CanMod,
    CanConfirm,
    isAdmin,
    isUser,
    isSuperAdmin,
    CanDel,
    Funzione
    into
     v_ID_Utente,
 v_Email ,
 v_Nome ,
 v_Cognome ,
 v_CanView ,
 v_CanMod,
 v_CanConfirm,
 v_isAdmin ,
 v_isUser ,
 v_isSupAdmin ,
v_CanDel,
v_Funzione
FROM t_utenti where t_utenti.Login=v_login and t_utenti.pwd =v_pass;

END IF;

end

Спасибо, что прочитали это

...