Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
MYSQL formatieren? [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
MYSQL formatieren?


 
ReFresh
04-04-2001, 11:34 
 
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

 
ReFresh
06-04-2001, 14:53 
 
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....

 
Titus
06-04-2001, 15:21 
 
ist das Feld ID vielleicht ein autoincrement? Wenn ja, darfst du das nicht mitschreiben.

Bei MySQL geht das :p

 
ReFresh
07-04-2001, 22:49 
 
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!

 
Titus
08-04-2001, 00:26 
 
$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?

 
ReFresh
09-04-2001, 00:36 
 
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:

 
ReFresh
09-04-2001, 10:03 
 
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???

 
ReFresh
09-04-2001, 17:05 
 
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...

 
ReFresh
10-04-2001, 10:20 
 
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

 
ReFresh
10-04-2001, 11:04 
 
100.000 Dank! Alles klappt Super!

Bis dann, ReFresh :D

 
Titus
10-04-2001, 12:58 
 
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]

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:16 Uhr.