$_FILES, Struktur des Arrays umbauen
Tom
- php
Hello,
durch ein paar Threads in den letzen Tagen zum Thema uploads bin ich nochmal mit einer unfertigen Lösung von meinem großen Zettel konfrontiert worden. Ich möchte das nun fertig machen:
1. Aus der Eingabe im Formular:
-------------------------------
<input type="file" name="attach[]" size="50"><b< />
<input type="file" name="attach[]" size="50"><br />
<input type="file" name="userfile" size="50"><br />
2. Wird $_FILES:
-------------------------------
Array
(
[attach] => Array
(
[name] => Array
(
[0] => aufkleber_auge.gif
[1] => aufkleber_rose.gif
)
[type] => Array
(
[0] => image/gif
[1] => image/gif
)
[tmp_name] => Array
(
[0] => /tmp/phpG98S8W
[1] => /tmp/phpfcLLxB
)
[error] => Array
(
[0] => 0
[1] => 0
)
[size] => Array
(
[0] => 8965
[1] => 3027
)
)
[userfile] => Array
(
[name] => Tortenrand.gif
[type] => image/gif
[tmp_name] => /tmp/phpI74nOf
[error] => 0
[size] => 3600
)
)
3. Für die leichtere Verarbeitung soll das Array invertiert werden
------------------------------------------------------------------
4. Zur Zeit macht meine Funktion noch dies:
-------------------------------------------
wird durch $attach = convert_filearray($_FILES):
Array
(
[attach_0] => Array
(
[name] => aufkleber_auge.gif
[type] => image/gif
[tmp_name] => /tmp/phpG98S8W
[error] => 0
[size] => 8965
)
[attach_1] => Array
(
[name] => aufkleber_rose.gif
[type] => image/gif
[tmp_name] => /tmp/phpfcLLxB
[error] => 0
[size] => 3027
)
[userfile] => Array
(
[name] => Tortenrand.gif
[type] => image/gif
[tmp_name] => /tmp/phpI74nOf
[error] => 0
[size] => 3600
)
)
Aber das gefällt mir nicht
======================================================
Bevor ich jetzt zum dritten Mal anfange, meine Fragen:
Könnten noch andere Strukturen entstehen, als unter 1. ?
Ich habe zwar eine Menge experimentiert, aber könnte daoch was übersehen haben.
Wie kann man in einem indizierten Array den zuletzt eingefügten Index herausbekommen?
Vielleicht bin ich ja sowieso ganz auf dem Holzweg und für die Verarbeitung Multi-Uploads mittels foreach() benötigt man das umgestellte Array gar nicht...
-----------------------
Es fehlt mit ja uch immer noch die Möglichkeit, am Client mittels JavaScript Nodes mit <input type=file ...> dynamisch hinzuzufügen. Das bekomme ich leider auch nicht hin.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo,
also ich habe jeder Datei eine eigenen namen gegeben
<input type="file" name="datei1" size="50">
<input type="file" name="datei2" size="50">
<input type="file" name="datei3" size="50">
danach habe ich eine Funktion geschrieben, welche dann überprüft, ob alles OK mit der Datei und mehr, hoffe du kommst damit klar:
function datei_ok($dateiname,$endung) {
if($_FILES[$dateiname]['error']) {
switch($_FILES[$dateiname]['error']) {
case 1: echo "Datei ".$_FILES[$dateiname]['name']." ist zu groß (PHP Regel)<br>";break;
case 2: echo "Datei ".$_FILES[$dateiname]['name']." ist zu groß (Formular Regel)<br>";break;
case 3: echo "Datei ".$_FILES[$dateiname]['name']." wurde nur teilweise hochgeladen<br>";break;
case 4: echo "Datei für "".$dateiname."" wurde nicht hochgeladen<br>";break;
default: break;
}
return 0;
}
if($endung!=substr($_FILES[$dateiname]['name'],strrpos($_FILES[$dateiname]['name'],".")+1)) {
echo "Datei ".$_FILES[$dateiname]['name']." besitzt falschen Datentyp<br>";
return 0;
}
else return 1;
}
Es fehlt mit ja uch immer noch die Möglichkeit, am Client mittels JavaScript Nodes mit <input type=file ...> dynamisch hinzuzufügen. Das bekomme ich leider auch nicht hin.
Das verstehe ich nich.
Falls du vorgeben meinst, da ist verboten ( aus Sicherheitsgründen).
MfG
Christian
Hello,
hab Dank für die Antwort, aber ich muss vielleicht etwas ausholen dazu:
Ich bastele mir einen großen Web-Baukasten und ein Feature davon (Anwendungsbeispiel) ist das Anlegen einer Bilddatenbank. Dabei kann einem
Bild mehrere andere zugeordnet werden.
Jetzt weiß man erstens nicht, wieviel Leitthumbs zu einer Datengruppe gehören und man weiß vorher nicht, wieviele related Thumbs zu jedem Leitbild gehören.
Standardmaske könnte so aussehen:
<bild1> [+]
<bild1a>
<bild1b>
<bild1c> [+]
...
<bild2>
<bild2a>
<bild2b>
<bild2c>
...
...
Die Zuordnung soll optisch geschehen.
Bisher läuft das Modul mit einem Post pro Bild. Der Nachteil ist aber, dass das Bild einmal rauf und einmal runter geladen werden muss, also der doppelte Traffic stattfindet.
Ist wie gesagt nur ein Beispiel.
Ich möchte die Übertragung in eins durchführen. Mit Hilfe von JavaScript soll ein neues Inputelement erzeugt werden, wenn man auf [+] klickt. Die Liste soll also länger werden. Das neue Element ist natürlich leer. Beschreiben lässt es sich ja nicht mehr, wie Du schon richtig erwähnt hast.
Wie geht das? Mit DOM habe ich bisher überhaupt keinen Plan.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo,
dann erstell meinetwegen so 10-20 Stück und mach sie mit CSS "invisible" falls du sie dann brauchst, ändere mit JS die CSS-Eigenschaft.
Must dann nur auf Serverseite dir mehr einfallen lassen.
Auf jeden Fall solltest du im Formular nur mit <input type="file" name="file[]"> arbeiten und mir dann ne Funktion schreiben, ähnlich wie ich, um alle Fälle durchzugehen.
MfG
Christian