webForumDet fria alternativet

Resonse.Write blir inte som jag tänkt

ASP

17 svar · 403 visningar · startad av plelkes

Medlem sedan mars 2002823 inlägg
Frågan#1

Jag får inte till detta med tabell och Response.Write

Med nedanståend kod:

<html>
<head>
<title>gästbokenp</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head><body bgcolor="#FFFFFF" text="#000000">
<html>
<head>
<title>gästbokenp</title>

</head><body bgcolor="#FFFFFF" text="#000000">
<p align="center"><font size="7"><b><i><font color="#FFCC33">V&auml;lkommen till 
  skolans g&auml;stbok</font></i></b></font></p>
 <%  dim minCon 'Connection
     dim rsSkriv 'recordsetten f&ouml;r nya inl&auml;gg
     dim strSQL

Set minCon = Server.CreateObject("ADODB.Connection")
set rsSkriv =Server.CreateObject("ADODB.Recordset")

minCon.Open "DRIVER={Microsoft Access Driver (*.mdb}; DBQ="&Server.MapPath("guests.mdb")
strSQL = "SELECT * FROM guestbook ORDER by ID DESC"

rsSkriv.Open strSQL, minCon, 3, 3
rsSkriv.AddNew

Response.Write ("<table width="780" border="2" cellspacing="5" cellpadding="5">")
Do while NOT rsSkrivEOF
  Response.Write ("<tr>")
    Response.Write ("<td bgcolor="#666666" width="114">)" 
      Response.Write ("<p><b><font size="5"><u><font color="#0000FF">Namn:</font></u></font></b></p>")
    Response.Write ("</td>")
    Response.Write ("<td width="507">")
Response.Write ("rsSkriv("Namn")=Request.Form("namn")")
Response.Write ("</td>")
    Response.Write ("<td width="99">")
Response.Write ("<% =date %>")
Response.Write ("</td>")
  Response.Write ("</tr>")
  <tr> 
    <td bgcolor="#666666" width="114"> 
      <p><b><font size="5"><u><font color="#0000FF">E-post:</font></u></font></b></p>
    </td>
    <td colspan="2">&nbsp;</td>
  </tr>
  <tr> 
    <td bgcolor="#666666" width="114"> 
      <p><b><font size="5"><u><font color="#0000FF">Hemsida:</font></u></font></b></p>
    </td>
    <td colspan="2">&nbsp;</td>
  </tr>
  <tr> 
    <td bgcolor="#666666" width="114"> 
      <p><b><font size="5"><u><font color="#0000FF">Meddelande:</font></u></font></b></p>
    </td>
    <td colspan="2">&nbsp;</td>
  </tr>
</table>
 %>

</body>
</html>

Får jag fäljande upp på skärmen:

Välkommen till skolans gästbok

") Response.Write ("") Response.Write ("") E-post: _ Hemsida: _ Meddelande: _ %>

Medlem sedan mars 2002823 inlägg
#2

Såg redan ett fel - som dock inte har med det hela att göra:
skall naturligtvis vara

Do while NOT rsSkriv.EOF
Medlem sedan juni 200032 967 inlägg
#3
  1. Du blandar asp-kod och html-kod hur som helst, och du har contextswitchar (<% %>) inne i din asp-kod. De ska du använda när du byter mellan html-läge och asp-läge.
  2. Du har lagt en massa asp-kod inne i response.write. Response.write skriver ut strängar till webbläsaren.
  3. Du har mängder med citationstecken inne i dina strängar, dessa måste du escape:a.

Det är mycket märkligt att du inte får felmeddelanden av denna kod. Har du on error resume next högre upp i koden?

Slutsats: gör om, gör rätt. ;)

Mvh,

Medlem sedan mars 2002823 inlägg
#4

tack för ditt snabba svar @nders!

Kan fu ge lite utförligare råd på hur jag kan rensa upp och rätta till?

Medlem sedan dec. 20003 887 inlägg
#5
<html>
<head>
<title>gästbokenp</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head><body bgcolor="#FFFFFF" text="#000000">
<html>
<head>
<title>gästbokenp</title>

</head><body bgcolor="#FFFFFF" text="#000000">
<p align="center"><font size="7"><b><i><font color="#FFCC33">Välkommen till 
  skolans gästbok</font></i></b></font></p>
 <%  dim minCon 'Connection
     dim rsSkriv 'recordsetten för nya inlägg
     dim strSQL

Set minCon = Server.CreateObject("ADODB.Connection")
set rsSkriv =Server.CreateObject("ADODB.Recordset")

minCon.Open "DRIVER={Microsoft Access Driver (*.mdb}; DBQ="&Server.MapPath("guests.mdb")
strSQL = "SELECT * FROM guestbook ORDER by ID DESC"

rsSkriv.Open strSQL, minCon, 3, 3
rsSkriv.AddNew

[b]Response.Write ("<table width=780 border=2 cellspacing=5 cellpadding=5>")

Do while NOT rsSkrivEOF
  Response.Write ("<tr><td bgcolor=#666666 width=114>")
  Response.Write ("<p><b><font size=5><u><font color=#0000FF>Namn:</font></u></font></b></p>")
  Response.Write ("</td><td width=507>")
Response.Write (rsSkriv("Namn") & " = " & Request.Form("namn") & "</td>")
  Response.Write ("<td width=99>" & Date & "</td></tr>")
%>[/b]
  <tr> 
    <td bgcolor="#666666" width="114"> 
      <p><b><font size="5"><u><font color="#0000FF">E-post:</font></u></font></b></p>
    </td>
    <td colspan="2"> </td>
  </tr>
  <tr> 
    <td bgcolor="#666666" width="114"> 
      <p><b><font size="5"><u><font color="#0000FF">Hemsida:</font></u></font></b></p>
    </td>
    <td colspan="2"> </td>
  </tr>
  <tr> 
    <td bgcolor="#666666" width="114"> 
      <p><b><font size="5"><u><font color="#0000FF">Meddelande:</font></u></font></b></p>
    </td>
    <td colspan="2"> </td>
  </tr>
</table>

</body>
</html>
Medlem sedan juni 200032 967 inlägg
#6

Till att börja med: har du on error resume next, bort med den.

Medlem sedan dec. 20003 887 inlägg
#7

Såg en sak... varför har du med rsSkriv.AddNew?

Medlem sedan mars 2002823 inlägg
#8

Tack för ditt svar Engine^

varför har du med rsSkriv.AddNew?

jag skall ju uppdatera en databas och trodde jag att jag måste "berätta" för recordsettet att vi lägger till en ny rekord.
Stämmer inte detta?

Medlem sedan dec. 20003 887 inlägg
#9

M'kay. Jag skulle dock använda mig av en sql-sats istället.

Men du öppnar bara recordset:et för att lägga till. Det kommer aldrig någon .Update(), så därför började jag att fundera. Men det kanske kommer i ett senare skede?

Jaja... fråga på du :)

Medlem sedan mars 2002823 inlägg
#10

Engine^,
det är tänkt att det skall komma

Update()

Jag skulle dock använda mig av en sql-sats iställe

Hur skulle/borde SQL´en se ut?

Som du förstår så är det tänkt att med hjälp av ett formulär lägga till databasen guest.mdb´s tabell guestbook

Medlem sedan dec. 20003 887 inlägg
#11

Det beror ju på hur du vill skicka datat, men det skulle kunna se ut så här:

<form action="getdata.asp" method="post">
  Namn: <input type="text" name="strNamn" maxlength="20"><br>
  E-post: <input type="text" name="strEMail" maxlength="30"><br>
  Hemsida: <input type="text" name="strHemsida" maxlength="30"><br>
  Meddelande: <textarea name="strMeddelande" rows="10"></textarea><br>
  <input type="submit" name="btnSubmit" value="Skicka">
</form>

Ovan bakar du in i din sida... nedan kommer sidan som ska ta hand om formuläret när det postats...

<%
  Dim objC

  Set objC = Server.CreateObject(ADODB.Connection)
  objC.Provider = "Microsoft.Jet.OleDB.4.0"
  objC.DataSource = Server.MapPath("guests.mdb")
  objC.Open

  strSQL = "INSERT INTO guestbook (namn, epost, hemsida, meddelande) " & _
  "VALUES ('"& Request.Form("strNamn") &"', '"& Request.Form("strEMail") &"', '"& _
  Request.Form("strHemsida") & "', '" & Request.Form("strMeddelande") &"');"

  objC.Execute strSQL, , 1

  Set objC = Nothing

  Response.Redirect "[i]visagästbok.asp[/i]" [blue]'skicka tillbaka användaren, så den får se vad den postat...[/blue]
%>

Det här är givetvis inte bara att smacka in och tro att det ska fungera, men det är en fingervisning om hur du kan gå till väga.

Hoppas det hjälper något iaf :)

Medlem sedan mars 2002823 inlägg
#12

Vilken är den rätta syntaxen?

detta som jag hittade hos webeye:

Response.Write "<table><tr><td>" & strNavigation & "</td></tr></table>"

Eller

Response.Write ("<p><b><font size=5><u><font color=#0000FF>Namn:</font></u></font></b></p>")
Medlem sedan nov. 20017 144 inlägg
#13

En fråga om tycke och smak.

Medlem sedan mars 2002823 inlägg
#14

så ni menar att :

  1. Response.Write " "
  2. Response.Write (" ")

är lika rätt??

Medlem sedan mars 20015 287 inlägg
#15

Ja.

Medlem sedan aug. 20012 349 inlägg
#16

Japp.. eller egentligen inte. Det funkar likadant så bekymra dig inte.

Egentligen har man () när det är en funktion som returnerar någonting och utan när det är en sub, men man kan ha en sub med () fast då måste man göra en call
ex:

sString = MyFunction(iInParameter)
sString = MyFunction iInParameter
MySub iInParameter
call MySyb(iInParameter)

Alla dess 4 är giltiga sätt att ropa på functions eller subbar, men jag anser att man skall använda sig av () vid functioner och utan vid subbar. Smaken är docksom baken, alla har olika åsikter och i .NET är det tvingat har jag för mig att navända ().

Medlem sedan mars 20015 287 inlägg
#17

Personligen kallar jag på en sub med den sistnämnda varianten. Just för att man då lätt ser att det är en sub som påkallas.
Vad det gäller response.write (mm iofs) använder jag inte () just pga att det är hyfsat vedertaget att inte göra det.

Medlem sedan mars 2002823 inlägg
#18

Hej,
här kommer kunskapstörstiga ja med ytterligare en fråga:
Finns det ngra skillnader och fördelar i att använda SQL-sats för att skriva till en databas istället för .AddNew och .Uppdate?

272 ms totalt · 4 externa anrop · v20260731065814-full.2f471f9e
131 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)