Marco B.: multipart/form-data - file+input

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

  1. 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

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. 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.

  2. 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