Jag hittar ingen <body> tag i någon av era koder. Fast det spelar nog ingen roll, ville bara påpeka det ;).
Microsoft VBScript compilation error '800a0400'
36 svar · 755 visningar · startad av plelkes · sida 2 av 2
- Som jag skrev tidigare, så verkar det vara något fel på ditt inloggningssätt.
- Ingen som har lösenordet Request.Form("pword").
Testa att lägga till
Response.Write Session("inloggad") & "<br>" [blue]'Längst upp. Innan If Not Session("inloggad")...[/blue]
Response.Write strSQL & "<br>" [blue] 'Efter första Set objRS = objConn.Execute (strSQL, , 1)[/blue]
Stämmer det som skrivs ut? För att det ska fungera ska det stå först
Ja
och sedan
SELECT * FROM admin WHERE password = 'ett lösenord i admintabellen'
<body>-taggen har väl försvunnit någonstans på vägen ;)
Med andra ord skickas det ingenting från ditt formulär. Använder du
<form action="[i]sidan.asp[/i]" method="[b]post[/b]">
Med andra ord så bör det vara fel på:
strSQL ="SELECT * FROM admin WHERE password = '" & Request.Form("pword")&"'"
Eller?
Det konstiga är att igår fungerade allt!!!!!!!!
så här ser koden på inlogg-sidan
<HTML>
<HEAD>
<TITLE>Inloggning som administratör</TITLE>
<BODY>
<FORM ACTION="logg.asp" METHOD="post">
<TABLE WIDTH="500" BORDER="3" CELLSPACING="5" CELLPADDING="5">
<TR>
<TD>Användarnamn:</TD>
<TD><INPUT NAME="Anamn" TYPE="text" SIZE="75"></TD>
</TR>
<TR>
<TD>Lösenord</TD>
<TD><INPUT NAME="pword" TYPE="password" SIZE="75"></TD>
</TR><TR ALIGN="RIGHT" VALIGN="MIDDLE"><TD><INPUT NAME="in" TYPE="submit" VALUE="stig in"></TD></TR>
</TABLE>
</FORM>
</BODY>
</HTML>
och så här på logg.asp
<%
if Request.Form("in") = "stig in" Then 'vill användaren logga in?
Set gbok = Server.CreateObject( "Adodb.Connection" )
gbok.Provider = "Microsoft.Jet.OLEDB.4.0"
MdbFilePath = Server.MapPath("\plelkes\db\guests.mdb")
gbok.ConnectionString = "Data Source='" & MdbFilePath & "'"
gbok.open
strUser = Request.Form("Anamn")
strPasw = Request.Form("pword")
strSQL1 = "SELECT* FROM admin WHERE anvnamn='"& strUser &"'"
strSQL2 ="SELECT* FROM admin WHERE password ='" & strPasw & "'"
Set rs = gbok.Execute( strSQL1)
IF rs.EOF Then
Response.Redirect("fel_anv.html")
Else
Set rs = gbok.Execute( strSQL2)
IF rs.EOF Then
Response.Redirect("fel_passw.html")
End if
Session("inloggad") = "Ja"
gbok.Close
Set gbok = Nothing
Response.Redirect "redigera.asp"
End If
End If
%>
Formulärdatat försvinner ju, när du kör Response.Redirect "redigera.asp", som jag antar är sidan som du har problem med. Gör istället såhär att du skickar med ett UserID som querystring i din response.redirect "redigera.asp?UserID=..." och sedan i redigera.asp ändrar du SQL-frågan med Request.Form("pword") till typ Request.QueryString("UserID") eller något sådant. Skicka inga lösenord bara ;)
Nej det vet jag att man inte skall skicka lösenord med querystring
Kan jag lösa på ngt annat sätt? Typ att jag ej redirectar, dvs mellanlandar ej på en asp sida?
Och varför funkade allt igår?
Om du kör såhär då? (Ändrar lite, som Engine^ gjorde förrut ;))
<%
If Request.Form("in") = "stig in" Then 'vill användaren logga in?
Set objCon = Server.CreateObject("ADODB.Connection")
objCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("\plelkes\db\guests.mdb")
strUser = Request.Form("Anamn")
strPasw = Request.Form("pword")
strSQL = "SELECT * FROM admin WHERE anvnamn = '" & strUser & "'"
Set objAnv = objCon.Execute(strSQL)
strSQL = "SELECT * FROM admin WHERE password = '" & strPasw & "'"
Set objPass = objCon.Execute(strSQL)
If objAnv.EOF Then
Response.Reditect("fel_anv.asp")
End If
If objPass.EOF Then
Response.Redirect("fel_pass.asp")
End If
If NOT objPass.EOF AND NOT objAnv.EOF Then
Session("inloggad") = "Ja"
Set objPass = Nothing
Set objAnv = Nothing
strSQL ="SELECT * FROM admin WHERE password = '" & Request.Form("pword") & "'"
Set objRS = objCon.Execute(strSQL, , 1)
While Not objRS.EOF
Response.Write "<p align=center><font size=7><b><i><font color=#FFCC33 SIZE=""+3"">"
Response.Write "Nu kan du " & objRS("Fnamn")
Response.Write "redigera gästboken!"
objRS.MoveNext
Wend
Set objRS = Nothing
%>
<html>
<head>
<title>Redigera</title>
</head>
<%
Session.LCID = 1053
strSQL = "SELECT * FROM guestbook ORDER by ID DESC"
Set objRS = objCon.Execute(strSQL, , 1)
Response.Write "<FORM ACTION=""radera.asp"" METHOD=""post""></FORM>"
Response.Write "<TABLE WIDTH=""800"" BORDER=""1"" ALIGN=""CENTER"" CELLPADDING=""5"" CELLSPACING=""5"">"
Do While Not objRS.EOF
Response.Write "<TR> <TD WIDTH=""149""><H3><B><U>"
Response.Write objRS("Namn")
Response.Write "</U></B></H3></TD>"
Response.Write "<TD WIDTH=""556"">"
Response.Write objRS("Message")
Response.Write "</TD><TD WIDTH=""37"">"
Response.Write "<INPUT NAME=""delete"" TYPE=""checkbox"" VALUE="""& objRS("ID") &""">"
Response.Write "</TD></TR>"
Response.Write "<TR ALIGN=""RIGHT"" VALIGN=""MIDDLE"">"
Response.Write "<TD COLSPAN"="3"">"
Response.Write "<INPUT TYPE=""submit"" VALUE=""Radera markerade"">"
Response.Write "</TD></TR>"
objRS.MoveNext
Loop
Response.Write "</TABLE></FORM>"
Set objRS = Nothing
objCon.Close
Set objCon = Nothing
End If
End If
%>
</body>
</html>
På så sätt är det ju inga "mellanlandningar" i vägen. :)
Ja, du kan baka ihop logg.asp och redigera.asp på samma sida det du behöver tänka på är att kontrollera rättigheterna, så att ingen kan redigera av "misstag". Det blir ett antal extra if-satser.
Du måste iofs inte baka ihop sidorna. Det går självklart att lösa det som du har det nu. Det är bara en fråga om hur du ska skicka data mellan sidorna; sessionsvariabler, querystrings eller annat.
red. Eller om Sebbe just föreslog ;)
Det är inte så lätt att laborera på egenhand = förstod inte att med redirect så försvinner data...
Sebbe:
Du har väl bakat ihop defaul.asp(med formulär), och redigera.asp till ett?
Engine^: och Eller andra
Om jag bakar ihop defaul.asp(med formulär) och logg.asp tex genom att ta bort Form action= "logg.asp". Detta borde väl funka? För då stannar jag ju på samma sida. Och sedan redirecta till redigera.asp. tar jag då med mig password från formuläret?
Det går självklart att lösa det som du har det nu. Det är bara en fråga om hur du ska skicka data mellan sidorna; sessionsvariabler, querystrings eller annat.
Kan ni ge lite exempel?
Jo, jag har bakat ihop båda filerna, så att ingen information försvinner med Redirecten. :)
Du tar inte bort formuläret utan du ger det bara lite andra parametrar, t.ex.:
<form method="post" action="default.asp?action=logg">
Så, nu har du en sida som använder Request.Form och QueryString för att komma åt data.
[blue]'Exempel...[/blue]
If Request.QueryString("action") = "logg" Then
If Session("inloggad") = "Ja" Then
Response.Write "Du är redan inloggad..."
Else
[blue]' Här lägger du koden för inloggning...[/blue]
End If
End If
Nu funkar som jag vill, tack för all hjälp och tålamod från webforum!!
Fast klart nya frågor dyker det ju upp hela tiden :r
Om ja ghar fattat rätt så i nedanstående koden
<%
dim minCon 'Connection
dim rsGbok 'recordsetten för nya inlägg
dim strSQL
Set minCon = Server.CreateObject("ADODB.Connection")
set rsGbok = Server.CreateObject("ADODB.Recordset")
minCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("\plelkes\db\guests.mdb")
strSQL =" SELECT * FROM guestbook ORDER by ID DESC"
rsGbok.Open strSQL, minCon, 3, 3
%>
betyder de två 3 skydd för att inte det sker samtidigt "saker" med databasen...
I fallet som Sebbe rekomenderade
<%Set objCon = Server.CreateObject("ADODB.Connection")
objCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("\plelkes\db\guests.mdb")
strUser = Request.Form("Anamn")
strPasw = Request.Form("pword")
strSQL = "SELECT * FROM admin WHERE anvnamn = '" & strUser & "'"
Set objAnv = objCon.Execute(strSQL)
strSQL = "SELECT * FROM admin WHERE password = '" & strPasw & "'"
Set objPass = objCon.Execute(strSQL)
%>
Ser inte jag ngt sån´t skydd.
- behövs inte det i denna konstruktion
- eller är jag blind som inte ser detta?
Eftersom jag inte använder ett recordset vet jag inte om man kan få något sådant skydd. Dock har jag sett många som använder sig av
objCon.Execute(strSQL),,128
Dock vet jag inte vad det gör, men jag antar att det är bra att ha. ;)
128 = adExecuteNoRecords
Det innebär att inga poster ska returneras av frågan, dvs INSERT, UPDATE, DELETE osv..
Jag antar att om man försöker med Set rs = objConn.Execute("SELECT * FROM tabell", , 128), så får man ett tomt recordset.
Engine^ skrev:
128 = adExecuteNoRecords
Det innebär att inga poster ska returneras av frågan, dvs INSERT, UPDATE, DELETE osv..
Jag antar att om man försöker med Set rs = objConn.Execute("SELECT * FROM tabell", , 128), så får man ett tomt recordset.
Aha, det var bra att veta! :birp (Alltså, du ska mao INTE köra med det. ;))