Я работаю над сценарием входа в систему, он работал несколько недель назад, но я не знал, почему он больше не работает. Код кажется мне правильным, по крайней мере, я уверен, что хранимая процедура в порядке (я тестировал ее на 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
Спасибо, что прочитали это