fehlersuche
olli
- php
0 Benedikt Loepp0 olli0 Jan R.0 olli
0 Andreas Korthaus
0 wahsaga0 Sven Rautenberg0 ich
0 Andreas Korthaus0 olli
0 Matrix
hallo, ich habe ein problem, und möchte gern einfach mal wissen, ob ich schon alle logischen möglichkeiten der fehlersuche ausgeschöpft habe.
ich habe ein formular, welches daten an ein phpscript überträgt und dieses soll die daten in die db eintragen.
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. 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. 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.
$SQLString = "INSERT INTO tabellenname (feld1, feld2, feld3)VALUES ('$var1','$var2','$var3') WHERE id = $id ";
$id ist übrigens die id des benutzers, wo die felder gefüllt werden, wird per session übertragen, funktioniert auch, schon geprüft :(
dank euch ;)
Hallo,
$SQLString = "INSERT INTO tabellenname (feld1, feld2, feld3)VALUES ('$var1','$var2','$var3') WHERE id = $id ";
Der Insert sieht soweit korrekt aus, hast du aber evtl. schonmal probiert die id in Anführungs-Striche zu schreiben:
WHERE id='$id'
Außerdem wäre der Rest deines Scripts nicht uninteressant, da es hier schon Probleme gab, wo jemand vergaß der DB mit mysql_query() überhaupt etwas zu senden o.a.
cu Benedikt Loepp
Hallo,
$SQLString = "INSERT INTO tabellenname (feld1, feld2, feld3)VALUES ('$var1','$var2','$var3') WHERE id = $id ";
Der Insert sieht soweit korrekt aus, hast du aber evtl. schonmal probiert die id in Anführungs-Striche zu schreiben:
WHERE id='$id'Außerdem wäre der Rest deines Scripts nicht uninteressant, da es hier schon Probleme gab, wo jemand vergaß der DB mit mysql_query() überhaupt etwas zu senden o.a.
cu Benedikt Loepp
<?php
//session überprüfen
include ("checkuser.php");
//db daten
require("db.php");
?>
...HTML quatsch...
<?php
// nicht übertragene variablen füllen
$neu = "nein";
$id = $_SESSION["user_id"];
$conn = mysql_connect($db_server,$db_username,$db_passwort)or die("Konnte keine Verbindung zum Datenbankserver aufbauen!");
mysql_select_db($db_database,$conn)or die("Konnte die Datenbank $db_database nicht auswählen! Bitte kontaktieren Sie den Administrator!");
$conn = mysql_connect($db_server,$db_username,$db_passwort);
$SQLString = "INSERT INTO tabellenname (feld1, feld2, feld3)VALUES ('$var1','$var2','$var3') WHERE id = $id ";
$Ergebnis = mysql_db_query($db_database, $SQLString, $conn);
?>
...jetzt kommt bissel HTML quatsch...
// überprüfung ob var da sind
<?php
echo "$var:" . $_SESSION["user_id"] ;
echo "$id";
?>
...HTML quatsch...
keine ahnung was ich noch machen soll, das mit den ' ' bei $id habe ich auch schon probiert...leider :(
danke
Hallo olli,
$SQLString = "INSERT INTO tabellenname (feld1, feld2, feld3)VALUES ('$var1','$var2','$var3') WHERE id = $id ";
$Ergebnis = mysql_db_query($db_database, $SQLString, $conn);
Falls eines der betroffenen Tabellenfelder z.B. ein Primaerschluessel ist, kannst Du ihn nicht mit "INSERT INTO" ueberschreiben.
Verwende stattdessen den Befehl "UPDATE" (http://www.mysql.com/doc/de/UPDATE.html).
Beste Gruesse
Jan
Hallo olli,
$SQLString = "INSERT INTO tabellenname (feld1, feld2, feld3)VALUES ('$var1','$var2','$var3') WHERE id = $id ";
$Ergebnis = mysql_db_query($db_database, $SQLString, $conn);Falls eines der betroffenen Tabellenfelder z.B. ein Primaerschluessel ist, kannst Du ihn nicht mit "INSERT INTO" ueberschreiben.
Verwende stattdessen den Befehl "UPDATE" (http://www.mysql.com/doc/de/UPDATE.html).
Beste Gruesse
Jan
vielen dank, hab jetzt mal die original fehlermeldung kopiert
folgende Abfrage ist gescheitert:
INSERT INTO anmeldung (meine, ganzen, felder)VALUES ('','JA','','JA','','JA','','','','','','','','','','nein') WHERE id = '5'
Die MySQL-Fehlermeldung lautet: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id = '5'' at line 1
ich weiß nicht ob es nun an den anführungsstrichen hinter 5 liegt, die sind so nicht im code, oder eben an der update anweisung, ich werde mich mal um update kümmern und lernen ;) danke
Hallo!
$conn = mysql_connect($db_server,$db_username,$db_passwort)or die("Konnte keine Verbindung zum Datenbankserver aufbauen!");
mysql_select_db($db_database,$conn)or die("Konnte die Datenbank | $db_database nicht auswählen! Bitte kontaktieren Sie den Administrator!");
Das sieht bis hierhin schonmal gut aus.
$conn = mysql_connect($db_server,$db_username,$db_passwort);
schon wieder? Wieso 2 mal? Und wieseo fängst Du ausgerechnet hier keinen Fehler ab?
$SQLString = "INSERT INTO tabellenname (feld1, feld2, feld3)VALUES ('$var1','$var2','$var3') WHERE id = $id ";
wie schon im zuvorigen Thread gesagt, das ist syntaktisch falsch.
$Ergebnis = mysql_db_query($db_database, $SQLString, $conn);
Zur Funktion mysql_db_query() steht im Manual:
"Anmerkung: Diese Funktion ist seit PHP 4.0.6 veraltet. Verwenden Sie diese Funktion nicht. Stattdessen sollten Sie die Funktionen mysql_select_db() und mysql_query() verwenden."
ich würde mysql_query() verwenden. Und dann würde das bei mir so aussehen:
$Ergebnis = mysql_query($SQLString);
hiernach musst Du mysql_error() verwenden, also so
if ($Ergebnis === FALSE) {
echo "folgende Abfrage ist gescheitert:<br>";
echo $SQLString."<br>";
echo "Die MySQL-Fehlermeldung lautet: ".mysql_error();
exit; // Ausführung des Scriptes beenden
}
Grüße
Andreas
hi,
die db verbindung sollte aber auch funktionieren, da keine fehlermeldung kommt, habe beim verb.aufbau mysql_errno() und mysql_error() eingebaut. also wie gesagt, rein theoretisch geht alles(!), aber in der db kommt nichts an.
sich mysql_error() anzuschauen, ist nicht nur beim aufbau der verbindung eine gute idee, sondern noch viel mehr beim absetzen der query an die DB, also nachdem du mysql_query() benutzt hast.
da bekommst du dann ggf. die fehlermeldungen der DB in bezug auf snytaktische fehler o.ä. in deiner query anzeigt.
gruss,
wahsaga
Moin!
da bekommst du dann ggf. die fehlermeldungen der DB in bezug auf snytaktische fehler o.ä. in deiner query anzeigt.
Da wird im speziellen Fall drinstehen, dass INSERT INTO nicht mit WHERE kombiniert werden kann.
INSERT erzeugt einen neuen Datensatz. Alle in den Datensatz gehörenden Daten - auch dessen ID - sind irgendwie anzugeben, weil sie eben komplett neu definiert werden müssen. Die Daten, die nicht explizit im Statement angegeben werden, werden durch die Default-Werte, die beim Anlegen der Tabelle definiert wurden, aufgefüllt. Typischerweise fällt darunter auch der Primärschlüssel der Tabelle, der bei MySQL durch auto_increment eindeutig gehalten wird.
- Sven Rautenberg
Moin!
da bekommst du dann ggf. die fehlermeldungen der DB in bezug auf snytaktische fehler o.ä. in deiner query anzeigt.
Da wird im speziellen Fall drinstehen, dass INSERT INTO nicht mit WHERE kombiniert werden kann.
INSERT erzeugt einen neuen Datensatz. Alle in den Datensatz gehörenden Daten - auch dessen ID - sind irgendwie anzugeben, weil sie eben komplett neu definiert werden müssen. Die Daten, die nicht explizit im Statement angegeben werden, werden durch die Default-Werte, die beim Anlegen der Tabelle definiert wurden, aufgefüllt. Typischerweise fällt darunter auch der Primärschlüssel der Tabelle, der bei MySQL durch auto_increment eindeutig gehalten wird.
- Sven Rautenberg
und das heißt im klartext? wie soll ich es anstellen? ich muss meine daten in das feld vom user mit der id reinschreiben, wie löst man soetwas?
danke
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
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
hhmm, der erste ansatz meines fehlers schätze ich, die insert muss wohl ein update werden, das ganze soll ein profilupdate eines users werden...danke für die tipps, vor allem sehr hilfreich fand ich hier dies
$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>";
}
ach ja, ich lerne noch, vielleicht nach nem unnatürlichen prinzip, "durch fehler lernt man" ;)
dank dir
Moin!
ach ja, ich lerne noch, vielleicht nach nem unnatürlichen prinzip, "durch fehler lernt man" ;)
Ok, Lektion 1, um hier im Forum nicht unnötig ärgerliche Reaktionen auf sich zu ziehen: KEINE FULLQUOTES, bitte!
Die Tatsache, dass das Antwortfeld mit dem kompletten Vorgängerposting ausgefüllt ist, bedeutet nicht, dass man den Text komplett drinstehen lassen muß. Lösche alles und lasse nur die Teile stehen, auf die du antworten willst.
- Sven Rautenberg
Hallo!
ach ja, ich lerne noch, vielleicht nach nem unnatürlichen prinzip, "durch fehler lernt man" ;)
Dann kannst Du direkt auch aus Deinem Zitat-Fehler lernen: Bitte zitiere nur das worauf Du Dich beziehst und lösche den Rest aus dem Eingabefeld. Wäre nett, das macht das ganze etwas angenehmer zu lesen und spart ne Menge unnütze Daten.
Der Tipp mit dem UPDATE kam übrigens schon gestern Abend (eher heute Nacht ;-)) in Deinem 2. Thread zum Thema: [pref:t=59253&m=332978].
Aber ich kenne das nur zu gut, ist nicht immer ganz so leicht bei den vielen verschiedenen eigenen Threads und Namen noch den Überblick zu behalten ;-)
Grüße
Andreas
Der Tipp mit dem UPDATE kam übrigens schon gestern Abend (eher heute Nacht ;-)) in Deinem 2. Thread zum Thema: [pref:t=59253&m=332978].
Aber ich kenne das nur zu gut, ist nicht immer ganz so leicht bei den vielen verschiedenen eigenen Threads und Namen noch den Überblick zu behalten ;-)
richtig, wir sind zu zweit, aber so lernt es sich leichter, von dem thread gestern wußte ich nichts, aber danke für die hilfen ;)
hoffe mein quote ist jetzt genehm ;)
Hi!
richtig, wir sind zu zweit, aber so lernt es sich leichter, von dem thread gestern wußte ich nichts, aber danke für die hilfen ;)
Dann solltet Ihr das ganze evtl. mal etwas besser koordinieren. Und zeige Deinem Kollegen bei der Gelegenheit bitte auch wie er richtig quotet ;-)
hoffe mein quote ist jetzt genehm ;)
Auf jedenfall ein großer Schritt nach vorne ;-)
Grüße
Andreas
hallo, ich habe ein problem, und möchte gern einfach mal wissen, ob ich schon alle logischen möglichkeiten der fehlersuche ausgeschöpft habe.
Hallo.
Ich habe mir neben den hier angesprochenen Möglichkeiten zur Fehlersuche angewöhnt, mit mysql_affected_rows() zu prüfen, ob und wieviele Datensätze eingetragen wurden.
Das macht man zum Beispiel, wenn das Skript ein Bild in ein Bild-Table nur dann eintragen soll, wenn auch die Benutzerdaten im Benutzertable korrekt eingetragen worden sind.
Noch ein kleiner Tip: mysql_connect braucht pro Skript nur einmal verwendet zu werden. Jedesmal, wenn es wieder benutzt wird, wird die gleiche Verbindung zur Datenbank benutzt, wie im Skript vorher, PHP merkt sich nämlich die Verbindung anhand einer Kennung.
Noch ein Tip: Du hast Dich jetzt sicher mit UPDATE befasst. Die Syntax für ein insert kannst Du ähnlich gestalten:
$statement = "insert into kategorie set kategorie_nr='$kategorie_nr', kategorie_art='$kategorie_art', kategorie='$kategorie'";
Bei größeren Applikationen muss man dann nur noch update und insert into vertauschen:
$statement = "update kategorie set kategorie_nr='$kategorie_nr', kategorie_art='$kategorie_art', kategorie='$kategorie' where id='$id'";
Bleibt natürlich jedem überlassen, wie man es schreibt :-)
Hier der komplette Codeabschnitt mit affected_rows();
include ("../../lib/mysql.php");
$conn = mysql_connect($host, $user, $passwd);
$db = mysql_select_db($database);
if ($action == "save") {
$statement = "insert into kategorie set kategorie_nr='$kategorie_nr'.......preis='$preis'";
$execute = mysql_query($statement);
$erfolg = mysql_affected_rows();
if ($erfolg == -1) {
$meldung = "FEHLER: Die Kategorie konnte nicht angelegt werden.<br>Die Datenbank meldet: ".mysql_errno().":".mysql_error()."<br>";
}
if ($erfolg == 1) {
$meldung = "Die Kategorie wurde erfolgreich angelegt.<br>";
$statement2 = "insert into relation_kat set id_kat=LAST_INSERT_ID(), id_supermakler='$id_makler'";
$execute2 = mysql_query($statement2);
$erfolg2 = mysql_affected_rows();
if ($erfolg2 == -1) {
$meldung2 = "FEHLER: Die Bezugsdaten der Kategorie konnten nicht angelegt werden.<br>Die Datenbank meldet: ".mysql_errno().":".mysql_error()."<br>";
}
if ($erfolg2 == 1) {
$meldung2 = "Die Bezugsdaten der Kategorie wurden erfolgreich angelegt.<br>";
}
}
}
Viele Grüße Lars
Hallo!
Ich habe mir neben den hier angesprochenen Möglichkeiten zur Fehlersuche angewöhnt, mit mysql_affected_rows() zu prüfen, ob und wieviele Datensätze eingetragen wurden.
Ja, das ist oft sinnvoll.
Noch ein kleiner Tip: mysql_connect braucht pro Skript nur einmal verwendet zu werden.
auch richtig.
Jedesmal, wenn es wieder benutzt wird, wird die gleiche Verbindung zur Datenbank benutzt, wie im Skript vorher, PHP merkt sich nämlich die Verbindung anhand einer Kennung.
das kann man wohl nicht so allgemein sagen. Ist aber auch unerheblich.
Bei größeren Applikationen muss man dann nur noch update und insert into vertauschen:
$statement = "update kategorie set kategorie_nr='$kategorie_nr', kategorie_art='$kategorie_art', kategorie='$kategorie' where id='$id'";
Ja, das fand ich ne Zeit lang auch sehr praktisch, bis ich dann von MySQL auf DB2 bzw. PostgreSQL umstellen musste, da geht das dann auf einmal nichtmehr und ich musste - trotz Datenbank-Abstraktion - _einige_ Abfragen neu schreiben.
Wobei ich persönlich nicht verstehe wieso es überheupt 2 verschiedene Schreibweisen gibt. IMHO könnte man die Standard-Insert-Schreibweise abschaffen ;-)
Aber kann ja sein dass das irgendwie effektiver/schneller ist.
Grüße
Andreas