Upload
steve_M
- php
0 Tobias Kloth0 Tom0 Benni0 Tobias Kloth0 Tom
hallo,
ich programmiere mir gerade ein Upload script und bekomme es nicht hin mit $_Files auf meinen Dateinamen zugreifen.
PHP:
echo $_FILES['var_in_bild'];
dann bekomme array zurück aber wenn ich sage
echo $_FILES['var_in_bild'][0];
bekomme ich garnichts zurück, wieso?
Hallo,
echo $_FILES['var_in_bild'][0];
bekomme ich garnichts zurück, wieso?
weil $_FILES['foo'] ein assoziatives und kein numerisches Array liefert, siehe http://de2.php.net/manual/de/features.file-upload.php.
Grüße aus Nürnberg
Tobias
Hello,
echo $_FILES['var_in_bild'][0];
bekomme ich garnichts zurück, wieso?
weil $_FILES['foo'] ein assoziatives und kein numerisches Array liefert, siehe http://de2.php.net/manual/de/features.file-upload.php.
Das ist nicht ganz richtig. Man muss auch immer erst prüfen, was für ein Array geliefert wird.
da kommt entweder
$_FILES[$feldname]['tmp_name']
$_FILES[$feldname]['name']
$_FILES[$feldname]['error']
...
oder
$_FILES[$feldname]['tmp_name'][0]
$_FILES[$feldname]['tmp_name'][1]
...
$_FILES[$feldname]['tmp_name'][n]
$_FILES[$feldname]['name'][0]
$_FILES[$feldname]['name'][1]
...
$_FILES[$feldname]['name'][n]
$_FILES[$feldname]['error'][0]
$_FILES[$feldname]['error'][1]
...
$_FILES[$feldname]['error'][n]
Deshalb muss man nach dem Upload ersteinmal fragen, ob
if (isset($_FILES[$feldname]['error'])
{
if ($_FILES[$feldname]['error']===0))
{
# es wurde EINE Datei unter dem Feldnamen hochgeladen, es trat kein Fehler auf
echo "<p class="message">Unter dem Namen ".$_FILES[$feldname]['name'].
" wurde eine Datei mit ".$_FILES[$feldname]['size']." Bytes".
" und dem MIME-Type ".mime_content_type($_FILES[$feldname]['tmp_name']).
" hochgeladen.</p>";
## danach dann den MIME-Type im Array der erlaubten Typen nachsehen (musst Du
## Dir anlegen) und dann entsprechend reagieren.
}
elseif (is_array($_FILES[$feldname]['error']))
{
# es wurden mehrere Dateien unter dem Feldnamen hochgeladen
foreach ($_FILES[$feldname]['error'] as $key => $val)
{
if ($val === 0)
{
## unter dem Tempörärnamen $_FILES[$feldname]['tmp_name'][$key] liegt nun
## eine Datei vor, deren Mime-Type an mit
echo "<p class="message">Unter dem Namen ".$_FILES[$feldname]['name'][$key].
" wurde eine Datei mit ".$_FILES[$feldname]['size'][$key]." Bytes".
" und demm MIME-Type ".mime_content_type($_FILES[$feldname]['tmp_name'][$key]).
" hochgeladen.</p>";
## danach dann den MIME-Type im Array der erlaubten Typen nachsehen (musst Du
## Dir anlegen) und dann entsprechend reagieren.
}
else
{
## Fehlermeldung entsprechend Muster im IF-Zweig
}
}
}
else
{
echo "<p class=\message">Tu pöser Pupe Tu!</p>
}
}
else
{
## keine Files hochgeladen
}
Ich hoffe, dass nun kein Fehler mehr drinsteckt.
siehe auch:
http://de2.php.net/manual/de/function.mime-content-type.php
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo Tom,
ich hätte da mal 'ne andere Frage:
Was bedeutet das?
if ($val === 0)
^^^
Ich kenne bisher nur
if ($val == 0)
^^
Ist das das selbe?
Danke!
Benni
Hallo Benni,
if ($val === 0)
if ($val == 0)
Ist das das selbe?
nein, mit === wird zusätzlich geprüft ob $val den gleichen Type hat wie 0, siehe http://de2.php.net/language.operators.comparison.
Grüße aus Nürnberg
Tobias
Hallo Tobias,
nein, mit === wird zusätzlich geprüft ob $val den gleichen Type hat wie 0, siehe http://de2.php.net/language.operators.comparison.
OK, danke!
Benni
Hello,
if ($val === 0)
if ($val == 0)Ist das das selbe?
nein, mit === wird zusätzlich geprüft ob $val den gleichen Type hat wie 0, siehe http://de2.php.net/language.operators.comparison.
Und das ist hier auch notwendig, da man nur bei "kein Fehler (0)" weitermachen darf und nicht hei "Fehlermeldung nicht vorhanden (false, '', NULL)".
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo Tom,
Das ist nicht ganz richtig.
doch. $_FILES['foo'] ist immernoch ein assoziatives Array :-)
da kommt entweder
$_FILES[$feldname]['tmp_name']
[...]
oder
$_FILES[$feldname]['tmp_name'][0]
[...]
das sollte man aber wissen, was da kommt - bei name="foo[]" im input-Element ist $_FILES['foo']['name'] ein Array und bei name="foo" nicht. Wenn man allerdings ein Script hat, dass alle möglichen Uploads annehmen können soll, hast du natürlich recht.
Grüße aus Nürnberg
Tobias
Hello,
das sollte man aber wissen, was da kommt - bei name="foo[]" im input-Element ist $_FILES['foo']['name'] ein Array und bei name="foo" nicht. Wenn man allerdings ein Script hat, dass alle möglichen Uploads annehmen können soll, hast du natürlich recht.
Ich habe das nun nochmal soweit repariert.
unter http://selfhtml.bitworks.de --> Multiuploads
liegt ein Beispiel, meit dem man eine vaiable Anzahl Files uploaden kann. Darin müsst "nur noch" sie Vorschaufunktion ausgeschaltet werden für "non pictures". Wäre nett, wenn sich da mal ein JS-Künster austoben könnte.
Und dieses Script postet dann auf mein URR (Universal Request Responder), sprich Testscript für Requests. Der reagiert dann auch auf den Upload von Files so, wie ich mir das (bisher) als richtig vorstelle. Spezialwünsche musss man da natürlich immer selber einbauen. Das Script mann man downloaden.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom