ASPDatabaserDatabasexempelFörklaringar till gästboken
[ Hem ] Allmänt ASP XML SQL ADO HTML CSS VB Java Design Karta
Grunder Input/output VBScript Databaser Tips Exempel

Förklaringar till gästboken

Gästboksexemplet avspeglar kanske min motvilja mot MÅNGA sidor. Därför används samma sida för all hantering. Dessutom vet jag faktiskt inte hur gästböcker ser ut. Brukar ju inte surfa...

Gästboken är baserad på en tabell med namnet GUESTBOOK som skall finnas i samma databasfil som EXEMPELDATA. Den är konstruerad på följande sätt:

FältTypLängdIndex?
IDAutoNumberLong IntegerJa
FROMText100Nej
EMAILText100Nej
URLText120Nej
COMMENTMemo Nej
DATEDate/Time Nej
IP_ADRESSText18Nej
BROWSERText60Nej
Samtliga Textfält skall dessutom ha Allow Zero Length: Yes för att vi skall kunna lämna tomt i fälten

Gästboken fungerar med hjälp av en enda sida. Denna sida används för tre olika saker
  1. Visa listan
  2. Visa en form för inmatning av nytt data till gästboken
  3. Lägger till denna nya post till tabellen
Det som avgör vilken del som skall visas är vad som står på adressraden
  1. Om det är tomt så visas gästboken
  2. Om man klickar på länken sätts ?NY=1 till efter filenamnet och sidan laddas om
  3. Om det står NY=1 på adressraden visas en tom form för inmatning
  4. Om vi i denna form klickar på OK så kommer det att ske en submit på formen. Allt data från formen sänd då till sidan via adressraden
  5. Om det sänts data från formen (kontrolleras genom att se om FORM= fanns på adressraden så läggs data in i datatabellen. Sedan laddas sidan om utan någonting på adressraden för att komma tillbaka till listan< /li>
Det är dock inte denna ordning som programmet är konstruerat. Om vi ser i programkoden kan vi se följande
  1. If Not IsEmpty(Request("FROM")) Then
    Kontrollerar om vi fått sidan efter en form submit (punkt 5 i föregående lista)
    En uppdatering sker då och sidan laddas om.
  2. Sedan kommer if Request("NEW") = 1 Then för att kontrollera om vi kommit hit efter att ha klickat på "Klicka här för att skriva i min gästbok" länken.
  3. Sedan kommer en Else dit vi kommer om adressraden var "tom"
    Där visas själva gästboken med en "normal" Do While Not RS.EOF
Hela punkt 1 ovan sköts om av följande kod. Detta är en generell "insättningskod" som går enkelt att anpassa för egna behov
<%
' Om vi submitar formen så kommer FROM helst att vara satt
' Detta kan vi kontrollera här
' Vi tar värdena som kommer i URL och sätter in dem i en databas
' Orsaken till den "konstiga" placeringen i filen är att man
' inte kan använda Response.Redirect om man redan skrivit
' till sidan.
' Man skulle kunna sätta Response.Buffer = 1 för att undvika detta
' men det går även att sätta koden tillräckligt tidigt
If Not IsEmpty(Request("FROM")) Then
   ' SQL satsen för tabellen
   SQL = "SELECT * FROM GUESTBOOK"
   Set Conn = Server.CreateObject("ADODB.Connection")
   Conn.Open strConn
   Set RS = Server.CreateObject("ADODB.RecordSet")
   ' Måste öppna recordetten för uppdatering = 3 som sista
   ' parameter
   RS.Open SQL, Conn, 1, 3
   ' Kollar vad klockan är nu
   currentTime = now
   ' Sätter in en ny post
   RS.AddNew
   ' tar värdet som kom för FROM från URL med Request
   ' och sätter det i fältet med samma namn
   ' vi upprepar för övriga fält
   RS("FROM") = Request("FROM")
   RS("EMAIL") = Request("EMAIL")
   RS("URL") = Request("URL")
   RS("COMMENT") = Request("COMMENT")
   ' Vi kollar även (utan att de vet det) vilken
   ' IP adress de har samt vilken browser de använder
   RS("IP_ADRESS") = Request.ServerVariables("REMOTE_ADDR")
   RS("BROWSER") = Request.ServerVariables("HTTP_USER_AGENT")
   ' datum skall matas in i formen mm/dd/yyyy hh:mm:ss
   ' för att fungera med alla LCID och lansdinställningar på servern
   RS("DATE") = Month(currentTime) & "/" & _
             Day(currentTime) & "/" & _
             Year(currentTime)& " " & _
             Hour(currentTime) & ":" & _
             Minute(currentTime) & ":" & _
             Second(currentTime)
   ' Vi sparar de nya fältvärdena
   RS.Update
   ' Sedan är vi färdiga med denna session
   RS.Close
   Conn.Close
   Set RS = Nothing
   Set Conn = Nothing
   ' Vi visar inte sidan utan "redirectar" till samma sida men
   ' utan några värden på URL raden (Ser snyggare ut!)
   Response.Redirect Request.ServerVariables("URL")
End If
%

Hela punkt två sköts om av förljande kod

<!-- Form för att kunna mata in de nya värdena. -->
<form method="GET">
<table>
<tr>
   <td>
      Jag är:
   </td>
   <td>
      <INPUT TYPE="TEXT" NAME="FROM" SIZE="40" MAXLENGTH="100">
   </td>
</tr>
<tr>
   <td>
      Email:
   </td>
   <td>
      <INPUT TYPE="TEXT" NAME="EMAIL" SIZE="40" MAXLENGTH="100">
   </td>
</tr>
<tr>
   <td>
      Hemsidan:
   </td>
   <td>
      <INPUT TYPE="TEXT" NAME="URL" SIZE="40" MAXLENGTH="120">
   </td>
</tr>
<tr>
   <td colspan="2">
   <TEXTAREA NAME="COMMENT" COLS="60" ROWS="8"></TEXTAREA>
   </td>
</tr>
<tr>
   <td colspan="2">
   <!--
      Ett trix för att undvika "fula knappar".
      Kör submit genom href o javascript
      GUEST hänvisar till formen
   -->
< /FONT>   
   <a href="javascript:document.GUEST.submit()">
   <font face="Comic Sans MS,Arial,Helvetica,Univers" size="7">Ok</font></a>
      
   <!-- går tillbaka till huvudlistan -->
   <a href="<% =Request.ServerVariables("URL") %>">
    <font face="Comic Sans MS,Arial,Helvetica,Univers" size="7">Tillbaka</font></a>
   </td>
</tr>
</table>
</form>
<!-- Formen tog slut -->
Hela punkt tre sköts om av följande kod
<%
' Öppna tabeller och sorter så de nyaste kommer först
' vi visar bara de 20 senaste (TOP 20)
SQL = "SELECT TOP 20 * FROM GUESTBOOK ORDER BY DATE DESC"
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open strConn
' En simpel forward only duger
Set RS = Conn.Execute(SQL)
%>

<font face="Comic Sans MS,Arial,Helvetica,univers" size="5">
<a href="<% =Request.ServerVariables("URL")%>?NEW=1">
<img src="../images/bullet2.gif" border="0">
Klicka här för att skriva i min gästbok</a>
</font>
<%
 theRow = 1
 Do While Not RS.EOF
%>

<div align="<% =getZigZag %>">
<table width="400" border="3" BORDERCOLORLIGHT="#F5F5DC" BORDERCOLORDARK="#BC8F8F">
<tr><td>Mitt namn:</td><td bgcolor="FFFFFF"><%=RS("FROM")%>&nbsp;</td></tr>
<tr><td>Email:</td><td bgcolor="FFFFFF"><%=RS("EMAIL")%>;&nbsp;</td></tr>
<tr><td>Hemsida:</td><td bgcolor="FFFFFF"> <ahref="http://<%=RS("URL")%>" target="_new"><%=RS("URL")%></a>&nbsp;</td></tr>
<tr><td colspan="2" bgcolor="FFFFFF"><%=RS("COMMENT")%> </td></tr>
<tr><td width="100">Tid:</td><td bgcolor="FFFFFF"><%=RS("DATE")%>&nbsp;</td></tr>
</table>
</div>
<%
 RS.MoveNext
 Loop
 RS.Close
 Conn.Close
 Set RS = Nothing
 Set Conn = Nothing
%

...
<%
' Jag tycker om "varannangångs kod" !
Dim zigZag
Function getZigZag()
   if zigZag Then
      getZigZag = "LEFT"
   Else
      getZigZag = "RIGHT"
   End If
   zigZag = Not zigZag
End Function
%

  En gästbokOm du vill se vad som finns i tabellerna...
Databaser
Exempeldatatat
Snabbkurs i SQL
Enkel listning
Lista hela tabellen
Optimering av databaslistningar
Bläddra några åt gången
Visa mer data om posten
Resultatet av föregående kapitel
Insättning av nya poster
Uppdatering av poster
Radering av poster
Typkontroll
En JavaScript lösning för typkontroll
Resultat från valideringarna
Alternativ lösning för bläddring
Databasexempel
En gästbok
Förklaringar till gästboken
Om du vill se vad som finns i tabellerna...
Databasform
Databasform med Include


Top
< En gästbok Om du vill se vad som finns i tabellerna...>
© Anders Enges, Vörå 2002  | 23.01.01 17:33 Visa asp koden