[PHP&MYSQL] Neue Beiträge/Threads anzeigen in selbstprogrammiertem Forum

BadKiss

Mitglied
[PHP&MYSQL] Neue Beiträge/Threads richtig anzeigen in selbstprogrammiertem Forum

Hallo zusammen,

ich habe (leider) mal wieder ein kleines Problem :(

Ich habe mir jetzt ein eigenes Forum gecodet, welches soweit auch alles super klappt, außer die "neue Beiträge" Anzeige.
Es klappt soweit auch alles, wenn ein neuer Beitrag zu einem bereits bestehenden Thread erscheint.
Eröffnet man jetzt allerdings einen neuen Thread, so wird das nicht angezeigt sondern lediglich der neue Beitrag in dem bereits vorhandenen Thread.

Hier einmal kurz meine Abfragen, damit man es genauer versteht, was ich meine bzw wie ich es bisher umgesetzt habe:

$row_u['board_utopics_id'] ist die ID der Topics/der Kategorie (zb Main >> Allgemein).

PHP:
// neuer Thread
$sql_c = "SELECT *
		  FROM board_utopics, board_thread, member
		  WHERE board_thread_topic_id = board_utopics_id
		  AND board_utopics_id = ".$row_u['board_utopics_id']."
		  AND board_thread_creator = member_id
		  GROUP BY board_thread_id
		  ORDER BY board_thread_last_post DESC
		  LIMIT 1";
$result_c = mysql_query($sql_c) OR die(mysql_error());
$anz_c = mysql_num_rows($result_c);
$row_c = mysql_fetch_assoc($result_c);

PHP:
// neuer Beitrag zu bestehendem Thread
$sql_d = "SELECT *
		  FROM board_utopics, board_thread, member, board_answer
		  WHERE board_thread_topic_id = board_utopics_id
		  AND board_utopics_id = ".$row_u['board_utopics_id']."
		  AND board_answer_creator = member_id
		  AND board_answer_thread_id = board_thread_id
		  GROUP BY board_thread_id, board_answer_id
		  ORDER BY board_answer_date DESC
		  LIMIT 1";
$result_d = mysql_query($sql_d) OR die(mysql_error());
$anz_d = mysql_num_rows($result_d);
$row_d = mysql_fetch_assoc($result_d);

PHP:
// Prüfen, ob Member neuen Beitrag/Thread schon gelesen hat
if($anz_d || $anz_c) {
	if($anz_d) {
		// neuer Beitrag zu bestehendem Thread
		$sql_y = "SELECT *
				  FROM member_thread_read, board_thread, board_utopics
				  WHERE board_utopics_id = ".$row_u['board_utopics_id']."
				  AND board_utopics_id = board_thread_topic_id
				  AND board_thread_id = ".$row_d['board_thread_id']."
				  AND member_thread_read_member_id = ".$_SESSION['member_id']."
				  AND member_thread_read_thread_id = board_thread_id
				  AND member_thread_read_last_read > board_thread_last_post";
	} elseif($anz_c) {
		// neuer Thread
		$sql_y = "SELECT *
				  FROM member_thread_read, board_thread, board_utopics
				  WHERE board_utopics_id = ".$row_u['board_utopics_id']."
				  AND board_utopics_id = board_thread_topic_id
				  AND board_thread_id = ".$row_c['board_thread_id']."
				  AND member_thread_read_member_id = ".$_SESSION['member_id']."
				  AND member_thread_read_thread_id = board_thread_id
				  AND member_thread_read_last_read > board_thread_last_post";
	}
	$result_y = mysql_query($sql_y) OR die(mysql_error());
	$anz_y = mysql_num_rows($result_y);
	if($anz_y) {
		$threadreadyet = '<img src="/image/old_posts.png" alt="Old Posts" />';
	} else {
		$threadreadyet = '<img src="/image/new_posts.png" alt="New Posts" />';
	}
} else {
  $threadreadyet = '<img src="/image/old_posts.png" alt="Old Posts" />';
}

Ich hoffe, ihr versteht den Code ^ ^'
Sollte das evtl. einfacher gehn, so freu ich mich auf Vorschläge :)
Und ich hoffe, jmd kann mir helfen, ich komm einfach nicht weiter im Moment :(
 
Zuletzt bearbeitet:
Wenn du machst

Code:
if($anz_d || $anz_c) { 
    if($anz_d) { 
        // neuer Beitrag zu bestehendem Thread 
    } elseif($anz_c) { 
        // neuer Thread 
    }

dann liest er dank else if() neue Threads nur dann, wenn es keine neuen Beiträge in bestehenden Threads gibt.

Nachdem du auch noch für beide Abfragen sql_y, anz_y und result_y verwendest, würde er selbst wenn er beides lesen würde die erste Abfrage mit der zweiten Abfrage überschreiben.

In kurz: Wenn du beide Abfragen auf einmal brauchst, kannst du sie nicht beide auf einmal checken, bzw. musst verschiedene Variablen verwenden.
 
Ohne else halt und mit verschiedenen Variablen

Code:
if($anz_d)
  {
     $sql_y = .....
     $result_y = ...
     $anz_y = ...
  }
if($anz_c)
  {
     $sql_z = .....
     $result_z = ...
     $anz_z = ...
  }
 
Das hilft mir leider auch nicht weiter, er zeigt immer noch das falsche Symbol an..

Ebenso hab ich das Problem bei der Ausgabe des letzten Posts, ohne der If-Anweisung dort gibt er mir für beides das aktuellste aus..

PHP:
// Neuer Post zu bestehendem Thread
if($anz_d) {
  $sql_z = "SELECT *
		    FROM board_answer
		    WHERE board_answer_id = ".$row_d['board_answer_id']."";
	$result_z = mysql_query($sql_z) OR die(mysql_error());
	$anz_z = mysql_num_rows($result_z);
	$row_z = mysql_fetch_assoc($result_z);
	$ansid = $row_z['board_answer_answer_id'];
	$i = ceil($ansid / 10);
  echo 'von <a href="index.php?site=member&amp;id='.$row_d['member_id'].'">'.$row_d['member_nick'].'</a>
				<a href="index.php?site='.$_GET['site'].'&amp;topic='.$row_d['board_utopics_id'].'&amp;thread='.$row_d['board_thread_id'].'&amp;page='.$i.'#post='.$row_d['board_answer_id'].'">&raquo;</a><br />
	'.date('d.m.y, H:i',$row_d['board_answer_date']);
	echo '<br />';
}
// neuer Thread
if($anz_c) {
	echo 'von <a href="index.php?site=member&amp;id='.$row_c['member_id'].'">'.$row_c['member_nick'].'</a>
				<a href="index.php?site='.$_GET['site'].'&amp;topic='.$row_c['board_utopics_id'].'&amp;thread='.$row_c['board_thread_id'].'&amp;page=1">&raquo;</a><br />
	'.date('d.m.y, H:i',$row_c['board_thread_date']);
}

Die weitere Abfrage in $anz_d soll mir lediglich die richtige Seitenzahl ausgeben.

Und wie gesagt, er zeigt mir trotzdem weiterhin das falsche Symbol an.
Lediglich wenn der 1. Thread in der Liste ungelesen ist, zeigt er das "neue Beiträge" Symbol an, anders das "keine neuen Beiträge" Symbol :(
 
Um das richtige Symbol zu bekommen musst du natürlich auch beide Ergebnisse prüfen.

Code:
if($anz_y || $anz_z) { 
        $threadreadyet = '<img src="/image/old_posts.png" alt="Old Posts" />'; 
    } else { 
        $threadreadyet = '<img src="/image/new_posts.png" alt="New Posts" />'; 
    }

Wenn in deiner SELECT Abfrage am Ende LIMIT 1 steht, dann wird mysql_num_rows() da auch nur 1 Datensatz finden.
Wenn du wissen willst wieviele Datensätze es dazu gibt, musst du die Abfrage ohne LIMIT neu definieren, mal abgesegen davon, dass ODER BY, GROUP BY und DESC für mysql_mun_rows unnötig sind.
 
So hatte ich es schon probiert, allerdings hatte das nichts bewirkt.
Ich versuch aber noch etwas anderes, wenn noch ein Vorschlag kommt, bitte posten.
 
Zurück