Hur kan både post sparas och felmeddelande skrivas ut? Det första som händer när du sparat posten är ju att det görs en redirect. Var redirectar du? Inte samma sida? Om så vore fallet förstår jag att felmeddelandet skrivs ut, eftersom då usr_name är tom när du blivit redirectad...
Tjena
Håller på med en sak för att lägga till användare för ett admingränssnitt.
Jag gör ett par kontroller:
- Att användarnamn endast innehåller "tillåtna tecken".
- Att användarnamn inte redan finns.
- Att båda lösenordsfälten är ifyllda.
- Att de båda fälten stämmer överens.
Nu är det dels ett MS-SQL fel och ett ASP fel, så tar båda sakerna här, då jag inte ville dubbelposta.
Nedanstående kod använder jag vid postning:
Funktioner som inkluderas:
Function FixSQL(str)
str = Replace(str,"'","")
str = Replace(str,";","")
str = Replace(str,"xp_","")
str = Replace(str,"--","")
FixSQL = str
End Function
Function CheckSign(strText)
With New RegExp
.Global = true
.IgnoreCase = true
.Pattern = "[a-z/A-Z/0-9]"
CheckSign = .Test(strText)
End With
End Function
-----------------------------------------
[i]Själva koden då...[/i]
usr_name = FixSQL(Trim(Request.Form("usr_name")))
usr_pass1 = FixSQL(Trim(Request.Form("usr_pass1")))
usr_pass2 = FixSQL(Trim(Request.Form("usr_pass2")))
showMsg = False
If Not CheckSign(usr_name) Or usr_name = "" Then
showMsg = True
sMsg = "Du har angett ett felaktigt användarnamn.<br />Kom ihåg att du bara får använda a-z samt 0-9."
ElseIf usr_pass1 = "" Or usr_pass2 = "" Then
showMsg = True
sMsg = "Fyll i båda lösenordsfälten."
ElseIf usr_pass1 <> usr_pass2 Then
showMsg = True
sMsg = "Lösenordet stämmer inte överens, gå tillbaka och försök igen."
Else
Set rs = conn.Execute( "SELECT adUN " &_
"FROM admin " &_
"WHERE adUN = '" & usr_name & "'")
If Not rs.EOF Then
showMsg = True
sMsg = "Användarnamnet du valde finns redan, <br />gå tillbaka och välj ett annat."
Else
Set rs = conn.Execute("SELECT MAX(ID) FROM admin")
If Not rs.EOF Then max_id = rs(0) + 1 Else max_id = 1 End If
Set rs = Nothing
sSql = "INSERT INTO admin " &_
"(ID, adUN, adPW) " &_
"VALUES " &_
"(" &_
"" & max_id & ", " &_
"'" & usr_name & "', " &_
"'" & usr_pass1 & "'" &_
")"
conn.Execute(sSql)
Response.reDirect("adm_manage_users.asp?do=add_user&layout=admin")
End If
Set rs = Nothing
End If
adm_header("Användarhantering - Lägg till användare - Ett fel uppstod")
%>
<table cellpadding="0" cellspacing="0" style="margin: 3px; background-color: #eee;">
<tr>
<td class="format_cell form_topic five_px_right three_px_left">Ett fel uppstod, orsak:</td>
</tr>
<tr>
<td class="format_cell three_px_left"><%=sMsg%><br /><br />Gå tillbaka och försök igen.</td>
</tr>
</table>
Problemet är att oavsett vad jag skriver för användare, så får jag fel att "felaktigt användarnamn".
Även fast jag får detta meddelande så sparas posten, vilket innebär att antingen så ligger "sMsg" cachad på nått sätt, eller så faller koden in på BÅDE en ElseIf och en Else i samma sats, vilket låter konstigt.
Vad kan vara fel i koden ovan?
Vidare så har jag lite problem med INSERT-frågan.
Det är som så att jag aldrig använt MS-SQL.
Jag vill ju spara anv. namn och lösenord i databasen, men något blir fel. Den säger att jag måst ange ett värde för "ID", även fast jag angett i frågan att jag bara villa "sätta in" adUN samt adPW.
Nu i koden ovan fick jag lösa det på så sätt att jag gick runt problemet genom att ta ut det senaste ID't, lägga till 1 och spara den i INSERT frågan.
Skriver jag frågan som om det vore tex. Access el. MySQL, utan att ange 'ID', så säger den att ID är NULL.
Så, tacksam för all hjälp jag kan få för det här.
Tack på förhand och trevlig fredagskväll!

