Martin: Problem mit meinem Gästebuch script

Beitrag lesen

Den genauen Fehler sehe ich auch nicht, aber mir fallen ein paar sinnvolle Verbesserungen dazu ein:

res = mysql_db_query("$db", "select * from $tabelle");

benutz lieber nach dem connecten zur datenbank mysql_select_db($db) und später nur noch mysql_query (oder arbeitest du mit mehreren Datenbanken gleichzeitig?)

$id = mysql_num_rows($res);
$id = $id ++ ;

$date = date("d M Y") ;

$eintragen = mysql_db_query("$db","INSERT INTO $tabelle (id, name, url, email, kommentar, datum) VALUES ( $id, '$name', '$url', '$mail', '$kommentar', $date)");

$result = mysql_query($eintragen, $connect);

if ($result = $eintragen) {

Verbesserungsvorschläge:
die beiden $id =... Zeilen streichen, id und $id aus dem query entfernen, stattdessen in der Datenbank die Zeile id auf Auto-Increment stellen. Das spart hier viel Arbeit und macht das Ganze wesentlich stabiler (vielleicht liegt hier auch der Fehler): Ich gehe mal davon aus dass die Spalte id in der Tabelle der Primärschlüssel ist; zwei Zeilen dürfen nicht die gleiche id haben. Wenn du jetzt die Zeilen 1,2,3 mit den entsprechenden id's hast, liefert dir dein Script für die nächste Zeile 4 => das passt. Löschst du jetzt aus irgendeinem Grund Zeile 2, dann liefert das Script als neue id 3 => doppelt vorhanden, query schlägt fehl.

$date würde ich immer als timestamp (=wieviele Sekunden seit dem 1.1.70 vergangen sind), damit lässt sich später am einfachsten weiterarbeiten, zB mit strftime(). Also $date = time();

Die nachfolgenden Sachen sind sehr umständlich (falsch?), ich würde das so vereinfachen:

if (mysql_query("INSERT INTO $tabelle (name, url, email, kommentar, datum) VALUES ('$name', '$url', '$mail', '$kommentar', $date)", $connect)){

noch eine Kleinigkeit, für die ich ewig dankbar bin: Statt

}else{
echo "<center>Fehler! Du hast nicht alle Felder ausgefüllt<br><a href="neuerlink.html">Hier</a> gehts zurück zum Formular</center>";
}

kann man auch folgendes schreiben:

}else{
?>
<center>Fehler! Du hast nicht alle Felder ausgefüllt<br><a href="neuerlink.html">Hier</a> gehts zurück zum Formular</center>
<?
}

du hörst also nach dem ?> kurz mit php auf, gibst normales html aus und bist ab <? wieder im php. Das spart ne Menge Schreibarbeit und der Code bleibt übersichtlicher.

Ich hoffe du liest das auch noch :)