webForumDet fria alternativet

Ifsatser som strular vid postning.

ASP

3 svar · 452 visningar · startad av MickeA.com

Medlem sedan feb. 20034 441 inlägg
Frågan#1

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!

Medlem sedan juni 200032 967 inlägg
#2

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...

Medlem sedan juni 200032 967 inlägg
#3

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.

Då har du väl inte definierat ID-kolumnen som en räknare? Skall vara av typen int, och sätt på identity.

Medlem sedan feb. 20034 441 inlägg
#4

Tjena
Det första problemet berodde på det du sa, jag körde en redirect till samma script, såg inte att jag skrivit fel url där.
ID var heller inte satt som identity, så nu verkar allt rulla.

Det är lite trixigt när man ska göra massa uppdateringar på sidor som man inte själv gjort.

Tack för hjälpen!

258 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)