Avatar billede dugi Nybegynder
05. oktober 2004 - 21:12 Der er 8 kommentarer

Hjælp til FOR while løkker

Hey Eksperter.

Jeg har et problem.
Er ved at lave et kommentarsystem, hvor man besvare allerede skrevne kommentarer, en mindre debat system faktisk.

Lige nu ser mit system så ledes ud.
Kodning:
<?php
function visKommentarer($nyheds_id, $kommentar_id, $level=0)
{
  $visKommentarer_sql = mysql_query("SELECT * FROM nyheder_kommentarer WHERE nyhedsid = '$nyheds_id' AND besvarid = '$kommentar_id' order by id asc");
  while($visKommentar = mysql_fetch_array($visKommentarer_sql))
  {
    $visKommntar_total = mysql_num_rows(mysql_query("SELECT * FROM nyheder_kommentarer WHERE nyhedsid = '$nyheds_id' AND besvarid = '$kommentar_id'"));
?>
  <tr>
    <td>
    <table width="100%" align="right" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <?php
        for($i = 0; $i < $level; $i++) echo '<td width="10" height="1" valign="top"></td>';
        ?>
        <td height="2">
      <tr>
        <?php
        for($i = 0; $i < $level; $i++) echo '<td width="10" valign="top"></td>';
        ?>
        <td>
        <a name="<?php echo "$visKommentar[kommentarid]"; ?>"></a>
        <table width="100%" align="right" border="0" cellspacing="0" cellpadding="0">
          <tr>
            <td>
          <table width="100%" border="0" cellspacing="0" cellpadding="0">
            <tr>
          <td width="6" height="20" background="images/kommentar_top_venstre.gif"></td>
          <td width="97%" height="20" background="images/kommentar_top_midt.gif" class="kommentarer_top">#<?php echo "$visKommentar[kommentarid]"; ?></td>
          <td width="6" height="20" background="images/kommentar_top_hoejre.gif"></td>
        </tr>
          </table>
        </td>
          </tr>
          <tr>
            <td>
        <table width="100%" border="0" cellspacing="0" cellpadding="0">
          <tr>
            <td width="6" height="20" background="images/kommentar_midt_venstre.gif"></td>
        <td width="97%" height="20" background="images/kommentar_midt_midt.gif"></td>
        <td width="6" height="20" background="images/kommentar_midt_hoejre.gif"></td>
          </tr>
        </table>
        </td>
          </tr>
          <tr>
            <td>
        <table width="100%" border="0" cellspacing="0" cellpadding="0">
          <tr>
        <td width="6" height="46" background="images/kommentar_bund_venstre.gif"></td>
        <td width="97%"height="46" background="images/kommentar_bund_midt.gif"></td>
        <td width="6" height="46" background="images/kommentar_bund_hoejre.gif"></td>
              </tr>
        </table>
        </td>
          </tr>
        </table>
        </td>
      </tr>
    </table>
    </td>
    </tr>
    <?php
        visKommentarer($_GET["id"], $visKommentar["kommentarid"], $level+1);
      }
    }

    $kommentar_sql = mysql_query("SELECT * FROM nyheder_kommentarer WHERE nyhedsid = '$id' AND besvarid = '0' order by id asc");
    while($kommentar = mysql_fetch_array($kommentar_sql))
    {
    ?>
    <tr>
      <td>
      <table width="100%" align="right" border="0" cellspacing="0" cellpadding="0" noWrap rowSpan="2">
        <tr>
          <td>
          <a name="<?php echo "$kommentar[kommentarid]"; ?>"></a>
          <table width="100%" align="right" border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td>
          <table width="100%" border="0" cellspacing="0" cellpadding="0">
            <tr>
          <td width="6" height="20" background="images/kommentar_top_venstre.gif"></td>
          <td width="97%" height="20" background="images/kommentar_top_midt.gif" class="kommentarer_top">#<?php echo "$kommentar[kommentarid]"; ?></td>
          <td width="6" height="20" background="images/kommentar_top_hoejre.gif"></td>
        </tr>
          </table>
          </td>
            </tr>
            <tr>
              <td>
          <table width="100%" border="0" cellspacing="0" cellpadding="0">
            <tr>
          <td width="6" height="20" background="images/kommentar_midt_venstre.gif"></td>
          <td width="97%" height="20" background="images/kommentar_midt_midt.gif"></td>
          <td width="6" height="20" background="images/kommentar_midt_hoejre.gif"></td>
        </tr>
          </table>
          </td>
            </tr>
            <tr>
              <td>
          <table width="100%" border="0" cellspacing="0" cellpadding="0">
        <tr>
          <td width="6" height="46" background="images/kommentar_bund_venstre.gif"></td>
          <td width="97%"height="46" background="images/kommentar_bund_midt.gif"></td>
          <td width="6" height="46" background="images/kommentar_bund_hoejre.gif"></td>
        </tr>
          </table>
          </td>
            </tr>
          </table>
          </td>
        </tr>
      </table>
    </td>
  </tr>
  <?php
  visKommentarer($id, $kommentar["id"], 1);
  ?>
  <tr>
    <td height="5">
  </tr>
<?php
}
?>

Visuelt: http://www.dr-multimedia.dk/DuGi/kommentarsys_01.gif

Mit problem:
Som i kan se, for hvergang der blir en kommentar besvaret en kommentar, laver den en ekstra td, for at få den der "ryk ind" effekt. Mit problem er at jeg gerne vil have tegnet streger så det kommer til at se sådan her ud: http://www.dr-multimedia.dk/DuGi/kommentarsys_02.gif

Men jeg kan ikke få lavet en for($i = 0; $i < $level; $i++) løkke som gør det. Da den jo skal gå gennem alle td felter og regner ud hvor bg billedet med stregen skal være.

Håber virkelig der er nogen derude der kan hjælpe mig.
Dette er det eneste jeg mangler før mit system er færdigt, og har siddet hele dagen og kæmpet røven ud af laserne for at få det til at virke.

På forhånd tusind mange gange tak!

Med Venlig Hilsen
Morten Rugaard
Avatar billede knudx Nybegynder
05. oktober 2004 - 23:25 #1
De lodrette streger bor i de 'ekstra' td'er <width=10px> du sætter ind til venstre for kommentarer. De kan se ud på 4 måder:
1. ingen streg
fordi den pågældende level er afsluttet, men der er flere kommentarer på højere level.
2. bare lodret streg
der hvor der kommer flere kommentarer på samme level, efter at dem på højere level er slut
3. vandret hak, lodret streg fortsætter
viser at en kommentart hører til et level
4. vandret hak, lodret streg slutter
viser at komm. er den sidste på sit level
Avatar billede dugi Nybegynder
05. oktober 2004 - 23:29 #2
præcis også sådan jeg har bygget det op, altså i td.
Men skal jo bruge en løkke som finder ud af HVORNÅR og HVOR den skal indsætte de rigtige billeder!?
Avatar billede knudx Nybegynder
06. oktober 2004 - 01:41 #3
Du har på en måde allerede løkken---
        <?php
        for($i = 0; $i < $level; $i++) echo '<td width="10" valign="top"></td>';
        ?>
den skal bare raffineres lidt...

Hvad med at have en global array, som fortæller om de lavere niveauer er afsluttet,  noget i denneher retning:

$lower_levels = array();
function visKommentarer ($nyhedsId, $besvarId) {
global $lower_levels;

//SQL og ting og sager...

$vis_kommentarer_total = mysql_num_rows (...) ; // UDENFOR LØKKE

while ($kommentarer = mysql_fetch_array(...)) {
for ($i=0; $i<count($lower_levels); $i++) {
if ($lower_levels[$i]) {
  tegn streg tilfælde (2) ovenfor
} else {
  tegn (1) (tom td[width=10px])
}
}
//-find ud af om der er flere kommentarer efter denne
if($comment_after_this = (--$vis_kommentar_total > 0)) {
-tegn ramme tilfælde (3) ovenfor
} else {
-tilfælde (4)
}

$lower_levels[] = $comment_after_this;
visKommentarer ($nyhedsId, $kommentarer['kommentarId']);
unset $lower_levels[];
}
}

Håber du forstår hvad jeg mener -- det er ved at være sent her...
;^)- Jakob
Avatar billede dugi Nybegynder
06. oktober 2004 - 12:55 #4
Hej Jakob.

Det begynder at ligne noget, men det er dog stadig ikke helt optimalt.
:( - Andre forslag?

Eller kan du måske se fejlen i den kode du har pastet?


På forhånd tak
Avatar billede knudx Nybegynder
06. oktober 2004 - 20:10 #5
?!? Hvad fa'en ER der galt med EKSPERTEN ?!? nogle gange når jeg skriver kommer det ikke med
Avatar billede knudx Nybegynder
06. oktober 2004 - 20:12 #6
--- nå der var den...
Jamen det er vel snarere et skelet end færdig kode... Har du implementeret det? Hvad skete der?
Avatar billede knudx Nybegynder
06. oktober 2004 - 22:00 #7
spørgsmålet afsluttet? Ingen respons? Jamen selv tak så!
Avatar billede knudx Nybegynder
06. oktober 2004 - 22:35 #8
Men egentlig ka' jeg godt se en fejl - "unset" er brugt forkert ; de sidste linier skal være sådan:

array_push ($lower_levels, $comment_after_this);
visKommentarer ($nyhedsId, $kommentarer['kommentarId']);
array_pop ($lower_levels);
}}
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