Seite 1 von 2

News-Script -> Kommentare / Archiv

Verfasst: 16.03.2003 07:34
von [ENW]Eagle
Hallo allem zusammen!
Lange ist's her, seit ich bei euch war und ich komme jetzt zu euch, weil ich ein (wahrscheinlich logisches) Problem habe und es einfach nicht hinkriege, dieses Problem zu lösen.

Wie schon im Titel erwähnt, geht es um mein selbstgeschriebenes News-Script und dort um die Kommentar-Funktion(en) und das News-Archiv.

Ich habe auf der News-Seite die aktuellsten News aufgelistet und bei jeder News steht rechts oben "Comments (<Anzahl>)" und "Comments" ist ein anklickbarer Link zur Datei "comments.php" (Was für eine Überraschung... :D).
Das Problem ist eigentlich nicht nur eins, sondern 2:

1. Wie kriege ich es hin, dass das Script nur die Anzahl an Kommentaren für die entsprechende News zählt und anzeigt?!?

Code: Alles auswählen

News.php:

$connection = mysql_connect($host, $user, $pass)
$database = mysql_select_db($database);

$query = mysql_query("SELECT *
			FROM news
			ORDER BY nid DESC
			LIMIT 0,5");

while ($news = mysql_fetch_array($query))
{
	list ($comments) = mysql_fetch_row(mysql_query("SELECT
							COUNT(*)
							FROM comments"));

	echo "<table width=\"500px\" border=\"0px\" cellPadding=\"3px\" cellSpacing=\"0px\" align=\"left\">
			<tr>
				<td class=\"newsheader1\" align=\"left\"> " . $news['genre'] . " » " . $news['title'] . " </td>
				<td class=\"newsheader2\" align=\"right\"> <a href=\"" . $nsp . 'comments.' . $phpEx . '?id=" . $news['nid'] . "' . "\" target=\"_top\">Comments</a> (" . $comments . ") </td>
			</tr>
			<tr align=\"left\" valign=\"middle\">
				<td class=\"newsbody\" colspan=\"2\">
					" . nl2br(bbc($news['text'])) . "
				</td>
			</tr>
			<tr>
				<td class=\"newsfooter1\" align=\"left\">
					Written By: " . $news['poster'] . "
				</td>
				<td class=\"newsfooter2\" align=\"right\">
					[ " . date($date, $news['postdate']) . " (CET) ]
				</td>
			</tr>
		</table>
		<br clear=\"all\">
		<br />\n";
}

2. Wie kriege ich es hin, dass beim Anklicken des "Comments-Links" nur die Kommentare angezeigt werden, die auch zu dieser News gehören?!?

Code: Alles auswählen

Comments.php:

$connection = mysql_connect($host, $user, $pass);
$database = mysql_select_db($database);

$query1 = mysql_query("SELECT *
			FROM news
			WHERE $id = nid");

echo "<table width=\"500px\" border=\"0px\" cellPadding=\"3px\" cellSpacing=\"0px\" align=\"left\">
	<tr>
		<td class=\"newsheader1\" colspan=\"2\" align=\"left\"> " . $news['genre'] . " » " . $news['title'] . " </td>
	</tr>
	<tr align=\"left\" valign=\"middle\">
		<td class=\"newsbody\" colspan=\"2\">
			" . nl2br(bbc($news['text'])) . "
		</td>
	</tr>
	<tr>
		<td class=\"newsfooter1\" align=\"left\">
			Written By: " . $news['poster'] . "
		</td>
		<td class=\"newsfooter2\" align=\"right\">
			[ " . date($date, $news['postdate']) . " (CET) ]
		</td>
	</tr>
</table>
<br clear=\"all\">
<br />\n
\n
<hr width=\"80%\" align=\"center\" />\n";

$query2 = mysql_query("SELECT *
			FROM comments
			WHERE cid = nid");

while ($comments = mysql_fetch_array($query2))
{
	echo "<table width=\"500px\" border=\"0px\" cellPadding=\"3px\" cellSpacing=\"0px\" align=\"left\">
	<tr><td class=\"newsheader1\" colspan=\"2\" align=\"left\"> " . $comments['title'] . " </td></tr>
	<tr align=\"left\" valign=\"middle\">
		<td class=\"newsbody\" colspan=\"2\">
			" . nl2br(bbc($comments['text'])) . "
		</td>
	</tr>
	<tr>
		<td class=\"newsfooter1\" align=\"left\">
			Written By: " . $comments['poster'] . "
		</td>
		<td class=\"newsfooter2\" align=\"right\">
			[ " . date($date, $comments['postdate']) . " (CET) ]
		</td>
	</tr>
</table>
<br clear=\"all\">
<br />\n";
}
?>
<hr width="80%" align="center" />
<?php
switch ($mode)
{
	default:
		echo "
<form method=\"post\" name=\"post\" action=\"comments.php?action=post\">
	<table class=\"news\" width=\"390\" border=\"0\" cellPadding=\"0\" cellSpacing=\"0\" align=\"center\">
		<tr><td> Kommentar: </td><td><textarea rows=\"15\" name=\"comment\" cols=\"50\"></textarea> </td></tr>
		<tr><td> &nbsp; </td></tr>
		<tr><td> Poster: </td><td> <input type=\"text\" name=\"poster\" size=\"30\" maxlength=\"30\" /> </td></tr>
		<tr><td> &nbsp; </td></tr>
		<tr><td colspan=\"2\" align=\"center\">
			<input type=\"submit\" value=\"Posten\" name=\"Send\">
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
			<input type=\"reset\" value=\"Löschen\" name=\"Reset\">
		</td></tr>
</table>
</form>\n";
		break;

	case "post":
		// Keine Poster-Name => Fehler
		if ($poster == "")
		{
			echo "
<div align=\"center\">
	Du hast deinen Namen vergessen ...<br />
	» <a href=\"javascript:history.back();\">Zum Post-Formular</a> «
</div>\n";
		}

		// Kein Kommentar => Fehler
		if ($comment == "")
		{
			echo "
<div align=\"center\">
	Du hast deinen Kommentar-Text vergessen ...<br />
	» <a href=\"javascript:history.back();\">Zum Post-Formular</a> «
</div>\n";
		}

		// Alles OK => Speichern
		if ($poster != "" && $comment != "")
		{
			$query = "INSERT INTO comments
					(id,title,text,poster,postdate)
					VALUES('','$title','$comment','$poster','" . time() . "')";

			$result = mysql_query($query);

			echo "
<div align=\"center\">
	Kommentar erfolgreich eingetragen!<br />
	[ <a href=\"" . $_SERVER['PHP_SELF'] . "\" target=\"_self\">Zurück zu den Kommentaren</a> ]
</div>";
		}
}

Und ich habe ein Problem mit dem Archiv. Ich möchte eine "blätter-Funktion" einbauen - man soll auf die erste, letzte, vorherige und nächste Seite "blättern" können.

Code: Alles auswählen

Archive.php:

$connection = mysql_connect($host, $user, $pass)
$database = mysql_select_db($database);

$query = mysql_query("SELECT *
			FROM news
			ORDER BY id DESC
			LIMIT 1,99");

while ($news = mysql_fetch_array($query))
{
	list ($comments) = mysql_fetch_row(mysql_query("SELECT COUNT(*) FROM comments"));

	echo "<table width=\"500px\" border=\"0px\" cellPadding=\"3px\" cellSpacing=\"0px\" align=\"left\">
			<tr>
				<td class=\"newsheader1\" align=\"left\"> " . $news['genre'] . " » " . $news['title'] . " </td>
				<td class=\"newsheader2\" align=\"right\"> <a href=\"" . $nsp . 'comments.' . $phpEx . '?id=" . $comments . "' . "\" target=\"_top\">Comments</a> (" . $comments . ") </td>
			</tr>
			<tr align=\"left\" valign=\"middle\">
				<td class=\"newsbody\" colspan=\"2\">
					" . nl2br(bbc($news['text'])) . "
				</td>
			</tr>
			<tr>
				<td class=\"newsfooter1\" align=\"left\">
					Written By: " . $news['poster'] . "
				</td>
				<td class=\"newsfooter2\" align=\"right\">
					[ " . date($date, $news['postdate']) . " (CET) ]
				</td>
			</tr>
		</table>
		<br clear=\"all\">
		<br />\n";
}
===============================================

Ist der Code in den Dateien richtig (Bestimmt nicht, oder?!?)
Kann mir da jemand helfen, wie ich alle diese Probleme gelöst bekomme?!? :-?

Danke schon mal für all eure nette Hilfe! ;) :)

MfG, Martin

P. S.: Könnte jemand mal meinen Nickname in "Eagle" ändern, weil ENW habe ich als Ex-Leader aufgelöst... - Danke! :)

Verfasst: 16.03.2003 12:14
von jasc
Also ich bin mir jetzt nicht sicher, aber ist nid in deinem Abfragen nicht eine Variable ? Dann müsste nämlich ein $ davor, also $nid. Aber vielleicht habe ich das auch falsch gesehen :oops:.

EDIT: Achja, wenn du schauen willst, ob $id den Wert von nid hat, dann müssen 2 = hin, also WHERE $id == $nid

Verfasst: 16.03.2003 13:47
von Gast
Also ich erklär's nochmal:

Ich will eine Überprüfung machen, dass er überprüft, ob die Comments-Id auch ja der News-Id entspricht, denn anders kann ich ja die News-Comments nicht mit der News verbinden oder?!?

Aber wie soll ich das anstellen?!? Wo soll ich in welche Zelle welches Feld einfügen?!? - Das klappt irgendwie nicht...

Verfasst: 16.03.2003 13:48
von [ENW]Eagle
Der Post da oben ist von mir, ich war nur nicht eingeloggt... ;)

Verfasst: 16.03.2003 15:47
von jasc
Haste meine beiden Verbesserungsvorschläge mal probiert ?

Verfasst: 16.03.2003 16:35
von [ENW]Eagle
Naja, was heißt probiert - ich weiß einfach nicht, wie ich das bewerkstelligen soll, dass das Script nur die Kommentare anzeigt, die auch zu der News gehören - wie macht man das denn?!? :-? :( :o :roll:

Verfasst: 16.03.2003 16:50
von jasc
Jede News hat eine id. Die Comments werden alle in einer eigenen Tabelle gespeichert und erhalten ebenfalls ein Feld mit der id. Wenn der Kommentar also zur News mit der id 2 gehört, dann bekommt er auch die id 2. Beim Anzeigen vergleichst du eben mit einer if-Abfrage, ob beide id's identisch sind.

Verfasst: 16.03.2003 17:14
von [ENW]Eagle
RAMses of JaSc hat geschrieben:Jede News hat eine id. Die Comments werden alle in einer eigenen Tabelle gespeichert und erhalten ebenfalls ein Feld mit der id. Wenn der Kommentar also zur News mit der id 2 gehört, dann bekommt er auch die id 2. Beim Anzeigen vergleichst du eben mit einer if-Abfrage, ob beide id's identisch sind.
Wenn du mir jetzt noch erklären bzw. zeigen könntest, wie das in PHP-Code aussieht, wäre ich dir unendlich dankbar! ;) :) :D

Verfasst: 16.03.2003 17:47
von jasc
Du kannst dir ja mal mein Gästebuch anschauen, dass ich vor knapp einem Jahr geschrieben habe. Dort habe ich das mit den Kommentaren so gelöst. Link: http://www.webteam-online.de/markus/ljascGB-2.0.zip

Verfasst: 16.03.2003 19:59
von [ENW]Eagle
RAMses of JaSc hat geschrieben:Du kannst dir ja mal mein Gästebuch anschauen, dass ich vor knapp einem Jahr geschrieben habe. Dort habe ich das mit den Kommentaren so gelöst. Link: http://www.webteam-online.de/markus/ljascGB-2.0.zip
Boar! Dein Script ist völlig verwirrend für einen Anfänger wie mich! ;)
Könntest du es nicht anhand von meinem Code, der weiter oben steht, mal eben schnell schreiben? - Für dich dürfte das doch ein Witz sein, zumindest wenn ich mir dein Gästebuch anschaue... ;) :) :D

Danke dir schon mal, Martin