Kommentarfunktion enthält Bugs

Anima97

Mitglied
Guten Tag,
ich habe zwei Probleme mit der Kommentarfunktion meiner Website:
1. Es wird nur der erste Kommentar zu einem Eintrag aus der Tabelle ausgelesen
2. Die JavaScript-Funktionen sind irgendwie disabled, wenn ein Eintrag noch nicht kommentiert wurde. Es gibt nämlich zwei Links unter dem Artikel, die via JavaScript ein Formular öffnen bzw. die Kommentare anzeigen, und irgendwie geht das nicht mehr.

Ich vermute das bei beiden Bugs meine gedoppelte while-Schleife dran Schuld ist. Allerdings weiß ich nicht so ganz genau, wie ich das Problem behebe.

Hier die PHP-Datei: http://pastebin.com/c78Xbsfe

Und hier die JS-Datei mit den Funktionen zum Anzeigen des Formulars bzw. der Kommentare (bezüglich Bug 2):

Code:
/**
  * Main functions for Manu@web
  *
  * @author		Manuel J.
  * @copyright	2011 Manuel J.
  * @version	1.0.0
  */

// spoils a formular div and hides the text
function spoilForm(textdiv, formdiv) {
	if (document.getElementById) {
		var text = document.getElementById(textdiv);
		var form = document.getElementById(formdiv);
		text.style.visibility = 'hidden';
		text.style.display = 'none';
		
		if (form.style.visibility == 'visible') {
			form.style.visibility = 'hidden';
			form.style.display = 'none';
		}
		else {
			form.style.visibility = 'visible';
			form.style.display = 'block';
		}
	}
}

// spoils a text div and hides the formular
function spoilText(textdiv, formdiv) {
	if (document.getElementById) {
		var text = document.getElementById(textdiv);
		var form = document.getElementById(formdiv);
		form.style.visibility = 'hidden';
		form.style.display = 'none';

		if (text.style.visibility == 'visible') {
			text.style.visibility = 'hidden';
			text.style.display = 'none';
		}
		else {
			text.style.visibility = 'visible';
			text.style.display = 'block';
		}
	}
}
 
Öhm soll jetzt keine böswillige Kritik sein, aber willst du deine WHILE-Schleifen nicht etwas kürzen?
Die Variablen deklarationen kannste alle vor die WHILE setzten dadurch wird, meiner Meinung, alles etwas übersichtlicher.
Und du könntest die Ansicht von den Berechnungen trennen, dann wirds noch viel übersichtlicher.
Aber das war nicht gefragt sorry ...

...nja habs mir angesehen, und finde im PHP-Skript keinen Fehler, berichtigt mich bitte:

PHP:
//HTML / HEAD & Co
//Haufen DIV-Tags
            <?php
            $sql = 'SELECT id, timestamp, title, entry FROM mw_news ORDER BY id DESC';
            $query = mysql_query($sql) OR die(mysql_error());
            $rows = mysql_num_rows($query);
            $rowsperpage = 3;
            $totalpages = ceil($rows / $rowsperpage);
            
                    #Hab ich mal hochgesetzt aus WHILE_2
                   
                    $mydate = mktime($hour, $minute, $second, $month, $day, $year);
                    $weekday = date('w', $mydate);
                    $weekdays = array('Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag');
                    $weekdayname = $weekdays[$weekday];

                    /**
                     *HIER IST SQL 2
                     */
                    $sql2 = 'SELECT id, newsid, timestamp, username, entry FROM mw_comments WHERE newsid = ' . $newsid . '';
                    $query2 = mysql_query($sql2) OR die(mysql_error());
                    $rows2 = mysql_num_rows($query2);
                    
            if (isset($_GET['page']) && is_numeric($_GET['page'])) {
                $currentpage = (int) $_GET['page'];
            } else {
                $currentpage = 1;
            }
            if ($currentpage < 1) {
                $currentpage = 1;
            }

            if ($currentpage > $totalpages) {
                $currentpage = $totalpages;
            }
            
            $offset = ($currentpage - 1) * $rowsperpage;

            /**
             *HIER IST SQL_1
             */
            $sql = "SELECT id, timestamp, title, entry FROM mw_news ORDER BY id DESC LIMIT $offset, $rowsperpage";
            $query = mysql_query($sql) OR die(mysql_error());



            if ($rows == 0) {
                echo "Es sind keine Einträge vorhanden! <br /><br />\n\n";
            } else {
                
                /**
                 *WHILE 1
                 */
                 #query_1
                while ($row = mysql_fetch_object($query)) {
 $newsid = $row->id;
                    $entry = nl2br($row->entry);
                    $timestamp = $row->timestamp;
                    $hour = date('H', $timestamp);
                    $minute = date('i', $timestamp);
                    $second = date('s', $timestamp);
                    $month = date('m', $timestamp);
                    $day = date('d', $timestamp);
                    $year = date('Y', $timestamp);
                    $date = date('d.m.Y', $timestamp);
                    $time = date('H:i', $timestamp);
                    echo '<div class="newsbox"><b>' . $row->title
                            .'</b><div style="float:right;">' . $weekdayname
                            . ', der ' . $date . ' ' . $time
                         . '</div><hr><br>' . $entry
                         . "<br /><br />\n\n";
                    echo '<hr style="border-style:dashed;">
                          <a href="javascript:void(0);" onclick=\'spoilText("comments' . $newsid . '", "commentform' . $newsid . '");\' style=\'font-size:14px;\'>'
                          . $rows2 . ' Kommentar(e)</a>
                          &bull; <a href=\'javascript:void(0);\' onclick=\'spoilForm("comments' . $newsid . '", "commentform' . $newsid . '");\' style=\'font-size:14px;\'>Kommentar schreiben</a>';


                  /**
                   *WHILE 2
                   */
                    #$query_2
                    while ($row2 = mysql_fetch_object($query2)) {

                        $username = $row2->username;
                        $entry2 = nl2br($row2->entry);
                        $timestamp2 = $row2->timestamp;
                        $date2 = date('d.m.Y', $timestamp2);
                        $time2 = date('H:i', $timestamp2);

                        echo '<div id=\'comments' . $newsid . '\' style=\'visibility:hidden; display:none;\'><br><div id=\'comment\'>';

                        if ($rows2 == 0) {
                            echo 'Es sind keine Kommentare vorhanden!';
                        } else {
                            echo '<b>' . $username . ' schrieb am ' . $date2 . ' um ' . $time2 . ' Uhr:</b><br>' . $entry2 . '<br><br>';
                        }

                        echo '</div></div><div id=\'commentform' . $newsid . '\' style=\'visibility:hidden; display:none;\'><br><form>Dein Name:<br><input type=\'text\'><br><br>Dein Kommentar:<br><textarea rows=\'4\' cols=\'40\'></textarea><br><input type=\'submit\' value=\'Hinzufügen\'></form><br></div>';
                    }
                    echo '</div>';
                }
            }
            $range = 3;
            echo '<div id=\'pagination\'>';

            if ($currentpage > 1) {
                echo '<a href=\'index.php?site=home&page=1\'><< </a>';
                $prevpage = $currentpage - 1;
                echo '<a href=\'index.php?site=home&page=' . $prevpage . '\'>< </a>';
            }

            for ($i = ($currentpage - $range); $i < (($currentpage + $range) + 1); $i++) {
                if (($i > 0) && ($i <= $totalpages)) {
                    if ($i == $currentpage) {
                        echo ' [<b>' . $i . '</b>] ';
                    } else {
                        echo ' <a href=\'index.php?site=home&page=' . $i . '\'>' . $i . '</a> ';
                    }
                }
            }

            if ($currentpage != $totalpages) {
                $nextpage = $currentpage + 1;
                echo '<a href=\'index.php?site=home&page=' . $nextpage . '\'> ></a>';
                echo '<a href=\'index.php?site=home&page=' . $totalpages . '\'> >></a>';
            }
            echo '</div>';
            ?>
//REST HTML

Mit der FOR-Schleife würd ich mir etwas überlegen ...

Lieber Gruß,

Alexander
 
Zuletzt bearbeitet:
Zurück