Hallo!
hallo, ich habe ein problem, und möchte gern einfach mal wissen, ob ich schon alle logischen möglichkeiten der fehlersuche ausgeschöpft habe.
Das wichtigste be der Fehlersuche ist:
Besorge Dir so viele Informationen wie mögllch, also Error-Log Einträge, oder Fehlermeldungen die bestimmte Funktionen zurückgeben(viele Funktionen geben bei Fehlern z.B, FALSE zurück, wenn Du das abfragst weißt Du dass der Fehler hier liegt, siehe im Manual Manual zu den verwendeten Funktionen nach), oder spezialisierte Funktionen wie mysql_error().
Dann solltest Du genau wisssen was Dein Script für Daten verwendet, also im Zweifel mit alles echo, print_r, var_dump()... ausgeben, denn oft sendet ein Script durch einen Fehler an andere Stelle einfach nicht die Daten an die DB wie Du es erwartest, dann kannst Du lange suchen.
Und dann, teste die Komponenten des Scripte isoliert, je kleienr die Abstufungen dsto besser. Du könntest z.B. mal eine beispielhafte INSERT-Abfrage per PHPmyADMIN oder per Kommandozeilentool "mysql" manuell direkt an die Datenbank schicken, um zu sehen was die Datenbank ohne Dein evtl. fehlerhaftes Script zurückgibt.
daten kommen beim php script ordentlich an ( mit get überprüft ), scheinbar findet der eintrag statt, denn nach ausführung des phpscriptes habe ich zur überprüfung, welchen inhalt die variablen haben, echo "$bla_ bla"; eingebaut.
Was willst Du damit erreichen? Das ist nur zum Debuiggen ob die Inhalte der Variablen dem entsprechen was Du erwartest. Das sagt überhaupt nichts darüber aus ob die Abfrage tatsächlich funktioniert.
Gucke Dir mal z.B. die Funktionsbeschreibung zu http://de3.php.net/mysql-query an. Da steht z.B.:
"Nur für SELECT, EXPLAIN, SHOW oder DESCRIBE Anweisungen liefert mysql_query() eine Ressourcen-Kennung oder FALSE, falls die Anfrage nicht korrekt ausgeführt wurde. Für alle anderen SQL Anweisungen ist der Rückgabewert von mysql_query() im Erfolgsfall TRUE, im Fehlerfall FALSE. Ein Rückgabewert ungleich FALSE bedeutet, dass die Anfrage gültig war und vom Server ausgeführt werden konnte. Das alleine sagt jedoch überhaupt nichts über die Anzahl veränderter oder gelieferter Datensätze aus. Es ist durchaus möglich, dass eine Anfrage erfolgreich war, ohne einen einzigen Datensatz zur verändern oder zu liefern."
Also, Du kannst den Rückgabewert von mysql_query überprüfen, u.B. so:
$sql "INSERT INTO...";
$ret = mysql_query($sql);
if($ret === FALSE) {
echo "folgende Abfrage ist gescheitert:<br>";
echo $sql."<br>";
echo "Die MySQL-Fehlermeldung lautet: ".mysql_error();
exit; // Ausführung des Scriptes beenden
}
else {
echo "die Abfrage $sql war erfolgreich<br>";
}
In Deinem Fall wird MySQL Dir sagen dass Deine Abfrage syntaktisch falsch ist. Wobei Du doch selber gesehen haben müsstest dass es kein WHERE bei INSERT gibt, oder?
das funktioniert auch, aber wenn ich in der db schaue, sind die daten nicht drin. die db verbindung sollte aber auch funktionieren, da keine fehlermeldung kommt, habe beim verb.aufbau mysql_errno() und mysql_error() eingebaut.
Das gehört aber vor allem in die Abfragen, beim Verbindungsaufbau kann das nur beschränkt funtionieren, denn mysql_error() holt sich seine Infos vom MySQL-Server - wenn unter den angegebenen Daten aber kein Server erreichnbar ist gibt es auch keinen Fehler. Bei mysql_connect() funktioniert das Abfangen von Fehlern über den Rückgabewert, wie oben bei mysql_query beschrieben:
Siehe Manual zu mysql_connect(): " Rückgabewert: Eine MySQL Verbindungs-Kennung im Erfolgsfall oder FALSE im Fehlerfall."
Also siehe oben, oder das Beispiel aus dem Manual: http://de3.php.net/mysql-connect
also wie gesagt, rein theoretisch geht alles(!), aber in der db kommt nichts an. wie würdet ihr vorgehen um den fehler zu finden? das einzige was evtl. nicht funktionieren könnte, ist mein insert INTo, aber selbst wenn nicht, sollte wenigstens ne fehlermeldung kommen.
Ja, siehe oben.
$SQLString = "INSERT INTO tabellenname (feld1, feld2, feld3)VALUES ('$var1','$var2','$var3') WHERE id = $id ";
Wieso willst DU unbedingt das WHERE? HAst Du bereits einen Datensatz ind er Tabelle den Du aktualisieren willst? Oder willst Du einen komplet neuen Datensatz einlesen? Für erseres brauchst Du UPDATE...WHERE..., für letzteres INSERT... (ohne WHERE), die ID kannst Du genauso wie die anderen Felder eintragen. Aber ich hatte Dir im vorherigen Thread schon einige Links genannt. Die solltst Du Dir vielleicht mal angucken. Wenn Du das ganze alleine mit Probiererei und ständigem Nachfragen machen willst, wird das ganze noch viel länger dauern als wenn Du Dich mal hinsetzt und ein paar Seiten aus den Manuals und Tutorials liest.
Hierfür mal ein paar Startpunkte:
http://aktuell.de.selfhtml.org/links/datenbank.htm
http://aktuell.de.selfhtml.org/links/php.htm
und die Links aus [pref:t=59253&m=332976]
Grüße
Andreas