multipart/form-data - file+input
Marco B.
- php
Hi... ich sitze immer noch an einem Problem bei der verarbeiten von einem multipart-Formulars.
Wenn ich das Formular komplett ausfülle und alle 4 Werte mit echo ausgebe, stimmen die Daten auch. Aber leider werden nur leere Felder in die Datenbank eingefügt, obwohl das update den Dateinamen korrekt in die neue Reihe einfügt.
Lasse ich aber das File-Input leer und sende nur die 3 Text-Input werden diese auch koorekt in die Datenbank eingetragen.
-------------------------------------------------------------
HTML-CODE
<form enctype="multipart/form-data" method="post" action="?go=text_loesungen">
<input type="text" name="title_neu">
<input type="text" name="title2_neu">
<textarea name="text_neu"></textarea>
<input type="file" name="bild_neu">
<input type="submit" value="Systemlösung hinzufügen">
-------------------------------------------------------------
PHP-CODE
if ($_POST["title_neu"]!='' && $_POST["title2_neu"]!='' && $_POST["text_neu"]!='') {
$insert=@mysql_query("INSERT INTO loesungen VALUES (
'',
'".$title_neu."',
'".$title2_neu."',
'".$text_neu."',
''
)");
if ($bild_neu!='') {
$id=mysql_insert_id();
$dateiname=$_FILES['bild_neu']['name'];
$dateiendung=substr($dateiname,-3);
$file=$id.".".$dateiendung;
@copy($bild_neu,"images/loesungen/$file");
$update_bild=@mysql_query("UPDATE loesungen SET
bild='".$file."'
WHERE id='".$id."'");
}
header("Location: ?go=text_loesungen");
}
-------------------------------------------------------------
DATENBANK
CREATE TABLE loesungen
(
id
int(1) NOT NULL auto_increment,
title
varchar(255) NOT NULL default '',
title2
varchar(255) NOT NULL default '',
text
longtext NOT NULL,
bild
varchar(255) NOT NULL default '',
PRIMARY KEY (id
)
) TYPE=MyISAM PACK_KEYS=0 AUTO_INCREMENT=4 ;
Kann mir jemand helfen und sagen, warum alle Werte übertragen werden und trotzdem nicht in die Datenbank eingefügt werden?
Mfg
Marco
Hi,
if ($_POST["title_neu"]!='' && $_POST["title2_neu"]!='' && $_POST["text_neu"]!='') {
Hier weißt Du, wie Du auf POST-Daten zugreifen solltest.
$insert=@mysql_query("INSERT INTO loesungen VALUES (
'',
'".$title_neu."',
Hier weißt Du es nicht mehr.
Wie ist die Variable $title_neu belegt? Ist sie es überhaupt?
'".$title2_neu."',
'".$text_neu."',
''
)");
if ($bild_neu!='') {
$id=mysql_insert_id();
Very risky.
Du prüfst nicht, ob der insert gutgegangen ist - ob also überhaupt eine neue id erzeugt wurde.
$dateiname=$_FILES['bild_neu']['name'];
$dateiendung=substr($dateiname,-3);
Was auch immer Du als Dateiendung betrachtest (vermutlich das, was nach dem letzten Punkt kommt):
Das muß nicht 3 Zeichen lang sein, das kann sowohl kürzer sein (z.B. bla.js, bla.pl, ...) oder auch länger (z.B. bla.html, bla.properties, bla.jpeg ...)
@copy($bild_neu,"images/loesungen/$file");
Auch hier wäre eine Überprüfung des Erfolgs sinnvoll.
$update_bild=@mysql_query("UPDATE loesungen SET
bild='".$file."'
WHERE id='".$id."'");
}
Same here - Überprüfe immer den Erfolg von Aktionen, die (theoretisch) schiefgehen können.
header("Location: ?go=text_loesungen");
Auch wenn die meisten Browser das mitmachen: hier muß eine vollständige Adresse genannt werden (läßt sich ja aus den automatisch existenten Variablen zusammensetzen).
cu,
Andreas
Hier weißt Du es nicht mehr.
Wie ist die Variable $title_neu belegt? Ist sie es überhaupt?
sorry ;-) habe durch das ganze Probieren statt $_POST["title_neu"], $title_neu geschrieben...
$id=mysql_insert_id();
Der insert klappt ja auch, aber leider ohne die Werte.
Wenn ich $_POST["title_neu"] per echo ausgebe, ist dieser Wert auch vorhanden.
$dateiname=$_FILES['bild_neu']['name'];
$dateiendung=substr($dateiname,-3);
Was auch immer Du als Dateiendung betrachtest (vermutlich das, was nach dem letzten Punkt kommt):
Das muß nicht 3 Zeichen lang sein, das kann sowohl kürzer sein (z.B. bla.js, bla.pl, ...) oder auch länger (z.B. bla.html, bla.properties, bla.jpeg ...)
Da bei diesem Upload nur jpg und gif dateien benutzt werden ist dies vollkommend ausreichend.
Danke für deine Hilfe, aber mein eigentliches Problem ist nur, das die übergebenen Werte nur in die Datenbank geschrieben werden, wenn das File-Input Feld leer ist. Selbst wenn ich mit $_POST["title_neu"] die Werte ausgeben lasse, sind diese korrekt.
Aber warum klappt der insert nur mit leeren Werten, wenn ich eine File mit übergebe? Die Werte sind doch vorhanden.
Hallo
Hi... ich sitze immer noch an einem Problem bei der verarbeiten von einem multipart-Formulars.
deswegen musst Du nicht gleich einen neuen Thread aufmachen. Du hast ja noch nicht einmal die guten Tipps, die Du in Deinem ersten Thread erhalten hast, umgesetzt. Bitte bleibe dort, ich habe Dir dort geantwortet.
Freundliche Grüße
Vinzenz