Edit:
Oh wieso habe ich die 3. Seite nicht gesehen? Komisch. Aber der Beitrag unten sollte dir trotzdem helfen.
Und wegen deines Problems. Wir bräuchten den aktuellen Quellcode. Und wenn das Problem gelöst ist, klären wir dich über SQL Injection auf :) Denn dein Code ist unsicher. Und zwar sehr ;)
--------------
Hi,
nun habe ich versucht, ein "Gästebuch" zu erstellen. Die DB besteht auch mit einigen Feldern (name, text, hp, email, ip, timestamp) und die Daten werden auch erfolgreich durch das Formular eingetragen, allerdings kriege ich die Ausgabe nicht richtig hin. Beim ersten Eintrag klappt es, aber sobald ein neuer kommt, ist alles durcheinander.
Wie kriege ich jeden Eintrag geordnet?
Momentan sieht es so aus:
Code:
<?php
$name = mysql_query("SELECT name FROM guestbook ORDER BY cid DESC LIMIT 100");
while($row = mysql_fetch_object($name))
echo "<b>Name:</b> ".$row->name." - ";
$hp = mysql_query("SELECT hp FROM guestbook ORDER BY cid DESC LIMIT 100");
while($row2 = mysql_fetch_object($hp))
echo "<b>Homepage:</b> <a href=\"http://$row2->hp\" class=\"gengb\">".$row2->hp."</a><br />";
$text = mysql_query("SELECT text FROM guestbook ORDER BY cid DESC LIMIT 100");
while($row3 = mysql_fetch_object($text))
echo "<b>Text:</b> ".$row3->text."<br />";
?>
Dazu stand in dem hier verlinkten PHP/MySQL-Tutorial nur, dass es zu aufwendig sei und daher nicht beschrieben sei. Schade.
Oh mein Gott. 3 Abfragen ? Wieso?
Ich glaube dir fehlt noch die Logik für PHP.
Wenn nach einem if, einer schleife oder ähnlichen kein {} folgt, wird nur der erste Befehl, der danach steht ausgeführt.
Deswegen machst du 3 Abfragen?
Vorerst merke dir bitte den unterschied zwischen Datenbank, Tabelle und Feldern. In einer Datenbank befinden sich Tabellen. Tabellen beinhalten Felder, welche Werte enthalten, die du dann auslesen willst. Also:
PHP:
<?php
mysql_select_db("datenbank"); // Datenbank
mysql_query("SELECT `feld1`, `feld2` FROM `tabelle1`");
?>
Die `` schreib ich nur, damit es klar ist, dass ein Name gemeint ist und es nicht mit einem SQL-Befehl verwechselt werden kann. In deinem fall gibt es nämlich den Befehl TIMESTAMP und somit könnte da etwas schief gehen. Somit rate ich dazu Tabellennamen und Felder immer in `` zu schreiben.
Nun zu deinem Statement.
Du kannst ein Select für alle 3 Felder machen. Und wie Furien schon sagte: cid existiert nicht bei dir
Schau dir den Query an, den ich für dich geschrieben habe und probiere daraus zu lernen :)
PHP:
<?php
$query = mysql_query("SELECT `name`, `hp`, `text` FROM `guestbook` ORDER BY `timestamp` DESC LIMIT 100");
while($row = mysql_fetch_object($query)) {
echo "<b>Name:</b> ".$row->name." - ";
// Abfragen, ob eine HP eingetragen wurde
if($row->hp && $row->hp != "")
echo "<b>Homepage:</b> <a href=\"$row->hp\" class=\"gengb\">".$row->hp."</a><br />";
echo "<b>Text:</b> ".$row->text."<br />";
}
?>
Denke so wolltest du es auch haben, denn bei deinem Query hätte es folgendermaßen ausgesehen
Name: Johnny - Homepage: <a href="http://http://meinepageusw.de" class="gengb">http://meinepageusw.de</a>
Text: Mein Link funktioniert irgend wie nicht.
Bei deiner Version hätte er immer probiert einen Link auszugeben, auch wenn keiner da gewesen wäre. Und was ist wenn jemand http mit ausgibt. Dann sieht es schlecht aus. Meine geschrieben Variante ist noch nicht perfekt. Ich würde an deiner Stelle mit einem regulären Ausdruck da drüber laufen :)
Aber das sollte es vorerst tun. Hoffe konnte dir helfen. ;)