MySQL: Nur bestimmten Wert (mit ID indentifiziert) in Tabelle schreiben

metno

Erfahrenes Mitglied
Ich sitze jetzt schon seit einer Stunde am selben Problem: Ich habe eine Website erstellt, bei der die 3 letzten News links angezeigt werden (http://www.stale-fish.com). Wenn jetzt auf den Titel geklickt wird, soll in dem iFrame mit dem Inhalt die ganze Neuigkeit angezeigt werden. Das funktioniert auch, jedoch nur mit allen News. Ich möchte jedoch nur gerade die angeklickte Neuigkeit zeigen. Leider bin ich auch mit Google nicht fündig geworden.

Hier der Code mit den 3 neuesten News:

PHP:
echo("<table width='135px' border='0' cellspacing='0'>");
for ($i=0; $i<"3"; $i++) { 
		$date = mysql_result($res, $i, "Datum");
		$title = mysql_result($res, $i, "Titel"); 
		$context = mysql_result($res, $i, "Inhalt");
		$datum = date("d.m.Y",strtotime($date));
		$idnr = mysql_result($res, $i, "ID");
		echo("<tr> <td valign='top'><b>$datum</b></td></tr> <tr><td valign='top'><a href='news/news.php?nr=$idnr' target='content'>$title</a></td></tr><td><hr></td>");
	}
	echo("</table>");

Die ID der angeklickten Neuigkeit wird dann mit der URL in der Variable $idnr weitergegeben

Quelltext von der News.php (Dort sollte das ganze ausgegeben werden):

PHP:
if($HTTP_GET_VARS["nr"] != "") {
	echo("<table width='555px' border='1' cellspacing='0'>");
	echo("<tr class='tableTitle'>
		<td width='70'>Datum</td>
		<td width='120'>Titel</td>
		<td>News</td>
		</tr>"); 
	echo("<tr> <td>&nbsp;</td> <td>&nbsp;</td> <td>&nbsp;</td> </tr>");
	$date = mysql_result($res, $nr, "Datum");
	$title = mysql_result($res, $nr, "Titel");
	$context = mysql_result($res, $nr, "Inhalt");
	$datum = date("d.m.Y",strtotime($date)); 	 echo("<tr> <td valign='top'>$datum</td> <td valign='top'>$title</td> <td valign='top'>$context</td>");
	echo("</table>");

Ich sehe das Problem beim 2. Parameter von mysql_result . Ich weiss nicht ob da die ID angegeben wird oder einfach die absolute Nummerierung der Werte. Die Werte sind nähmlich nicht ununterbrochen durchnummeriert (ID), da ich zwischendurch mal etwas löschen musste.
Gibt es eine Funktion die das kann oder hab ich etwas falsch gemacht. Bin Anfänger in PHP.
 
statt
PHP:
for ($i=0; $i<"3"; $i++) {
lieber
PHP:
for ($i=0; $i<3; $i++) {
verwenden.

"3" Ist ein String, damit kannst du keine Zahl hochladen.

3 ist ein Integer, den man hochzählen kann.
 
OK, danke. Das ist aber auch nicht mein eigentliches Problem. Der obere Quelltext funktioniert einwandefrei, aber beim unteren weiss ich nicht, wie ich die zu einer, in der Variablen nr übergebenen ID, anzeigen kann. In Worten gefasst:
Nimm die Werte mit der ID X aus der Tabelle und schreibe sie in eine Tabelle mit den Spalten Datum, Titel und News.

Das rot geschriebene ist das, was nicht funktioniert. Wie bringe ich das trozdem zustande? Wie im Code zu sehen ist, habe ich das mit der Funktion mysql_result versucht, was aber nicht funktioniert.
 
Ehrlich gesagt klingt das sehr verworren mal zum Verständnis:
Du willst wenn du auf eine News klickst diese bearbeiten und neu speichern? oder Willst du das nur so haben das er die news dann in einem extra Fenster anzeigt?

Wenn er dir in dem IFrame alle news anzeigt schätze ich ist der SQL falsch. Könntest du mal zeigen mit welchem select du die Daten aus der Datenbank abfragst?
Gruß Steff
 
Probier mal Folgendes:
PHP:
<?php

	$query = '
		SELECT
		        `ID`,
		        `Datum`,
		        `Titel`
		  FROM
		        `Tabellenbezeichner`
		  ORDER BY
		        `Datum` DESC
		  LIMIT
		        3
		';
	$result = mysql_query($query);

	while( $row = mysql_fetch_array($result, MYSQL_ASSOC) ) {
		echo '<div class="news-item">';
		echo '<h2><a href="news/news.php?nr='.$row['ID'].'" target="content">' . $row['Title'] . '</a></h2>';
		echo '<p class="date">' . date('d.m.Y', strtotime($row['datum'])) . '</p>';
		echo '</div>';
	}

?>
PHP:
<?php

	if( isset($_GET['nr']) && !empty(intval($_GET['nr'])) ) {
		$query = '
			SELECT
			        `Datum`,
			        `Titel`,
			        `Inhalt`
			  FROM
			        `Tabellenbezeichner`
			  WHERE
			        `ID` = '.intval($_GET['nr']).'
			';
		$row =  mysql_fetch_array(mysql_query($query), MYSQL_ASSOC);
		echo '<div class="news-item">';
		echo '<h2>' . $row['Title'] . '</h2>';
		echo '<p class="date">' . date('d.m.Y', strtotime($row['datum'])) . '</p>';
		echo '<div class="content">' . $row['Inhalt'] . '</div>';
		echo '</div>';
	}

?>
 
OK das ist wirklich etwas verwirrend.
Jetzt kam mir aber gleich der Gedanke, das ich das ja wie du sagtest mit select machen kann. Ich werde das morgen Mal versuchen.

Mein Ziel ist es, wenn auf den Newstitel geklickt wird, dass die gesamte Neuigkeit im iframe angezeigt wird.
 
Das vom Gumbo werde ich morgen auch noch ausprobieren. Heute Muss ich noch etwas anderes machen.
Vielen Dank erstmals.
 
Jop dann ist das von Gumbo auf jeden Fall das passende und übringens die Lösung mit dem Limit 3 ist schöner als das was du machst mit der for schleife.
Gruß Steff
 
Zurück