webForumDet fria alternativet

Kategori -> Hur tar man egentligen bort dem?

ASP

6 svar · 308 visningar · startad av Wickmark

Medlem sedan juli 2003162 inlägg
Frågan#1

Hej alla på Webforum.nu!
Just nu sitter jag och försöker färdigställa ett forum, men har stött på några problem.

Jag vill liksom kunna ta bort kategorier i forumet, vilket är lättare sagt än gjort.

För en kategori, innehåller en underkategori, som innehåller trådar, som i sin del innehåller svar.

Alltså:

  [b][F_CAT][/b] [red]Kategorin[/red]
      \_____[b][F_FORUM][/b] [red]Underkategorin[/red]
                 \_____[b][F_THREADS][/b] [red]Trådar[/red]
                           \_____[b][F_ANSWERS][/b] [red]Svar på trådarna[/red]

Alla dessa är tabeller i databasen, men det är så tabellerna hanteras av ASP skriptet.

Jag vill såklart få bort alla underkategorier, och på samma gång ta bort alla trådar, o alla svar.
Annars ligger de bara o skräpar i databasen, i en kategori som inte finns...

Hur gör jag?

Medlem sedan feb. 200112 078 inlägg
#2

Vill du verkligen ta bort alla trådar, obönhörligen? Det verkar som lite dålig taktik för ett forum i längden. ;)

Medlem sedan juli 2003162 inlägg
#3

Du menar att jag ska spara trådarna, trots att de ligger i en kategori som har tagits bort? :S

MVH

Medlem sedan aug. 20003 575 inlägg
#4

Du skulle ju kunna flytta dom till en bättre plats.

Annars kan du ju kika på foring key och lite sådant.
Om inte databasen stödjer foring key ja då får du ju ta bort dom manuellt med Delete * from ....... för varje entiet (tabell).

** Obs det stavas nog inte foring key

Medlem sedan apr. 2001246 inlägg
#5

Ett sätt om du vill spara dem är att i stället för att ta bort en kategori, så skulle du kunna lägga till ett fält som anger om kategorin är aktiv eller inte. Och sedan plocka ut endast de aktiva kategorierna...

Medlem sedan juli 2003162 inlägg
#6

Hmmm, ni verkar misssförstått vad jag menade, så jag får väl dra det mer detaljerat :)

Här hittar ni forumet:
https://www.rubensoft.nu/LWSWE/3FactionAnphillia/start.asp?mItem=40

Som ni ser, ligger det en hel del 'underrubriker' i de olika testningskategorierna. I underrubrikerna finns sedan trådar, testnings trådar.

Det jag vill är att få bort testningskategorierna, och på samma gång ta bort underrubrikerna, trådarna och svaren.

Kanske känns onödigt när forumet är på gång på 'riktigt', men det tycker inte jag; ngn gång så tömmer man ju forumet, etc.

Det jag vill är alltså med andra ord:
1. Jag väljer att ta bort kategorin: Cat 1 som ligger i databastabellen "F_CATEGORIES"
2. Skriptet letar upp om kategorin finns, och ta bort den. Skriptet sparar ID'et i en variabel.
3. Skriptet öppnar databasfältet "F_FORUM" och slår upp alla underkategorier med samma ID som kategorin vi ville ha bort. Till slut raderas de med.
4. Forumens ID sparas i en annan variabel
5. Nu öppnas "F_THREADS" och alla trådar i de olika underkategorier som fanns raderas, men deras ID sparas i en annan variabel
6. Nu är skriptet strax slut; nu ska alla svar i de olika trådarna som nyss raderats raderas.

Jag har faktiskt ingen aning om hur man gör detta händelseförlopp så smidigt som möjligt.

Hur ska jag göra?

Oj, förresten; God Jul! :D

Medlem sedan mars 20032 inlägg
#7

Hej Wickmark
Det här är inte hela svaret, men jag hade ett liknande problem som jag löste med hjälp av följande kod. Den är hämtad från:
Planet-Source

<%
' Syntax
' Submit a QUERYSTRING to deletecomments.asp, containing
' id=[message/commentid]
' This will delete the 'Comment ID' and any comments 'under it'

' =====================
' Recursive Delete
' =====================
' For threaded message boards, for example, to have a 'tree' effect,
' it's a fun idea to use a MessageID and ParentID type column to store
' data locations. This code will delete the MessageID and any that fall
' under it - a difficult task if you have several children ID responses.
' Hope this helps - look for a full threaded application later.
' Love,
' Tim
'-----------------------------------------------------------------------------------
' NOTE: If your ASP version doesn't support Split(), download this
' handy VB Code from PSC (with a little reformatting and love, it will work)
' http://www.pscode.com/xq/ASP/txtCodeId.11235/lngWId.1/qx/vb/scripts/ShowCode.htm
'-----------------------------------------------------------------------------------

'---------------------------------------
' Sample Data
'---------------------------------------
' CommentID ParentID Subject...
' 1 0 Topic
' 2 0 DifferentTopic
' 3 2 Re: DifferentTopic
' 4 2 Re: DifferentTopic
' 5 3 Re: Re: DifferentTopic
' 6 5 Re: Re: Re: DifferentTopic
' [auto] [0=top] [sample]
'---------------------------------------
' Simply replace CommentID with a type of UNIQUE message ID
' And ParentID with a the PARENT. Set all top-level topics as '0'.
'---------------------------------------

' Recursive thread delete
' Copyright © 2001 Tim Feeley
'---------------------------------------
' Sub: DeleteC(ID)
' Deletes the comment [ID].
'---------------------------------------
Sub DeleteC(ID)
Set DeleteC_Conn = Server.CreateObject("ADODB.Connection")
DeleteC_Conn.Open ("DSN=fspace")
Set DeleteC_RS = Server.CreateObject("ADODB.Recordset")
DeleteC_RS.Open "SELECT CommentID FROM Comments WHERE CommentID = " & ID, DeleteC_Conn, 3, 3
DeleteC_RS.Delete
DeleteC_RS.Close
Set DeleteC_RS = Nothing
DeleteC_Conn.Close
Set DeleteC_Conn = Nothing
End Sub

'---------------------------------------
' Function: ReturnList(ID)
' Returns a pipe(|) delimited
' list of comments with ID as
' their 'parent.'
'---------------------------------------
Function ReturnList(ID)
On Error Resume Next
set ReturnListConn = Server.CreateObject("ADODB.Recordset")
ReturnListConn.ActiveConnection = "DSN=fspace"
ReturnListConn.Source = "SELECT CommentID, ParentID FROM Comments WHERE ParentID = " & ID
ReturnListConn.Open
If ReturnListConn.EOF Then ReturnList = 0
ReturnList_Return = ""

While Not ReturnListConn.EOF
	ReturnList_Return = ReturnList_Return & ReturnListConn("CommentID") & "\|"	
	ReturnListConn.MoveNext
Wend

' Strip the last \| from the end.
ReturnList = Left(ReturnList_Return, Len(ReturnList_Return) - 1)

ReturnListConn.Close
Set ReturnListConn = Nothing

End Function

'---------------------------------------
' Sub: DoIt(ID)
' Removes anything related to
' ID. This is the actual code.
'---------------------------------------

Sub DoIt(ID)
tempHitList = ReturnList(ID)
For parseloop = 0 to UBound(Split(tempHitList, "|"))
workingwith = Split(tempHitList, "|")(parseloop)
if workingwith <> "0" and workingwith <> "" then
For parseloop2 = 0 to UBound(Split(workingwith, "|"))
tmpHL = Split(workingwith, "|")(parseloop2)
DeleteC(tmpHL)
Call DoIt(tmpHL)
Next
end if
Next
End Sub

'---------------------------------------
' Set Variables
'---------------------------------------

' Target: The initial CommentID to remove.
Target = Request.QueryString("ID")

' Delete the actual target record.
Call DeleteC(Target)

' Search and recursive delete the rest.
DoIt(Target)

%>

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