Avatar billede cht Nybegynder
26. september 2002 - 19:08 Der er 15 kommentarer og
2 løsninger

Forum med mulighed for at svare på meddelelser

Jeg står og mangler noget kode til at udskrive meddelelserne i et debatforum, således at man kan se de forskellie beskeder og svar på beskeder bliver indrykket.

Jeg har forestillet mig noget i stil med dette:
http://activedeveloper.dk/forum/forum.asp?foid=1

Jeg har en database med en kolonne der hedder id og en anden der hedder parentid

Id er autonummereret og parentid angiver hvilken meddelelse der er svaret på og hvis det er en ny tråd, så bliver parentid angivet til 0.
Avatar billede eagleeye Praktikant
26. september 2002 - 19:23 #1
For at du kan tage højde for X dybte i dit forum bliver du nok nød til at lave en rekrusiv function som kalder sig selv eller skal du jo lavde X-antal loop inde i hinanden for at være sikker på at alle svar kommer med:


Eks på hvordan du kan lave det med en function

<HTML>
<HEAD><TITLE>Forum</TITLE></HEAD>
<BODY>
<%
'Åbner connection til databasen
Set conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("db7.mdb")

'Kald function med ForumID, startID, Level.. Sæt startID=0 for ny tråd og Level=0
UdskrivForum 1,0,1

'Luk forbinelsen til Databasen
Conn.Close
Set Conn = Nothing
%>
</BODY>
</HTML>

<%
function UdskrivForum(forumID, entryID,level)
  Set rs = Server.CreateObject("ADODB.Recordset")
  strSQL = "SELECT * FROM forumBeskeder WHERE forumID = " & forumID & " AND parentID="&entryID&" ORDER BY DATO DESC"
  set rs = Conn.Execute (strSQL)
 
  do while not rs.EOF
    for i = 1 to Level
      Response.Write ":  :"
    next
    Response.Write rs("indhold") & "<br>"
    'Kald sig selv for at finde svar på dette indlæg
    UdskrivForum forumID, rs("ID"),level+1
    rs.MoveNext
  loop
end function
%>
Avatar billede cht Nybegynder
26. september 2002 - 19:34 #2
Jeg kan ikke få det til at virke den skriver bare:

Der opstod en Microsoft VBScript-kørselsfejl fejl '800a01fb'

Der er opstået en undtagelse: 'conn.Execute'

/forum/test.asp, line 27
Avatar billede eagleeye Praktikant
26. september 2002 - 19:39 #3
hmm har du ændre connection til at passe med din database?
Avatar billede cht Nybegynder
26. september 2002 - 19:52 #4
ja, det har jeg...

jeg må indrømme at jeg kan ikke lige se hvordan du med kode vil få udskrevet alle de forskellige beskeder.
Avatar billede eagleeye Praktikant
26. september 2002 - 19:57 #5
Det forstå jeg ikke den fejl.... Har du før haft problemmer med Databaser?

Alternativ prøv denne connection:

conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& server.mappath("db7.mdb")
Avatar billede cht Nybegynder
26. september 2002 - 19:59 #6
Jeg har nedenståene kode, men jeg ville gerne høre om der evt. var nogen der havde en smartere kode, fordi de klager på mit webhotel over at der er fejl i min asp-kode (at det giver problemer) og jeg formoder at det er der fejlen ligger, selvom det ser ud til at fungere fint og det hele bliver vist, som det skal.

    Set adoConn=Server.CreateObject("ADODB.Connection")               
    adoConn.ConnectionString = strConnForum       
    adoConn.Open   

    level = 0

    Function ListItems(parentId)
        Dim strSql
        Dim adoRs
       
        strSql="SELECT * FROM msgDetail WHERE parentId = " & parentId & " ORDER BY msgTime DESC"

        Set adoRs=Server.CreateObject("ADODB.Recordset")
        adoRS.Open strSql, adoConn, 1

        Do Until adoRS.EOF

                msgtime = adoRs.Fields("msgTime").Value
                parentid = adoRs.Fields("parentid").Value
                if parentid = 0 then
                    response.write "<br>"
                end if

                response.write "<div style=""text-indent: -5; margin-left: " & 10+10*level & """>"

                textlen = 25
                if len(adoRS.Fields("headerStr").Value) > textlen then
                    aftertext = "..."
                else
                    aftertext = ""
                end if

                Response.Write "<a href=""" & thisfolder & "aspBoardDetail.asp?Id=" & adoRS.Fields("msgId").Value & """ class=forum title=""" & adoRS.Fields("author_nameStr").Value & ": " & adoRS.Fields("headerStr").Value & """><FONT FACE=""" & abFont & """>" & left(adoRS.Fields("headerStr").Value,textlen) & aftertext & "</a>&nbsp;<nobr><small><i>(" & FormatDateTime(adoRs.Fields("msgTime").Value,2) & "&nbsp;" & FormatDateTime(msgtime,3) & ")</i></small>"

                if DateDiff("d",msgtime,Now) <= 7 then
                    response.write " <span style=""background-color: #FF0000""><b><font size=1 face=""Verdana"" color=""#FFFF00"">Ny</font></b></span>"
                end if

                response.write "</nobr></div>" & VbCrLf

                level = level+1
                ListItems(adoRs.Fields("msgId").Value)
                level = level-1
                adoRS.MoveNext
        Loop
       
        adoRS.Close
        Set adoRs = Nothing

    End Function

    Listitems(0)

    adoConn.Close
    Set adoConn = Nothing
Avatar billede eagleeye Praktikant
26. september 2002 - 19:59 #7
Den udksriver en besked af gang med functionen:


<%
function UdskrivForum(forumID, entryID,level)
  Set rs = Server.CreateObject("ADODB.Recordset")
  strSQL = "SELECT * FROM forumBeskeder WHERE forumID = " & forumID & " AND parentID="&entryID&" ORDER BY DATO DESC"
  set rs = Conn.Execute (strSQL)
 
  do while not rs.EOF
    for i = 1 to Level
      Response.Write ":  :"
    next
    Response.Write rs("indhold") & "<br>"
    'Kald sig selv for at finde svar på dette indlæg
    UdskrivForum forumID, rs("ID"),level+1
    rs.MoveNext
  loop
end function
%>


Først udskrives en tråd med parenID=0 så kalder functionen sig selv med ID på den som er udskrevet for at finde meddelser som har parentID = ID..

Indlæg 1
  Svar på 1
    Saver på 1-1
  Svar på 1

Indlæg 2
  Svar på 2
  Svar på 2
    Svar på 2-1
      Svar på 2-1-1
Avatar billede eagleeye Praktikant
26. september 2002 - 20:01 #8
Ja de to script ligner hinanden meget, mit er dog strippet for alt formatering af teksten.. Så det den kun lige rykker Svar på indlæg ind med ":  :"
Avatar billede eagleeye Praktikant
26. september 2002 - 20:13 #9
Jeg har prøvet dit script på min maskine... Det virker fint den melder ikke nogle fejl. Er det et kæmpe forum du har med flere 100 indlæg så kan det godt tage lidt tid at loade siden..
Avatar billede cht Nybegynder
26. september 2002 - 22:58 #10
Det virker altså ikke hos mig!

Du kan se resultatet på denne side: http://80.63.95.180/forum/test.asp

Ja, der er en hel del indlæg på nuværende tidspunkt er der 360 indlæg.

Du finder det nuværende, som det gerne skulle se ud på denne side: http://80.63.95.180/forum/

Her er den kode jeg har prøvet med:

<HTML>
<HEAD><TITLE>Forum</TITLE></HEAD>
<BODY>
<%
'Åbner connection til databasen
Set conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("../../database/forum.mdb")

'Kald function med ForumID, startID, Level.. Sæt startID=0 for ny tråd og Level=0
UdskrivForum 59,0,1

'Luk forbinelsen til Databasen
Conn.Close
Set Conn = Nothing
%>
</BODY>
</HTML>

<%
function UdskrivForum(forumID, entryID,level)
  Set rs = Server.CreateObject("ADODB.Recordset")
  strSQL = "SELECT * FROM msgdetail WHERE msgID = " & forumID & " AND parentID="&entryID&" ORDER BY msgtime DESC"
  set rs = Conn.Execute (strSQL)
 
  do while not rs.EOF
    for i = 1 to Level
      Response.Write ":  :"
    next
    Response.Write rs("headerstr") & "<br>"
    'Kald sig selv for at finde svar på dette indlæg
    UdskrivForum forumID, rs("msgID"),level+1
    rs.MoveNext
  loop
end function
%>

Den udskriver kun første meddelelse, ingen svar eller nogen af de andre meddelelser...
Avatar billede davidfossil Nybegynder
26. september 2002 - 23:04 #11
jeg er temmelig sikker på at du bliver nødt at lave en masse while løkker inden i hinanden ... sådan har jeg også selv lavet det forum jeg bruger på de fleste af mine sider ... se f.eks. http://www.robenogknud.dk
Avatar billede cht Nybegynder
26. september 2002 - 23:10 #12
>> davidfossil

ok, det er meget fint at jeg kan se at det virker på din side, men jeg vil være meget taknemlig hvis du kan komme med noget kode til hvordan det kan gøres
Avatar billede eagleeye Praktikant
27. september 2002 - 19:08 #13
Jeg har både mit og dit script til at virke lokalt på min PC.. så det forstår jeg ikke helt, får du stadig fejl i connection..?
Avatar billede cht Nybegynder
27. september 2002 - 19:11 #14
nej, der kommer ikke fejl i connection, men den udskriver kun første besked, igen svar eller nogen af de andre beskeder :(
Avatar billede eagleeye Praktikant
27. september 2002 - 19:17 #15
Kan du vise koden i test.asp ?
Avatar billede davidfossil Nybegynder
30. september 2002 - 17:11 #16
sorry, du behøver ikke en masse loops .. se her:

http://www.html.dk/scripts/asp/00015/
Avatar billede cht Nybegynder
17. januar 2003 - 20:59 #17
-
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester