Chris: Upload-Form funktioniert nicht

Hey ihr,

ich hab hier ein simples Upload-Script für Bilder:

<form name="form1" enctype="multipart/form-data" method="post" action="<? echo $PHP_SELF; ?>" class="contactform">
<input type="file" name="datei">
<input type="submit" name="button" value="Bild hochladen">
<input type="hidden" name="max_file_size" value="1000000">
<input type="hidden" name="send" value="1">
</form>

if($_POST['send'] == 1) {
  // Namen festlegen und speichern in $bildname
  $bildname = "pic_".$_POST['datei_name'].'_'.time();

// MIME Prüfung
  if($_POST['datei_type'] == "image/jpeg" OR $datei_type == "image/x-png" OR $datei_type == "image/pjpeg"){}
  else { $error = 'mime'; }

// DateigröÃYe
  if($_POST['datei_size'] <= $_POST['max_file_size']) {}
  else { $error = 'size'; }

// Kopiervorgang durchführen, bei Fehler melden
  if(!copy($_POST['datei'],'/../../resources/'.$bildname)) {
    $error = 'copy'; }
}

Leider schlägt der Kopiervorgang fehl... $error hat bei mir am Schluss immer den Wert 'copy'.

Woran kanns liegen?

Lg
Chris

  1. Tach

    auf Files greift man mit dem Array $_FILES zu...

    schau mal hier: http://www.phpcenter.de/de-html-manual/features.file-upload.html

    1. Tach

      auf Files greift man mit dem Array $_FILES zu...

      schau mal hier: http://www.phpcenter.de/de-html-manual/features.file-upload.html

      Hey,

      Danke, so hab ich das jetzt auch gemacht - und es klappt ;)

      Lg
      Chris

      1. Hello,

        auf Files greift man mit dem Array $_FILES zu...

        schau mal hier: http://www.phpcenter.de/de-html-manual/features.file-upload.html

        Hey,

        Danke, so hab ich das jetzt auch gemacht - und es klappt ;)

        Entschuldige, wenn ich nochmal nachfrage, es ist ja Dein Webspace, aber...

        wie hast Du das jetzt auch gemacht?
        Hinter dem Link steht mMn nicht gescheites.

        Da wird weder überprüft, ob der Upload fehlerfrei beendet wurde, noch wird festgestellt, ob vielleicht ein Script hochgeladen wurde.

        Beim Fileupload kann man sich die größten Sicherheitslöcher in seinen Server reißen. Du solltest ruhig nochmal posten, was nun herausgekommen ist bei Deinem Script.

        Harzliche Grüße vom Berg
        http://bergpost.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

  2. Hello,

    <form name="form1" enctype="multipart/form-data" method="post" action="<? echo $PHP_SELF; ?>" class="contactform">

    <form name="form1" enctype="multipart/form-data" method="post" action="<? echo $_SERVER['SCRIPT_NAME']; ?>" class="contactform">

    Nimm besser 'SCRIPT_NAME'

    <input type="file" name="datei">
    <input type="submit" name="button" value="Bild hochladen">

    max_file_size kannst Du Dir schenken

    <input type="hidden" name="max_file_size" value="1000000">

    <input type="hidden" name="send" value="1">
    </form>

    if($_POST['send'] == 1) {

    if(isset($_POST['send']) and $_POST['send'] == 1)
      {

    ## nur weitermachen, wenn File auch fehlerfrei hochgeladen wurde

    if (isset($_FILES['error']) and $_FILES['error'] === 0)
        {

    // Namen festlegen und speichern in $bildname
      $bildname = "pic_".$_POST['datei_name'].'_'.time();

    Das ist gefährlich. Wenn, dann besser
        $bildname = "pic_".basename($_POST['datei_name']).'_'.time();

    // MIME Prüfung
      if($_POST['datei_type'] == "image/jpeg" OR $datei_type == "image/x-png" OR $datei_type == "image/pjpeg"){}
      else { $error = 'mime'; }

    Mime-Prüfung hat überhaupt keinen Sinn, wenn Du die Information vom Client benutzt.
    Du musst sie dann schon auf dem Server selber durchführen
    siehe hierzu
    http://de3.php.net/manual/de/function.mime-content-type.php und
    http://de3.php.net/manual/de/function.mime-content-type.php

    // DateigröÃYe
      if($_POST['datei_size'] <= $_POST['max_file_size']) {}
      else { $error = 'size'; }

    Woher kommt denn plötzlich $_POST['datei_size']?

    // Kopiervorgang durchführen, bei Fehler melden
      if(!copy($_POST['datei'],'/../../resources/'.$bildname)) {
        $error = 'copy'; }
    }

    }

    Leider schlägt der Kopiervorgang fehl... $error hat bei mir am Schluss immer den Wert 'copy'.

    Woran kanns liegen?

    Kann das sein, dass Du bisher überhaupt nicht selber versucht hast, den Fehler zu suchen?
    Dein Error_Reporting scheint jedenfalls nicht aktiv zu sein, denn sonst hättest Du einige Notices kassiert und sicherlich danach gefragt, warum die da stehen...

    Harzliche Grüße vom Berg
    http://bergpost.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

    1. Kann das sein, dass Du bisher überhaupt nicht selber versucht hast, den Fehler zu suchen?
      Dein Error_Reporting scheint jedenfalls nicht aktiv zu sein, denn sonst hättest Du einige Notices kassiert und sicherlich danach gefragt, warum die da stehen...

      Hey :) Die Error Messages hab ich mir hier gespart, weil sie das Script nur aufblähen. In meiner PHP-Datei sind die Messages natürlich drin.

      Ich hab jetzt aber das Script nochmal komplett neu aufgebaut. Hatte das von vor ein paar Jahren, da hab ich das mal geschrieben... und hab den Fehler nicht gefunden. Aber nachdem ich jetzt noch vernünftig neu angefangen hab, funktioniert es auch... Danke :)