Anfänger findet den Fehler nicht

Alles, was PHP betrifft, kann hier besprochen werden.

Anfänger findet den Fehler nicht

Postby Rolf Bergius » 10. August 2005 13:04

Moin,
ich habe einen einfachen Code abgeschrieben, um php zu lernen. Jetzt funktioniert es nicht und ich weiß nicht warum nicht.

Das Skript soll dem Anwender die Möglichkeit geben eine Datei auszuwählen und auf den Server zu schieben (upload halt).

Die Funktion is_uploaded_file() meldet mir, dass der upload schief gegangen ist, leider nicht warum.

Ich arbeite mit PHP Version 5.0.4. Hier ist mal der Code:
Code: Select all
<html>
    <head>
      <title> Beispiel </title>
      <!-- /*            10.08.2005 17:25:49 RB */  -->
    </head>
    <body>
        <h2>Datei-Upload</h2>
        <p>Jetzt werden html- und php-Dateinen auf den Server geschoben</p>
        <pre>
             <form action ="<?php print $PHP_SELF ?>" method="post" enctype="multipart/from-data">
                <input type="File" name="dateiname">    <br>
                <input type="submit" value="Abschicken">
             </form>
        </pre>
      <hr>
      <?php
         if (isset($dateiname))
            {
            if (!is_uploaded_file($dateiname))
               {
               echo "Übertragung der Datei ".$dateiname." fehlgeschlagen.";
               }
            else
               {
               echo "Die Datei ist auf dem Server";
               $ziel="./htdocs/$dateiname_name";
               if (move_uploaded_file($dateiname, $ziel))
                  {
                  echo "Die Datei wurde erfolgreich übertragen";
                  }
               else
                       {
                  echo "Ein Verschieben der Datei ist nicht möglich";
                  }
               }
            }
         else
            {
            echo "Es wurde keine Datei ausgewählt";
            }
      ?>

    </body>
</html>


tschau sir rolus
User avatar
Rolf Bergius
 
Posts: 35
Joined: 06. August 2005 12:00
Location: 29614 Soltau

Postby Wiedmann » 10. August 2005 13:42

Du soltest dir das entsprechende Kapitel im PHP-Manual nochmal anschauen.

-> $dateiname ist ein Array und kein String.
-> du solltest überhaupt die globalen Arrays nehmen und dich nicht auf register globals verlassen
-> $dateiname_name wird nirgends initialisiert
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Klein und Dumm

Postby Rolf Bergius » 10. August 2005 14:35

Ich habe das Kapitel noch mal gelesen und nicht verstanden.

Gibt php mir die Möglichkeit ein sessionabhängiges, zweidimensionales, globales Array auf dem Server zu füllen, das den Namen $_FILES[][] hat?

Fülle ich diese Array mit dem Befehl:
<input type="File" name="dateiname"> ?

Steht nach dem Füllen des Arrays in $_FILES[0][0] der Name der hochgeladenen Datei ?

Muss ich dieses Element umständlich mit $_FILES[dateiname][name] ansprechen?

Warum klappt das aber nicht?

hier noch mal der Code, diesmal mit $_FILES[][] und nicht mehr mit
register globals.

Code: Select all
<html>
    <head>
      <title> Beispiel </title>
      <!-- /*            10.08.2005 17:25:49 RB */  -->
    </head>
    <body>
        <h2>Datei-Upload</h2>
        <p>Jetzt werden html- und php-Dateinen auf den Server geschoben</p>
        <pre>
             <form action ="<?php print $PHP_SELF ?>" method="post" enctype="multipart/from-data">
                <input type="File" name="dateiname">    <br>
                <input type="submit" value="Abschicken">
             </form>
        </pre>
      <hr>
      <?php
         if (isset($_FILES['dateiname']['name']))
            {
            echo "Die Datei " .$_FILES['dateiname']['name']. " wurde ausgewählt.";
            print_r($_FILES);
            if (!is_uploaded_file($_FILES['dateiname']['name']))
               {
               echo "Übertragung der Datei ".$_FILES['dateiname']['name']." fehlgeschlagen.";
               }
            else
               {
               echo "Die Datei ist auf dem Server";
               $ziel="./htdocs/".$_FILES['dateiname']['name'];
               if (move_uploaded_file($_FILES['dateiname']['name'], $ziel))
                  {
                  echo "Die Datei wurde erfolgreich übertragen";
                  }
               else
                       {
                  echo "Ein Verschieben der Datei ist nicht möglich";
                  }
               }
            }
         else
            {
            echo "Es wurde keine Datei ausgewählt";
            }
      ?>

    </body>
</html>


tschau sir rolus
User avatar
Rolf Bergius
 
Posts: 35
Joined: 06. August 2005 12:00
Location: 29614 Soltau

Postby jakimo72 » 10. August 2005 16:19

1. Kleiner Fehlerchen: verwende anstelle von
multipart/from-data
einfach
multipart/form-data

2. Das <pre> um das Formular macht keinen Sinn,
aber um das print_r() bietet es gute Dienste.

3. Nach dem Upload liegt auf dem Server nur die
Datei
$_FILES['dateiname']['tmp_name']
die dann verschoben werden kann.

4. Ich finde so umständlich ist
$_FILES['dateiname']['name'] nicht.
gewöhne Dich einfach daran,
Den Schreibkram, den Du mit "register globals"
sparen kannst, geht zu Lasten der Übersichtlichkeit, imho.

Code: Select all
<html>
    <head>
      <title> Beispiel </title>
      <!-- /*            10.08.2005 17:25:49 RB */  -->
    </head>
    <body>
        <h2>Datei-Upload</h2>
        <p>Jetzt werden html- und php-Dateinen auf den Server geschoben</p>
       
        <form action ="<?php print $PHP_SELF ?>" method="post" enctype="multipart/form-data">
            <input type="file" name="dateiname">    <br>
            <input type="submit" value="Abschicken">
        </form>
       
      <hr>
      <?php
         
         if (isset($_FILES['dateiname']['name']))
            {
            echo "Die Datei " .$_FILES['dateiname']['name']. " wurde ausgewählt.";
            echo "<pre>";
            print_r($_FILES);
            echo "</pre>";
            if (!is_uploaded_file($_FILES['dateiname']['tmp_name']))
               {
               echo "Übertragung der Datei ".$_FILES['dateiname']['name']." fehlgeschlagen.<br>";
               }
            else
               {
               echo "Die Datei ist auf dem Server<br>";
               $ziel="./htdocs/".$_FILES['dateiname']['name'];
               if (move_uploaded_file($_FILES['dateiname']['tmp_name'], $ziel))
                  {
                  echo "Die Datei wurde erfolgreich übertragen<br>";
                  }
               else
                       {
                  echo "Ein Verschieben der Datei ist nicht möglich<br>";
                  }
               }
            }
         else
            {
            echo "Es wurde keine Datei ausgewählt<br>";
            }
      ?>

    </body>
</html>
User avatar
jakimo72
 
Posts: 151
Joined: 07. February 2005 13:25
Location: Hamburg-Barmbek

bin ich blöd!

Postby Rolf Bergius » 10. August 2005 16:41

Danke.

Jetzt funktioniert es auch mit dem Nachbarn. Die Sache ist jetzt wesentlick klarer geworden und läuft. Ich hoffe, ich nerve nicht zu doll mit meinen Anfängerproblemen.

tschau sir rolus
User avatar
Rolf Bergius
 
Posts: 35
Joined: 06. August 2005 12:00
Location: 29614 Soltau

Re: bin ich blöd!

Postby Knight1 » 11. August 2005 11:19

Rolf Bergius wrote:Ich hoffe, ich nerve nicht zu doll mit meinen Anfängerproblemen.
tschau sir rolus


Jeder fängt mal klein an.

Das wird schon. Ging mir nicht anders.


Kai aka Knight1
Image
User avatar
Knight1
 
Posts: 310
Joined: 18. October 2003 10:03
Location: Trier
Operating System: Windows 7 Ultimate x64


Return to PHP

Who is online

Users browsing this forum: No registered users and 3 guests