webForumDet fria alternativet

Microsoft VBScript compilation error '800a0400'

36 svar · 755 visningar · startad av plelkes · sida 2 av 2

jstalMedlem sedan apr. 200315 inlägg
#21

Jag hittar ingen <body> tag i någon av era koder. Fast det spelar nog ingen roll, ville bara påpeka det ;).

Engine^Medlem sedan dec. 20002 861 inlägg
#22
  1. Som jag skrev tidigare, så verkar det vara något fel på ditt inloggningssätt.
  2. 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 ;)

plelkesMedlem sedan mars 2002823 inlägg
#23

Följande skrivs ut:

Ja
SELECT * FROM admin WHERE password = ''

Engine^Medlem sedan dec. 20002 861 inlägg
#24

Med andra ord skickas det ingenting från ditt formulär. Använder du

<form action="[i]sidan.asp[/i]" method="[b]post[/b]">
plelkesMedlem sedan mars 2002823 inlägg
#25

Med andra ord så bör det vara fel på:

strSQL ="SELECT * FROM admin WHERE password = '" & Request.Form("pword")&"'"

Eller?

plelkesMedlem sedan mars 2002823 inlägg
#26

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
%>
Engine^Medlem sedan dec. 20002 861 inlägg
#27

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 ;)

plelkesMedlem sedan mars 2002823 inlägg
#28

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?

SebbeMedlem sedan jan. 20031 603 inlägg
#29

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

Engine^Medlem sedan dec. 20002 861 inlägg
#30

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 ;)

plelkesMedlem sedan mars 2002823 inlägg
#31

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?

SebbeMedlem sedan jan. 20031 603 inlägg
#32

Jo, jag har bakat ihop båda filerna, så att ingen information försvinner med Redirecten. :)

Engine^Medlem sedan dec. 20002 861 inlägg
#33

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
plelkesMedlem sedan mars 2002823 inlägg
#34

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?
SebbeMedlem sedan jan. 20031 603 inlägg
#35

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

Engine^Medlem sedan dec. 20002 861 inlägg
#36

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.

SebbeMedlem sedan jan. 20031 603 inlägg
#37

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

Genererad på 391 ms · cache AV · v20260730165559-full.f96bc7eb