Problem mit meinem Gästebuch script
Markus
- php
0 André Laugks0 Martin
Hallo,
ich habe ein problem mit meinem Gästebich script:
Folgendermaßen sieht die Datei aus:
<?
include ("config.dat");
include ("connect.dat");
if($kommentar<>""){
$res = mysql_db_query("$db",
"select * from $tabelle");
$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) {
echo "<center>$erfolg<br><a href="gb.php">Hier</a> gehts zurück zur Linkliste</center>";
}
else
{
echo "Fehler: ". mysql_error()." ";
}
} else { echo "<center>Fehler! Du hast nicht alle Felder ausgefüllt<br><a href="neuerlink.html">Hier</a> gehts zurück zum Formular</center>";}
?>
auch wenn ich alle variablen übergebe bekomme ich immer al fehlermeldung "Query was Empty" warum? Ich kann mir das nicht erklären, dann ich hab die datei einfach von meiner Linkliste genommen, die ich vorher geschrieben hab, und die fabelhaft funktioniert!
Hallo!
"Query was Empty"
IMHO wird kein SQL-Statement übergeben.
Woher kommt $db und $connect? Kontrolliere die Schreibweise alles Variablen.
MfG, André Laugks
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 :)