Avatar billede usse Nybegynder
15. januar 2005 - 23:22 Der er 22 kommentarer og
1 løsning

[kommentar]-[svar kommentar]-[svar svar kommentar]

Jeg er løbet ind i et lille problem.. Jeg er i færd med at udvikle et nyheds script, hvori man skal kunne svare på kommentarer.. Jeg har en løsning, men synes at den er lige lovlig bøvlet.

Eksempel:

[Kommentarer 1]
|    |_ _ _[Kommentarer2]
|    |          |
|    |          |_ _ _[Kommentarer3]
|    |          |          |
|    |          |          |_ _ _[Kommentarer4]
|    |          |
|    |          |_ _ _[Kommentarer3] 
|    |
|    |_ _ _[Kommentarer2]
|    |
|
|
[Kommentarer 1]
|

osv.. Min løsning som jeg kan komme på er at
      kommentarer[id, svar_id]
Dvs. At kommentarene som ligger under en anden kommentar, vil bruge svar_id til at linke med.. Please kom med jeres løsning, jeg vil blive meget glad :D
Avatar billede bromer Nybegynder
16. januar 2005 - 08:50 #1
Du skal - som du vist selv er kommet frem til - gemme en "parent" på hvert svar. Parent angiver, hvilken kommentar der er svaret til. Det bliver en pæn træstruktur, der burde være lige at gå til med en rekursiv funktion.
Avatar billede usse Nybegynder
16. januar 2005 - 15:36 #2
Jeg har lavet det sådan, men kan ikke få dem ordentlig sorteret, dvs. at hvis der er skrevet eks. en [Kommentar3] lige efter en [Kommentar2] så skal den blive udskrevet lige efter [Kommentar2] og derefter skal den anden [Kommentar2] komme.. plz kom med et eksempel.. :D
Avatar billede bromer Nybegynder
16. januar 2005 - 15:45 #3
hvordan ser din database ud? Du skal først finde alle de kommentarer der ikke har nogen parent. For hver af dem skal du så finde alle de kommentarer der har parent sat til den kommentar du er ved at printe etc.

Hvis du lige smider dit db design stykker jeg gerne noget slam sammen til dig
Avatar billede usse Nybegynder
16. januar 2005 - 15:53 #4
[id, tabel_id, svar_id, bruger_id, type, dato, tekst]

Jeg bruger type til at identificere hvilken Kommentar det drejer sig om eks. [Kommentarer1] eller [Kommentarer2] osv..
Avatar billede bromer Nybegynder
16. januar 2005 - 15:56 #5
hvad mener du med typen holder styr på hvilken kommentar.. står der rent faktisk "kommentar1" etc i den kolonne? bruger du mysql?
Avatar billede usse Nybegynder
16. januar 2005 - 15:57 #6
der står enten b,c,d,e osv..
Avatar billede bromer Nybegynder
16. januar 2005 - 16:01 #7
Jeg kan ikke se hvad du skal bruge type til. Hvis du istedet tilføjer en parent kolonne. Når en bruger
svarer på kommentaren med id x skal du smide x i parent cellen for svar-rækken. Det vil sige at du ender
med dette design:

[id, parent, tabel_id, svar_id, bruger_id, dato, tekst]

Og så kan du printe dem med dette:

<?php
function show_comment($parent) {
  $rs = mysql_query(sprintf("SELECT id,tekst FROM table WHERE parent = %d",$parent));
  while($row = mysql_fetch_array($rs)) {
    print $row['tekst'] . "<br/>";
    show_comment($row['id']);
  }
}
show_comment(0);
?>
Avatar billede usse Nybegynder
16. januar 2005 - 16:23 #8
Jeg kan ikke lige følge dig... det bliver ikke som jeg vil ha det.. :(
Avatar billede usse Nybegynder
16. januar 2005 - 16:24 #9
du mener at parent er det samme som svar_id
Avatar billede usse Nybegynder
16. januar 2005 - 16:25 #10
//--------- Kommentarer ---------
        $hent_kommentarer = mysql_query("SELECT * FROM kommentar WHERE tabel_id='$id' ORDER BY svar_id ASC");
while($r = mysql_fetch_array($hent_kommentarer)){
// Informationerne
        $kommentar          = $r[tekst];
        $datotid            = $r[dato];
        $bruger              = $r[bruger_id];
        $svar_id            = $r[svar_id];
        $type                = $r[type];       
        $hent_profil        = mysql_query("SELECT * FROM profil WHERE id='$bruger'");
        $profil              = mysql_fetch_assoc($hent_profil);
// Tjek om profil har et billede
        $profil_billede = fopen("upload/profil/lille/".$bruger.".jpg", "r");   
// Output   
if($r[type] == "b"){$margin = "40"; $type = "c";}
elseif($r[type] == "c"){$margin = "80"; $type = "d";}
elseif($r[type] == "d"){$margin = "120"; $type = "e";}
elseif($r[type] == "e"){$margin = "160"; $type = "f";}
elseif($r[type] == "f"){$margin = "200"; $type = "g";}
elseif($r[type] == "g"){$margin = "240"; $type = "h";}
elseif($r[type] == "h"){$margin = "280"; $type = "i";}
elseif($r[type] == "i"){$margin = "320"; $type = "j";}
elseif($r[type] == "j"){$margin = "360"; $type = "k";}
elseif($r[type] == "k"){$margin = "400"; $type = "l";}
else {$margin = "0"; $type = "b";}
if(isset($profil_billede)){
print "<div style='background-image: url(upload/profil/lille/".$bruger.".jpg); background-repeat:no-repeat; background-position: left top; margin-left:".$margin."px; margin-bottom:5px; padding-left:65px; height:50px;'>";
} else { fclose($profil_billede);
print "<div style='background-image: url(billeder/intetbillede.jpg); background-repeat:no-repeat; background-position: left top; margin-left:".$margin."px; margin-bottom:5px; padding-left:65px; height:50px;'>";
}
echo "<p><a href=?side=profilliste&id=".$bruger.">".$profil[brugernavn]."</a> @ Indlæg ";
antal_indlag($bruger);
print " ";
datotid($datotid);
print " ";
?>
<a href="#" onclick='java script:document.skriv.svar_id.value = <? print $r[id];?>; document.skriv.type.value = "<? print $type;?>";'>svar</a>
<?
print "<br>".$kommentar."</p></div>";
}
Avatar billede usse Nybegynder
16. januar 2005 - 16:31 #11
http://zerocontrol.net/justloseit/?id=1 prøv så at log på med: janus / 1212
Avatar billede bromer Nybegynder
16. januar 2005 - 16:39 #12
Ahh.. det kan godt være jeg havde overset det. svar_id er vist det samme som den parent jeg tilføjede. Hvad sker der vist du prøver min kode med svar_id istedet for parent?

Rune
Avatar billede usse Nybegynder
16. januar 2005 - 16:52 #13
id tabel_id svar_id bruger_id dato tekst
  1  1          0        1    2005-01-16 18:02:31 Hun er dejlig
  2  1          1        2    2005-01-16 00:00:00 Najs!!!!!
  3  1          2        1    2005-01-16 00:00:00 HAHA så frækt
Jeg kan ikke få det til at virke :( prøve lige at tag et kig på siden
Avatar billede usse Nybegynder
16. januar 2005 - 17:20 #14
Please help me out..
Avatar billede bromer Nybegynder
16. januar 2005 - 17:25 #15
Så burde koden altså også virke

<?php
function show_comment($parent) {
  $rs = mysql_query(sprintf("SELECT id,tekst FROM table WHERE svar_id = %d",$parent));
  while($row = mysql_fetch_array($rs)) {
    print $row['tekst'] . "<br/>";
    show_comment($row['id']);
  }
}
show_comment(0);
?>
Avatar billede usse Nybegynder
16. januar 2005 - 17:38 #16
Jeg tror faktisk det virker nu, men kan du så ikke lige tilføje hvordan den samtidig skal tage for et bestemt tabel_id, samt en smart udskydning til venstre, altså margin-left.. så ville jeg blive ûber glad :D
Avatar billede bromer Nybegynder
16. januar 2005 - 18:03 #17
Hvad mener du med tabel_id?

En indryning kan laves ved at sende en level-information med, såsom:

<?php
function show_comment($parent,$level) {
  $space = "";
  for ($i = 0;$i < $level;$i++) $space .= "&nbsp;";
  $rs = mysql_query(sprintf("SELECT id,tekst FROM table WHERE svar_id = %d",$parent));
  while($row = mysql_fetch_array($rs)) {
    print $space . $row['tekst'] . "<br/>";
    show_comment($row['id']);
  }
}
show_comment(0,0);
?>
Avatar billede usse Nybegynder
16. januar 2005 - 19:32 #18
function show_comment($svar_id, $margin){
        $r = mysql_query(sprintf("SELECT * FROM kommentar WHERE svar_id = %d", $svar_id));
  while($g = mysql_fetch_array($r)){
          $r_profil = mysql_query("SELECT * FROM profil WHERE id='$g[bruger_id]'");
        $g_profil = mysql_fetch_assoc($r_profil);
        $profil_billede = fopen("upload/profil/lille/".$g[bruger_id].".jpg", "r");
    if(isset($profil_billede)){    print "<div style='background-image: url(upload/profil/lille/".$g[bruger_id].".jpg); background-repeat:no-repeat; background-position: left top; margin-left:".$margin."; margin-bottom:5px; padding-left:65px; height:50px;'>";}
    else { fclose($profil_billede); print "<div style='background-image: url(billeder/intetbillede.jpg); background-repeat:no-repeat; background-position: left top; margin-left:".$margin."; margin-bottom:5px; padding-left:65px; height:50px;'>";}
                                    print "<p><a href=?side=profil&id=".$g[bruger_id].">".$g_profil[brugernavn]."</a> @ Indlæg "; antal_indlag($g[bruger_id]); print " "; datotid($g[dato]); print " ";
    ?>
    <a href="#" onclick='java script:document.skriv.svar_id.value = <? print $r[id];?>; document.skriv.type.value = "<? print $type;?>";'>svar</a>
    <?
    print "<br>".$g[tekst]."</div>";
          show_comment($g[id]);
  }
}
show_comment(0);

Det virkede ikke, men prøv lige at lave det efter denne funktion..

function show_comment($svar_id, $margin){
        $r = mysql_query(sprintf("SELECT * FROM kommentar WHERE svar_id = %d", $svar_id));
  while($g = mysql_fetch_array($r)){
          $r_profil = mysql_query("SELECT * FROM profil WHERE id='$g[bruger_id]'");
        $g_profil = mysql_fetch_assoc($r_profil);
        $profil_billede = fopen("upload/profil/lille/".$g[bruger_id].".jpg", "r");
    if(isset($profil_billede)){    print "<div style='background-image: url(upload/profil/lille/".$g[bruger_id].".jpg); background-repeat:no-repeat; background-position: left top; margin-left:".$margin."; margin-bottom:5px; padding-left:65px; height:50px;'>";}
    else { fclose($profil_billede); print "<div style='background-image: url(billeder/intetbillede.jpg); background-repeat:no-repeat; background-position: left top; margin-left:".$margin."; margin-bottom:5px; padding-left:65px; height:50px;'>";}
                                    print "<p><a href=?side=profil&id=".$g[bruger_id].">".$g_profil[brugernavn]."</a> @ Indlæg "; antal_indlag($g[bruger_id]); print " "; datotid($g[dato]); print " ";
    ?>
    <a href="#" onclick='java script:document.skriv.svar_id.value = <? print $r[id];?>; document.skriv.type.value = "<? print $type;?>";'>svar</a>
    <?
    print "<br>".$g[tekst]."</div>";
          show_comment($g[id]);
  }
}
show_comment(0);
Avatar billede usse Nybegynder
16. januar 2005 - 20:09 #19
Jeg har bare lavet det med javascript. men du må godt komme med et eksempel, skal nok give dig svaret..
Avatar billede bromer Nybegynder
17. januar 2005 - 08:05 #20
Undsklyld, hvar er det du er i tvivl om? Det er ikke meningen at jeg skal kode dine ting, men i højere grad hjælpe dig med at forstå, hvad der er galt. Hvad er der galt med den kode du lige har pastet?
Avatar billede usse Nybegynder
17. januar 2005 - 17:59 #21
Smid lige et svar makker
Avatar billede bromer Nybegynder
17. januar 2005 - 19:20 #22
jo tak.. gik du det til at virke?
Avatar billede usse Nybegynder
17. januar 2005 - 19:30 #23
nej ikke ned mellemrum.. Jeg lavede bare en extra celle, og så lidt java.
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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