Archiv verlassen und diese Seite im Standarddesign anzeigen : MYSQL formatieren?
Ich habe eine Frage zu MYSQL und PHP.
Ich habe eine Formular in PHP das Daten direkt zur Datenbank schicken soll. Alles ist richtig eingestellt doch das Formular gibt immer wieder die Fehlermeldung "Insert failed, 'Name' not inserted".
Jetzt ist meine Frage ob man die MYSQL formatieren kann oder muss zum übertragen der Daten?!
BrainBug 04-04-2001, 12:35 Poste doch mal dein Code. So kann man ja nicht unbedingt sagen, wo der Fehler liegt :D
Hi Brainbug,
hier ist der Code:
<?PHP
include("modules/db/include.phtml");
include("tools/template.phtml");
$action="insert";
if ($OK) {
$db=new db();
if ($db->open()) {
if ($Name) {
$name=ereg_replace("'","''",$Name);
$stadt=ereg_replace("'","''",$Stadt);
$kategorie=ereg_replace("'","''",$Kategorie);
$art=ereg_replace("'","''",$Art);
$adresse=ereg_replace("'","''",$Adresse);
$plz=ereg_replace("'","''",$PLZ);
$zeiten=ereg_replace("'","''",$Zeiten);
$preise=ereg_replace("'","''",$Preise);
$weg=ereg_replace("'","''",$Web);
$kommentar=ereg_replace("'","''",substr($Kommentar,0,254));
$ID=$db->nextid("ausgehen_id_seq");
$query_string="insert into ausgehen (ID, Name, Stadt, Kategorie,
Art, Adresse, PLZ, Zeiten, Preise, Web, Kommentar) values (
$ID, '$name', '$stadt', '$kategorie', '$art', '$adresse',
'$plz', '$zeiten', '$preise', '$web', '$kommentar')";
if (($query=new query($db, $query_string)) && $query->result) {
Header("Location: $referer");
} else {
$error="Insert failed, $name not inserted";
echo EvalTemplate("error.tmpl","\$error, \$referer, \$action");
}
$db->close();
} else {
$error="Name not entered, please go back and fill it in.";
echo EvalTemplate("error.tmpl","\$error, \$referer, \$action");
}
} else {
$error="Addressbook not available currently.";
echo EvalTemplate("error.tmpl","\$error, \$referer, \$action");
}
} else {
if ($Cancel) {
Header("Location: $referer");
} else {
$referer=$HTTP_REFERER;
echo EvalTemplate("form.tmpl","\$action, \$referer");
}
}
?>
BrainBug 06-04-2001, 15:10 ist das Feld ID vielleicht ein autoincrement? Wenn ja, darfst du das nicht mitschreiben. Wenn nein, dann weiß ich auch nicht. :D
nein, im Ernst, ansonsten läßt sich das schwer nachvollziehen, was denn die Datenbankklasse bei
if (($query=new query($db, $query_string)) && $query->result)
genau macht. Was ist dieses $query->result? Da wäre eine Aufsplittung ganz gut also:
if (($query=new query($db, $query_string)) {
if ($query->result) {
Header("Location: $referer");
}
else echo "Bei If-Nr.2 ausgestiegen";
}
else {
$error="Insert failed, $name not inserted";
echo EvalTemplate("error.tmpl","\$error, \$referer, \$action");
}
Probier erstmal und sag dann Bescheid, was passiert....
ist das Feld ID vielleicht ein autoincrement? Wenn ja, darfst du das nicht mitschreiben.
Bei MySQL geht das :p
Danke schonmal für die Bemühungen!
Also das Skript gibt mir die Meldung:
Bei If-Nr.2 ausgestiegen
Was hat die Abfrage den jetzt gechecked?
Ach ja und auto_increement ist eingeschaltet!
Danke für die Hilfe!
$name=ereg_replace("'","''",$Name);
...
$query_string="insert into ausgehen (ID, Name, Stadt, Kategorie,
Art, Adresse, PLZ, Zeiten, Preise, Web, Kommentar) values (
$ID, '$name', '$stadt', '$kategorie', '$art', '$adresse',
'$plz', '$zeiten', '$preise', '$web', '$kommentar')";
Ich wunder mich gerade um die Hochkomma-Ersetzung ...
1) Warum arbeitest du mit ereg_replace statt mit str_replace?
2) Warum verdoppelst du vor die Hochkommata statt ein backslash (\) davor zu hängen?
Versuch's mal mit str_replace("'", "\'", ...).
Trotzdem wundert mich die Fehlermeldung ein bisken ... vielleicht ändert sich die ja, wenn du die Hochkommata korrekt ersetzt.
Nebenbei noch ne Frage: sind bei deinem php runtime_magic_quotes eingeschaltet?
Habe alles ersetzt. Gibt trotzdem noch die gleiche Fehlermeldung. Ich muss dazu sagen, daß ich ein Newbie bin und mich damit noch nicht allzuheftig auskenne.
Ob das eingeschaltet ist kann ich nicht sagen, ich habe ein Webpack. Wie könnte ich es denn sehen und hat das grosse Auswirkungen?
Danke schonmal.
BrainBug 09-04-2001, 08:51 Die Fehlermeldung "Bei If-Nr.2 ausgestiegen" sagt eigentlich nur, daß dein Query erstmal erfolgreich war, allerdings stimmt was nicht mit dem "$query->result" -> deshalb auch die Fehlermeldung an dieser Stelle.
Was macht denn diese Funktion? Wenn du noch nicht so erfahren bist, solltest du vielleicht die "normalen" DB-Funktionen von PHP nutzen, ist dann wesentlich einfacher für die Hilfe. Datenbank-Klassen sind zwar praktisch, auch für das anpassen an alle möglichen SQLs, aber bei dir vielleicht gar nicht nötig.
Ehrlich gesagt verstehe ich auch nicht, was an der Stelle diese "$query->result"-Abfrag soll.
Was macht den $query->result??? :confused:
Hallo.
ich weiss nicht wofür result steht. Das Skript ist ein Freeware Skript von http://www.muze.nl mit dem Namen Abstract DB. Ich habe es genau so installiert wie beschrieben, jedoch funktioniert nur dieser Skriptteil nicht.
Vielleicht hilft euch beim verstehen der Source-Code auf
http://www.muze.nl vom Abstract DB Skript, ist vielleicht einfacher als wenn ich das ganze Skript hier reinposte. ;)
Danke schonmal.
BrainBug 09-04-2001, 15:39 jaja, den Niederländern ist mal wieder nicht zu trauen :)
im Ernst, ich hab gesehen, daß du wohl den Code auch aus dem Adressbuch-Beispiel kopiert hast und da ist es genau so drin, allerdings gibt es die Funktion innerhalb der Klasse gar nicht -> die Anweisung $query->result kann gar nicht funktioneren, da nicht implementiert.
Eigentlich reicht auch der erste Teil der If-Abfrage. Da weißt du auch schon, ob der Query erfolgreich war.
Hast du schon mal geschaut, was oder ob was in der DB ankommt???
Ja ja die Holländer! :)
Na ja, erstmal danke für deine Bemühungen, find ich echt cool.
Im der MySQL Database kommt leider nichts an. Ich bekomme halt nur diese Medlung. Was kann ich denn weglassen?
BrainBug 09-04-2001, 17:25 hab gerade mal die DB-Klasse angeschaut. gib doch erstmal an der Stelle von
echo "Bei If-Nr.2 ausgestiegen";
lieber das an:
echo $db->error();
mal sehen, was mysql dazu sagt.
Ansonsten mußt du folgendes austauschen:
if (($query=new query($db, $query_string)) {
Header("Location: $referer");
} else {
$error="Insert failed, $name not inserted";
echo EvalTemplate("error.tmpl","\$error, \$referer, \$action");
}
bin mal gespannt, ob es klappt...
Hi Brainbug!
Wenn ich das erstere Ersetze, bekomme ich die Fehlermeldung:
1062: Duplicate entry '1' for key 1
Ich muss sagen das ich schon Drei Entries per Hand in die MYSQL Datenbank mit der ID 1-3 vergeben hab. Ist das irgendwie von Bedeutung?
Wie soll ich das 2. einsetzen? Hab ich nicht so ganz verstanden. Ich habe das 2. mit "echo $db->error();" ersetzt aber auch den ganzen Skriptteil der so ähnlich aussieht. Hat aber beides leider nichts gebracht.
Gibt es keine andere Möglichkeit das mit einem Formular in die gleiche Datenbank zu plazieren und mit automatischer ID vergabe?
BrainBug 10-04-2001, 10:37 Supi, da liegt also der Fehler.
Du kannst nicht in ein autoincrement schon einen bestehenden Wert reinschreiben -> laß bei dem Insert-Befehl einfach mal das Feld ID weg:
$query_string="insert into ausgehen (Name, Stadt, Kategorie,
Art, Adresse, PLZ, Zeiten, Preise, Web, Kommentar) values ('$name', '$stadt', '$kategorie', '$art', '$adresse',
'$plz', '$zeiten', '$preise', '$web', '$kommentar')";
Die Zeile
$ID=$db->nextid("ausgehen_id_seq");
kannst du weglassen. Scheint eh nicht richtig zu funktionieren, da ja schon ein vorhandener Wert gefunden wird. Und dafür hast du ja eigentlich auch ein autoincrement -> im "auto" steckt der Sinn, macht MySQL ja von alleine ;)
okay, probier das mal. Bis dann
100.000 Dank! Alles klappt Super!
Bis dann, ReFresh :D
nur ich muß BraingBug mal wieder korrigieren :sorry:
Du kannst nicht in ein autoincrement schon einen bestehenden Wert reinschreibenDas liegt nicht am auto_increment, sondern am unique index bzw. primary key.
Wenn in einer Tabelle ein primary key 'ID' mit auto_increment gesetzt ist, und ich habe Datensätze mit IDs von 1 bis 8, kann ich sehr wohl mit Angabe der ID=15 aus der Numerierung ausbrechen.
Aaaber ich kann nicht einen zweiten Datensatz mit ID=8 hinzufügen. (Den Fehler, der dann kommt, kennen wir alle :D)
------------------------------------------------------
Hat zwar nix mit der Sache zu tun, ist aber auch ganz interessant:
Füge ich anschließend wieder ohne Angabe der ID ein, wird - je nach MySQL-Version - beim höchsten vorhandenen Wert weitergezählt oder beim höchsten, der jemals eingetragen war.
D.h. lösche ich meinen Datensatz mit ID=15 wieder, wird bei einem neuen Insert ohne angegebene ID auf einigen Servern bei 9 weitergezählt, auf anderen bei 16.
[Editiert von Titus am 10-04-2001 um 13:01]
|
-
- |