..warum sind eigentlich so viele Leute nicht in der Lage, sich mal die Beispiele in der PHP-Anleitung anzuschauen? Warum wird nie geprüft, ob eine Funktion vielleicht rein zufälligerweise fehlgeschlagen ist? Warum wird nie versucht, die ausgegebene Warnung wenigstens ansatzweise zu verstehen (falls Du kein Englisch kannst: sorry)?
Tut mir Leid, ich habe mir alle Texte auf http://www.php.net/manual/de/
Es reicht, wenn Du Dir die Beispiele anschaust und einfach abtippst: Inhaltsübersicht des MySQL-Kapitels, http://www.php.net/manual/de/ref.mysql.php:
$query = "SELECT * FROM Meine_Tabelle";
$result = mysql_query($query) or die("Anfrage fehlgeschlagen");
Man beachte hier den Teil mit "Anfrage fehlgeschlagen"; Fehlerprüfung ist vorhanden, aber zugegebenermaßen noch nicht das Non-Plus-Ultra.
Etwas weiter unten befindet sich in der Funktionsübersicht folgender Eintrag, sieht man nicht automatisch, müsste man bei Gelegenheit aber immer drüber stolpern:
"mysql_error -- Liefert den Fehlertext der zuvor ausgeführten MySQL Operation"
Auf diese Funktion könnte man spätestens dann stoßen, wenn man sich anschaut, wie eine Abfrage mit mysql_query() funktioniert, nämlich unter http://www.php.net/manual/de/function.mysql-query.php, beide Beispiele:
<php
$result = mysql_query ("SELECT * WHERE 1=1")
or die ("Ungültige Abfrage: " . mysql_error());
?>
Man beachte hier den Teil mit "Ungültige Anfrage" und mysql_error().
Und wegen der Fehlermeldung - auf Deutsch heißt das wohl "Der angegebene Befehl ergibt kein gültiges MySQL Ergebnis" - genau weiß ich es leider tatsächlich nicht.
Du hast das Wörtchen "argument", welches ganz am Anfang steht, übersehen, genauer gesagt den relevanten Teil "argument is not valid":
"Warning: mysql_fetch_object(): supplied argument is not a valid
MySQL result resource in c:\apache\apache\htdocs\newssystem\news.php
on line 26"
"Warnung: mysql_fetch_object(): Übergebenes Argument ist keine
gültige MySQL-Ergebnis-Resource, Zeile blabla".
Derselbe Satz, etwas umgedreht und aufgepustet: Das Argument, daß Du an mysql_fetch_object() in Zeile 26 übergeben hast, ist falsch. Da Du mysql_fetch_object() nur einziges Argument angedreht hast, ist eine Verwechslung ausgeschlossen - $result muß irgendwie kaputt sein. $result bekommst Du von mysql_query() eine Zeile höher, ergo kann irgendwas mit mysql_query() nicht stimmen.
Auf diesen Zusammenhang wärest Du mit Fehlerprüfung sofort gestoßen, mit mysql_error() wärest Du sicher noch einen Schritt weiter gekommen (wenn auch vielleicht nicht ans Ziel). Das tatsächliche Problem, auf das ja bereits hingewiesen wurde, ist natürlich so hinterhältig, wie Tippfehler nur sein können.
Langer Rede, kurzer Sinn: Ergebnisse, die irgendwie von draußen hereingeschneit kommen, _immer_ überprüfen. Das gilt übrigens nicht nur für mögliche Fehler (wie in diesem Fall), sondern ausdrücklich auch für die Daten selbst. Es sind schon vielen Leuten Dinge von A wie anrüchigem HTML-Code bis zu Z wie Zugangsberechtigung untergejubelt worden, weil sie zu vertrauensselig waren.
Dein vorliegendes Skript könnte übrigens ebenfalls anfällig sein. Überlege Dir mal, was passiert, wenn in einem der Datenfelder, die Du zum Beispiel per
echo $row->newstext;
ausgibst, lustige Sachen wie
<script type="text/javascript">
while (true) alert("Abgeschossen");
</script>
auftauchen (bzw. wie die dann im vom PHP-Skript ausgegebenen HTML-Quelltext erscheinen). Informiere Dich in dem Zusammenhang über eine PHP-Funktion namens htmlentities().
Gruß,
soenk.e