webForumDet fria alternativet

Problem med ett enkelt gästboksscript som lever sitt egna liv!

ASP

9 svar · 825 visningar · startad av Anton_L

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

Hej!

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

Tack på förhand :moose

Medlem sedan juni 200032 967 inlägg
#2

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

Mvh

Medlem sedan mars 200584 inlägg
#3

Hej!

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?

Anton

Medlem sedan juni 200032 967 inlägg
#4

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

Mvh

Medlem sedan mars 200584 inlägg
#5

Hej,

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") %>&nbsp;<b><% =sqlfraga("Kommentar") %></b>
	<a href="produktbloggen.asp?delID=<% =sqlfraga("ID") %>">Radera</a>
<%	sqlfraga.MoveNext
	Loop
	sqlfraga.Close 
%>

Kan du se även här vad jag gjort fel fel? :q

Medlem sedan apr. 2005116 inlägg
#6

Ser ut som du använder kod från IDG´s Lektion 41 (Radera information)
http://iwtjanster.idg.se/webbstudio/pub/artikel.asp?id=119

De använder 2 filer för att radera från databasen, default.asp som listar posterna och tabort.asp som utför raderingen av post.

Medlem sedan mars 200584 inlägg
#7

Hej!

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?

Tack :)
Anton

Medlem sedan jan. 20023 327 inlägg
#8

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.

En början, för att läsa lite om vad .NET är...
http://sv.wikipedia.org/wiki/.NET_Framework (svenska)
http://en.wikipedia.org/wiki/.NET_Framework (engelska, mer utförlig än den svenska)

ASP.NET "video-tutorials":
http://www.asp.net/LEARN/videos/

Medlem sedan mars 200584 inlägg
#9

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?

Anton

Medlem sedan apr. 2005116 inlägg
#10

Om du ska ha koden i samma fil måste du se till att koden som raderar från databasen endast körs när någon klickar på länken radera.

<%
[B]if Request.Querystring("q")="radera" then[/B]    
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
[B]EndIf[/B]
%>
<% 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") %>&nbsp;<b><% =sqlfraga("Kommentar") %></b>
	<a href="produktbloggen.asp?delID=<% =sqlfraga("ID") %>[B]&q=radera[/B]">Radera</a>
<%	sqlfraga.MoveNext
	Loop
	sqlfraga.Close 
%>

Ändringar i fetstilt

270 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)