Avatar billede html_wizard Nybegynder
30. april 2003 - 16:44 Der er 5 kommentarer og
1 løsning

ASP hjælp

Jeg har lavet en gæstebog, meeeen ...
Når der "addes" et indlæg opdaterer siden ikke indlægget med det samme, så derfor trykker man refresh, men så adder den indlægget igen. Dvs:
1. den viser ikke det nye indlæg med det samme
2. den laver indlægget "recorder indlægget i databasen igen ved refresh"

koden er således:

<%
Const adOpenKeyset = 1
Const adLockOptimistic = 3

strMode = Request.QueryString("mode")
set conn = server.createobject("ADODB.Connection")
conn.open "DBQ=d:\home\***\db\guestbook.mdb;Driver={Microsoft Access Driver (*.mdb)};"

If Request.Form("Gem") <> "" Then
    strError = ""
    strNavn = Trim(Request.Form("Navn"))
    strEmail = Trim(Request.Form("Email"))
    strKommentar = Trim(Request.Form("Kommentar"))
    If Len(strNavn) = 0 Then
        strError = "<li>Du skal skrive dit navn! / Write your name!</li>"
    ElseIf Len(strKommentar) = 0 Then
        strError = "<li>Du skal skrive en kommentar! / Write a comment!</li>"
    ElseIf Len(strEmail) = 0 Then
        strEmail = 1
    End If
    If Len(strError) = 0 Then
        Set rs = Server.CreateObject("ADODB.RecordSet")
        strSQL = "SELECT * FROM Guestbook WHERE (ID = 0)"
        rs.Open strSQL, Conn, adOpenKeyset, adLockOptimistic
        If (rs.BOF Or rs.EOF) Then
            rs.AddNew
            rs("Navn") = Server.HTMLEncode(strNavn)
            rs("Email") = Server.HTMLEncode(strEmail)
            rs("Kommentar") = Server.HTMLEncode(strKommentar)
            rs("Dato") = Now()
            rs.Update
        End If
        rs.Close
        Set rs = Nothing
    Else
        strError = "<p><ul><font color=#FFFFFF>" & strError & "</font></ul></p>"
    End If
End If
%>
<html>

<head>
<title>Mexica Hairless</title>
<link rel="stylesheet" href="mainpages.css" type="text/css">
</head>

<body bgcolor="#000000" alink="#00FF00" link="#00FF00" vlink="#00FF00" topmargin="0">
<br><br>
  <table width="780" border="0" cellspacing="0" cellpadding="0" align="center">
      <tr><td valign="top"><br><br>
          <div align="center"><center><table bgcolor="#660000" border="0" width="600" cellspacing="0" cellpadding="3">
    <tr>
      <td width="100%">
<%
Select Case strMode
Case "add"
%>
<form method="POST" action="guestbook.asp">
<table border="0" width="100%" cellspacing="0" cellpadding="2" bgcolor="#660000">
        <tr>
          <td valign="middle" align="left" colspan="2"><font face="verdana" size="2" color="#FFFFFF"><br><strong>
      <%=strError%></td>
        </tr>
        <tr>
          <td valign="middle" align="left"><div align="right"><p><strong><font color="#FFFFFF" face="verdana" size="2">Navn/Name</font></strong></td>
          <td valign="middle" align="left"><input type="text" name="Navn" size="40" value="<%=strNavn%>"></td>
        </tr>
        <tr>
          <td valign="middle" align="left"><div align="right"><p><strong><font color="#FFFFFF" face="verdana" size="2">E-mail</font></strong></td>
          <td valign="middle" align="left"><input type="text" name="Email" size="40" value="<%=strEmail%>"></td>
        </tr>
        <tr>
          <td valign="top" align="left"><div align="right"><p><strong><font color="#FFFFFF" face="verdana" size="2">Kommentar/Comment</font></strong></td>
          <td valign="middle" align="left"><textarea rows="3" name="Kommentar" cols="40"><%=strKommentar%></textarea></td>
        </tr>
        <tr>
          <td valign="middle" align="left" colspan="2"><br>
          <input type="submit" value="Indsæt/Add" name="Gem"> <input type="button" value="Annuller/Cancel" name="Annuller" onClick="java script:location.href='guestbook.asp'"></td>
        </tr>
      </table>
</form>
<%
Case Else
    strAddLine = "<p><center><a href=guestbook.asp?mode=add><font color=#FFFFFF face=verdana size=2>Skriv en hilsen / Add a comment</font></a></center></p>"
    Response.Write strAddLine
    strSQL = "SELECT * FROM Guestbook ORDER BY Dato DESC;"
    Set myConn = Server.CreateObject("ADODB.Connection")
    myConn.Open Conn
    Set rs = myConn.Execute(strSQL)
    If Not (rs.BOF Or rs.EOF) Then
        Response.Write "<table width=100% border=0 cellpadding=1 cellspacing=1>"
        Do While Not rs.EOF
            dtmDato = rs("Dato")
            dtmDato = FormatDateTime(dtmDato,vbLongDate) & " kl. " & FormatDateTime(dtmDato,vbLongTime)
            Response.Write "<tr bgcolor=#990000><td width=""100%""><font color=#FFFFFF face=verdana size=2>" & dtmDato & "</td></tr>"
            If Len(rs("Email")) > 0 Then
                Response.Write "<tr><td><font color=#FFFFFF face=verdana size=2>Post by:&nbsp;<a href=mailto:" & rs("Email") & ">" & rs("Navn") & "</a></td></tr>"
            Else
                Response.Write "<tr><td><font color=#FFFFFF face=verdana size=2><strong>" & rs("Navn") & ":</strong></td></tr>"
            End If
            Response.Write "<tr><td><font color=#FFFFFF face=verdana size=2>" & rs("Kommentar") & "<br>&nbsp;</td></tr>"
            rs.MoveNext
        Loop
        Response.Write "</table>"
    Else
        Response.Write "<p><font color=#FFFFFF face=verdana size=2>Der er endnu ikke nogle der har skrevet i gæstebogen / No submissions</font></p>"
    End If
    myConn.Close
    Set myConn = Nothing
    Response.Write strAddLine
End Select
%>
    </tr>
  </table>
  </td></tr></table>
  </center></div>
</body>
</html>
Avatar billede eagleeye Praktikant
30. april 2003 - 16:52 #1
1. den viser ikke det nye indlæg med det samme

Efter du har gemt i databasen skal du lukke for conenction og åben igen eller lave en redirect til samme side, for den får den nye record med.


2. den laver indlægget "recorder indlægget i databasen igen ved refresh"

Hvis du laver en redirect efter de er indsat skulle det ikke være muligt.
Avatar billede html_wizard Nybegynder
30. april 2003 - 16:58 #2
Kan du ikke forklare mig commandstregen og hvor den skal sættes ind, så jeg kan skyde pointene efter dig :-)
Avatar billede eagleeye Praktikant
30. april 2003 - 17:04 #3
Du skal lave den efter du har lukket dit recordset og opdateret.:

      End If
      rs.Close
      Set rs = Nothing


Der skal du lukke for conenction til database og lave en redirect til den samme side som koden er i.

      End If
      rs.Close
      Set rs = Nothing
      conn.Close
      Response.Redirect ("guestbook.asp")
Avatar billede html_wizard Nybegynder
30. april 2003 - 17:10 #4
rs.AddNew
            rs("Navn") = Server.HTMLEncode(strNavn)
            rs("Email") = Server.HTMLEncode(strEmail)
            rs("Kommentar") = Server.HTMLEncode(strKommentar)
            rs("Dato") = Now()
            rs.Update
        End If
        rs.Close
        Set rs = Nothing
--->        conn.Close
--->      Response.Redirect ("guestbook.asp")
    Else
        strError = "<p><ul><font color=#FFFFFF>" & strError & "</font></ul></p>"
    End If
End If
%>

Det vil sige dette ville være fyldestgørende? Og husk at markere dig som svar
Avatar billede eagleeye Praktikant
30. april 2003 - 17:16 #5
Ja netop sådan.

1. Databasen bliver først opdateret med de nye data når connection lukkes.
2. Grunden til at man kan trykke på refresh og den sætte den samme ind flere gang er fordi den reloader siden i browseren som den var sent til før. Så alt den data som er POST'et bliver det igen og det vil i koden se ud som om formen er udfyldt på ny. Når man laver en redirect mister man de data og derfor skulle den ikke kunne oprette den samme flere gange ved refresh.
Avatar billede html_wizard Nybegynder
30. april 2003 - 17:22 #6
Udemærket, ja det virker sgu optimalt, eller i hvert fald hvad først var hensigten. TAK for hjælpen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester