Andreas: Formular mit PHP

Hallo,
folgender gekürzter Formular-Code:

print "<FORM ENCTYPE="multipart/form-data" ACTION="post.php" METHOD="POST" NAME="posting">\n";
print "Datei anhängen: <input type="file" name="datei" size="40"\n>";
print "<INPUT TYPE="SUBMIT" CLASS="ibut" name="action" VALUE="Absenden">\n";
print "</FORM>\n";
...
if ( $HTTP_POST_VARS['action'] == "Absenden" ){
$post = $SQL->putquery("INSERT INTO $TBLthread (name,date,lastpost,subject,message,logip,type) VALUES ('$username','$tstamp','$tstamp','$subject','$message','$logip','$form_thtype')");

$filename = $_FILES['datei']['name'];
$filesize = $_FILES['datei']['size'];
$mimetype = $_FILES['datei']['type'];
if ( isset($filename) ){
  if ( $filesize<300000 ){
    copy("$datei", "uploads/$datei_name");
    $update = $SQL->putquery("UPDATE $TBLthread SET uploadname = "$datei_name", uploadsize = '$filesize', mimetype = '$mimetype' WHERE date = '$tstamp'");
  }
  else{
    $filesizeErr = "Dateigröße von 300000 Byte wurde überschritten<br>Datei wurde nicht geladen";
  }
}
}

Der gleiche Code, nur für eine andere MySQL-Tabelle funktioniert, doch dieser nicht. Es liegt wohl an dem ENCTYPE="multipart/form-data", wenn ich das rausnehme, gehts, nur der Fileupload geht dann nicht mehr.
Was bewirkt eigenlich ENCTYPE="multipart/form-data, und warum funktioniert es bei mir nicht?
Gruß Andreas

  1. Hi!

    print "<FORM ENCTYPE="multipart/form-data" ACTION="post.php" METHOD="POST" NAME="posting">\n";
    print "Datei anhängen: <input type="file" name="datei" size="40"\n>";
    print "<INPUT TYPE="SUBMIT" CLASS="ibut" name="action" VALUE="Absenden">\n";
    print "</FORM>\n";

    Sowas sollte man nicht machen, lieber:
    <?php
    // php-code
    ?>
    <FORM ENCTYPE="multipart/form-data" ACTION="post.php" METHOD="POST" NAME="posting">
    ...
    <?php
    // mehr PHP-Code
    ?>

    afaik ist das so auch erheblich schneller, wobei das hier irrelevant sein dürfte.

    if ( $HTTP_POST_VARS['action'] == "Absenden" ){
    $post = $SQL->putquery("INSERT INTO $TBLthread (name,date,lastpost,subject,message,logip,type) VALUES ('$username','$tstamp','$tstamp','$subject','$message','$logip','$form_thtype')");

    $filename = $_FILES['datei']['name'];
    $filesize = $_FILES['datei']['size'];
    $mimetype = $_FILES['datei']['type'];

    if ( isset($filename) ){

    das bringt nichts weil Du $filename immer setzt, auch wenn es leer ist.

    if ( $filesize<300000 ){
        copy("$datei", "uploads/$datei_name");

    das solltest Du lassen, hierfür gibt es die Funktion move_uploaded_file(), Du solltest Dir mal:
    http://www.dclp-faq.de/q/q-formular-upload-php4.html und http://www.php.net/manual/de/features.file-upload.php ansehen.

    Der gleiche Code, nur für eine andere MySQL-Tabelle funktioniert, doch dieser nicht.

    Wie unterscheiden sich die Tabellen? Ist das auf demselben Server? Funktioniert der connect zur DB? funktioniert die DB - Abfrage?
    Und was genau heißt "funktioniert nicht"? Wird die Datei hochgeladen? Wird irgendwas in der DB verändett? Weißt Du genau an welcher Code ausgeführt wird, also hast Du geprüft welche If-Abfragen gewählt werden? Weißt Du ob die Datei hochgeladen wurde und nur nicht kopiert wurde...

    Es liegt wohl an dem ENCTYPE="multipart/form-data", wenn ich das rausnehme, gehts,

    was geht was sonst nicht geht?

    nur der Fileupload geht dann nicht mehr.

    Genau, weil der eben dies erfordert.

    Was bewirkt eigenlich ENCTYPE="multipart/form-data, und warum funktioniert es bei mir nicht?

    Siehe Links oben.

    Grüße
    Andreas

    1. Hallo,
      danke für die antwort.
      Werde erstmal die Links studieren.
      Gruß Andreas