Sitter och pillar lite med ASP och försöker lära mig. Har med hjälp av lite exempel knåpat ihop en mycket enkelt minitwitter/gästbok . Mitt problem är att varje gång jag laddar om sidan (F5) så postas en tom rad i databasen, vilket ju även syns i gästboken. Min förhoppning är att någon som är lite haj på detta enkelt kan se vad jag har skrivit fel. Är som tidigare nämt ganska så färsk på detta, så jag ber om ursäkt för den taskiga kod ni säkert lär finna :r
<%
' KOD FÖR ATT ÖPPNA ANSLUTNING TILL DATABAS
Set Connect = server.createobject("ADODB.Connection")
Connect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath ("/07/inloggning/data/users.mdb")
%>
<%
' KOD FÖR ATT LÄGGA TILL INLÄGG
'Skapar en plats för mellanlagring av data.
Set RecSetet = Server.CreateObject("ADODB.Recordset")
'Sql-satsen som ska hantera data.
laggtill = "SELECT * FROM twdata"
'Begränsar samtidig användning av databas.
RecSetet.Open laggtill, Connect, adOpenStatic, adLockOptimistic
'Lägg till ny post i databasen.
RecSetet.AddNew
'Hämta data från formuläret för nya poster.
RecSetet("Namn") = Request.Form("namn")
RecSetet("Kommentar") = Request.Form("kommentar")
'Uppdatera databasen.
RecSetet.Update
'Stäng Recset
RecSetet.Close
%>
<!-- SKRIVA INLÄGG START -->
<div id="center">
<div id="logga"></div>
<div id="twittBox">
<form method="post" action="produktbloggen.asp">
<input type="text" name="namn" size="15">
<input type="submit" value="twittra"><br>
<textarea rows="3" cols="112" name="kommentar"></textarea><br>
</form>
</div>
<div id="mitt">
<!-- SKRIVA INLÄGG SLUT -->
<!-- SKRIVA UT INLÄGGG FRÅN DATABAS START -->
<%
'Sql-satsen som ska hantera data.
SQLanrop = "Select * From twdata"
'Kör Sql-satsen
Set sqlfraga = Connect.Execute(SQLanrop)
'Fortsätt tills sista raden är nått i databasen
Do Until sqlfraga.EOF
'Skriv ut infon från databasen i filen
Response.write "<table width='450'><tr><td width='150'>" & date & " - " & sqlfraga("Namn") & "</td><td width='300'>" & sqlfraga("Kommentar") & "<a href='" &"'> Radera</a></td>"
'Hoppa vidare till nästa inlägg
sqlfraga.MoveNext
'Börja om från början med att leta efter rader i databasen
Loop
%>
</div>
</div>
</div>
<!-- SKRIVA UT INLÄGGG FRÅN DATABAS SLUT -->
Frågan verkar handla om klassisk asp, så jag flyttar tråden från ASP.NET.
- - - - -
Det "gamla vanliga" sättet att lösa dylika problem är att lägga in en if-sats så att det bara sätts in i databasen om man verkligen postat något - och efter insättningen i databasen skicka iväg användaren till en annan sida (eller i detta fall samma sida).
Mina tillägg i fet stil nedan:
<%
' KOD FÖR ATT ÖPPNA ANSLUTNING TILL DATABAS
Set Connect = server.createobject("ADODB.Connection")
Connect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath ("/07/inloggning/data/users.mdb")
%>
<%
[b]if request.form("kommentar") <> "" then[/b]
' KOD FÖR ATT LÄGGA TILL INLÄGG
'Skapar en plats för mellanlagring av data.
Set RecSetet = Server.CreateObject("ADODB.Recordset")
'Sql-satsen som ska hantera data.
laggtill = "SELECT * FROM twdata"
'Begränsar samtidig användning av databas.
RecSetet.Open laggtill, Connect, adOpenStatic, adLockOptimistic
'Lägg till ny post i databasen.
RecSetet.AddNew
'Hämta data från formuläret för nya poster.
RecSetet("Namn") = Request.Form("namn")
RecSetet("Kommentar") = Request.Form("kommentar")
'Uppdatera databasen.
RecSetet.Update
'Stäng Recset
RecSetet.Close
[b]Response.redirect "denna_sida.asp"
end if[/b]
%>
<!-- SKRIVA INLÄGG START -->
<div id="center">
<div id="logga"></div>
<div id="twittBox">
<form method="post" action="produktbloggen.asp">
<input type="text" name="namn" size="15">
<input type="submit" value="twittra"><br>
<textarea rows="3" cols="112" name="kommentar"></textarea><br>
</form>
</div>
<div id="mitt">
<!-- SKRIVA INLÄGG SLUT -->
<!-- SKRIVA UT INLÄGGG FRÅN DATABAS START -->
<%
'Sql-satsen som ska hantera data.
SQLanrop = "Select * From twdata"
'Kör Sql-satsen
Set sqlfraga = Connect.Execute(SQLanrop)
'Fortsätt tills sista raden är nått i databasen
Do Until sqlfraga.EOF
'Skriv ut infon från databasen i filen
Response.write "<table width='450'><tr><td width='150'>" & date & " - " & sqlfraga("Namn") & "</td><td width='300'>" & sqlfraga("Kommentar") & "<a href='" &"'> Radera</a></td>"
'Hoppa vidare till nästa inlägg
sqlfraga.MoveNext
'Börja om från början med att leta efter rader i databasen
Loop
%>
</div>
</div>
</div>
<!-- SKRIVA UT INLÄGGG FRÅN DATABAS SLUT -->
Först och främst, ledsen för felposten och tack för flytten!
Tänkt vad enkel lösningen var, jag hade låst mig helt på att jag hade kodad något lustigt som gjorde att det auto-posta. Funkar klockrent nu :)
Bör man gå direkt på .NET som nybörjare, eller ska man lära sig klassisk ASP någorlunda bra först?
Först och främst, ledsen för felposten och tack för flytten!
No probs, det är lätt hänt. :)
Bör man gå direkt på .NET som nybörjare, eller ska man lära sig klassisk ASP någorlunda bra först?
Jag tycker att du ska gå rätt på .NET, även om tröskeln kanske är lite högre. Gamla ASP är dött, utvecklas inte längre och har så inte gjorts på många år.
.NET (eller någon annan teknik som lever) är bäst att sikta in sig på - om man nu ändå ska välja vad man ska lära sig. :)
ASP och ASP.NET har inte sådana likheter att jag kommer ha nytta av mina grundläggande ASP kunskaper? Är inte .NET bara en utökning, eller är det ett helt annorlunda språk?
Sen så skrev jag om lite av koden och tänkte använda querystrings till att kunna radera GB-inlägg. Får nu följande fel på följande kod: x(
Error Type:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][Drivrutin för ODBC Microsoft Access] Syntaxfel (operator saknas) i frågeuttrycket 'ID ='.
<%
Set uppsattning = Server.CreateObject("ADODB.Recordset")
bort = "SELECT * FROM twdata WHERE ID = " & Request.QueryString("delID") & " "
uppsattning.Open bort, Connect, adOpenStatic, adLockOptimistic
uppsattning.Delete
uppsattning.Close
%>
<% Set sqlfraga = Server.CreateObject("ADODB.Recordset")
Radera = "SELECT * FROM twdata ORDER BY ID"
sqlfraga.Open Radera, Connect, adOpenStatic, adLockOptimistic
%>
<% Do Until sqlfraga.EOF %>
<% =sqlfraga("Namn") %> <b><% =sqlfraga("Kommentar") %></b>
<a href="produktbloggen.asp?delID=<% =sqlfraga("ID") %>">Radera</a>
<% sqlfraga.MoveNext
Loop
sqlfraga.Close
%>
Helt korrekt, använder deras guide för att lära mig! Försöker nu bygga ihop flera exempel till en sida. Det är inget jag ska använda till något, utan hel och hållet bara en del i inlärningen. Kan du nu ev. hjälpa till med koden?
Nej, .NET är inte en utökning! .NET är ett helt "nytt" (nytt i förhållande till klassisk ASP) ramverk för att skapa applikationer. ASP.NET en av delarna i detta ramverk för att skapa webbsidor.
Okej, tack för infon där! Betyder detta att man inte har nytta av det man lär sig i klassisk ASP i ASP.NET? :)
Tillbaka topic, koden till att ta bort inlägg, är det något fel ni med lite större erfarenhet finner där?