webForumDet fria alternativet

Ta bort en post med en knapp!

ASP

14 svar · 357 visningar · startad av magnusfernstrom

Medlem sedan mars 20033 686 inlägg
Frågan#1

Hej...
Ser att det finns en liknande tråd i detta forum just nu men jag hittar inte svaret där ändå..eller får det i alla fall inte att fungera.
Det är som så att jag vill ha en länk bredvid varje post så jag snabbt kan radera den.
När man trycker på länken kommer man till denna sida som har följande kod:

<%
Id=request.querystring("Id")
Set db = Server.CreateObject("ADODB.Connectio")
db.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath ("databas.mdb")
SQL = "DELETE * FROM Test WHERE Id = "& Id &"
Set rs = db.Execute(SQL)
Set rs = nothing
Set db = nothing
Response.Redirect "test.asp"
%>

Är jag helt ute och cyklar? är detta HELT fel kod eller rör det sig om någon kom som endast fattas?

Mycket tacksam för svar

Medlem sedan mars 20025 907 inlägg
#2
<%
Id=request.querystring("Id")
Set db = Server.CreateObject("ADODB.Connectio")
db.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath ("databas.mdb")
SQL = "DELETE FROM Test WHERE Id = "& Id 
db.Execute(SQL)
Set db = nothing
Response.Redirect "test.asp"
%>

Så borde fungera (förutsatt att Id är ett numeriskt värde, annars kan du få lite roliga felmeddelanden :)

Medlem sedan apr. 20003 174 inlägg
#3

Nope, den koden tar bort en post ur en databas - Ja.

Skapa länken brevid varje post, skicka då med postens unika ID från databasen och baka in den som en del av länken.

ex.

[red]<a href=""sida_som_raderar.asp?id="& RecSet("ID") &""">Radera</a>[/red]
Medlem sedan mars 20033 686 inlägg
#4

Nepp det fungerar tyvärr ändå inte:
Jag skickar med hela koden istället!:

sidan "test.asp":

<html>
<%
Set db = Server.CreateObject("ADODB.Connection")
db.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath ("db/block.mdb")
SQL = "SELECT * FROM Test"
Set rs = db.Execute(SQL)
%>
<%
Do Until RS.EOF
%>
<%=rs("Namn")%>
<br>
<a href=""delete.asp?id="& RecSet("Id") &""">Radera</a>
<br>
<br>
<br>
<%
rs.MoveNext
Loop
%>

sedan koden för sidan "delete.asp":

<%
Id=request.querystring("Id")
Set db = Server.CreateObject("ADODB.Connection")
db.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath ("databas.mdb")
SQL = "DELETE * FROM Test WHERE Id = "& Id
Set rs = db.Execute(SQL)
Set rs = nothing
Set db = nothing
Response.Redirect "test.asp"
%>

Databasen heter som sagt block.mdb och har en tabell som heter Test, samt två kolumner varav en är en Räknare som heter Id och en som är Text som heter Namn.

Medlem sedan apr. 20003 174 inlägg
#5

magnusfernstrom skrev:

Nepp det fungerar tyvärr ändå inte

Ok, vad är det som inte fungerar?
Felmeddelande?

Medlem sedan mars 20033 686 inlägg
#6

jaa...alltså när jag trycker på radera så kommer ett "vanligt" meddelande. Alltså "sidan kan inte visas" Nummer 403 Åtkomst nekad i mitt fall :D

Medlem sedan apr. 20003 174 inlägg
#7

Har du avaktiverat Visa egna HTTP-felmeddelande i din webbläsare?
- Om inte, gör det nu.

Testa detta:

[red]<html>
<body>
<%

Set db = Server.CreateObject("ADODB.Connection")
db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source ="& Server.MapPath("db\block.mdb")

	Set rs = db.Execute("SELECT Id, Namn FROM Test")
	If NOT rs.EOF Then
		Do Until rs.EOF

			intID = rs("Id")
			strName = rs("Namn")
			Response.Write "<p>"& strName &"<br><a href=""delete.asp?id="& intID &""">Radera</a></p>"

		rs.MoveNext
		Loop
	End If
	rs.Close : Set rs = Nothing

db.Close : Set db = Nothing

%>
</body>
</html>

...

<html>
<body>
<%

Set db = Server.CreateObject("ADODB.Connection")
	db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source ="& Server.MapPath("db\block.mdb")

		db.Execute("DELETE FROM Test WHERE Id="& trim(Request.Querystring("id"))),,128

	db.Close
Set db = nothing

Response.Redirect "test.asp"

%>
</body>
</html>[/red]
Medlem sedan mars 20033 686 inlägg
#8

Wow tack det funkade. Men varför går det inte med koden jag har skrivit då? Jag menar den kod du skickade med var skilde sig ju relativt mycket från min kod!

Medlem sedan apr. 20003 174 inlägg
#9

Största skillnaden är nog att du försöker ta bort en post ur fel databas, och eftersom
du inte avaktiverat egna felmeddelande i din webbläsare så ser du inte vad som är fel.. ;)

Desutom optimerade jag din kod en aning med en stabilare db-provider mm. mm.

Du skrev:

[red]db.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath ("databas.mdb")[/red]

Jag skrev:

[red]db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source ="& Server.MapPath("db\block.mdb")[/red]
Medlem sedan mars 20033 686 inlägg
#10

Jaha men jag skrev databas.mdb när ja skulle posta det här som exempel...Vet inte varför :D...Men som sagt har du som är bra på ASP nån förklaring tilll varför den kod jag först skrev inte funkar?
Dessutom kommer ett skumt felmeddelande upp efter jag raderat en post nu är det endast en post kvar i databasen och då går det inte att öppna sidan över huvud taget! Fel 500 står det. Och jag hade visst aktiverat Egna felmeddelande :D

Medlem sedan mars 20033 686 inlägg
#11

nu laddade jag upp databasen igen med alla fem poster i!
Då står det så här på sidan:


Namn1
Radera

Namn2
Radera

Namn3
Radera

Namn4
Radera

Namn5
Radera

... 
Microsoft JET Database Engine error '80040e14' 

Syntax error (missing operator) in query expression 'Id='. 

/bannus/test2.asp, line 36

om jag tar bort en post kommer jag tillbaks till sidan men då har felmeddelandet försvunnit. Då kan man ihnte radera igen! Då måste man gå tillbaks eller ladda om för att kunna ta bort igen. För då är fel meddelande där igen!

Hoppas du förstod

Medlem sedan juni 200032 967 inlägg
#12

En av anledningarna till att din kod tidigare inte fungerade ser du i det här avsnittet, framför allt den fetmarkerade raden.

Do Until RS.EOF
%>
<%=rs("Namn")%>
<br>
[b]<a href=""delete.asp?id="& RecSet("Id") &""">Radera</a>[/b]
<br>
<br>
<br>
<%
rs.MoveNext
Loop

Möjligen hade det fungerat om du hade skrivit ut länken med response.write, men du har ju avslutat asp-blocket, så du ska skriva vanlig html där.

<a href="delete.asp?id=<%= RecSet("Id") %>">Radera</a>

- - - - - - - - -

ang. ditt sista inlägg; kontrollera alltid med en if-sats att du har fått ett ID som någon vill ska raderas. Inget ID, ingen DELETE-fråga.

Medlem sedan mars 20033 686 inlägg
#13

@nders skrev:

ang. ditt sista inlägg; kontrollera alltid med en if-sats att du har fått ett ID som någon vill ska raderas. Inget ID, ingen DELETE-fråga.

Skulle jag gärna göra, problemet är att jag ej vet hur man gör! Har du möjligen tid över för att leta upp/skriva den kodsnutt som jag behöver ?

Medlem sedan juni 200032 967 inlägg
#14
<%
If Request.Querystring("id") <> "" then
    ' Här lägger du koden som raderar ur databasen
End if
%>
Medlem sedan mars 20033 686 inlägg
#15

Jaha tack....Men du det funkade i alla fall med länk koden jag fick av dig!
Tack Peeer, Palle och nu också @nders...
Tur att det finns hjälpsamma människor som ni ;)

291 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
131 ms — deklarationer (db)
0 ms — hämta statistik (cache)
158 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)