File Upload in eigenen Modul

Hallo,

ich möchte in meinem Modul einen Upload für csv Dateien einbauen. Egal was ich mache, ich werde immer ausgelogt. Hab ich ein Denkfehler oder funktioniert nachfolgendes grundsätzlich nicht im tpl?

   <form class="HWMITForm" name="fileUpl" id="fileUpl" enctype="multipart/form-data" action="[{$oViewConf->getSelfLink()}]" method="POST">
        csv Datei upload: <input name="userfile" type="file" />
        <input type="submit" value="Datei hochladen" />
   [{$fileUpload->csvfileUpload()}] 
   </form>

In der Klasse steht noch nichts weiter drin, als print_r $_POST und $_FILES.

Grüße aus Berlin

korrekt, die gezeigte Code Stelle alleine würde grundsätzlich nicht funktionieren.

Das Programmieren an sich funktioniert prinzipiell so, dass man die gewünschten Funktionen selbst programmieren muss. Z.B. wenn ich ein Paypal Express Checkout integrieren möchte, reicht es leider nicht in irgendeinem Template “$paypal->machMirEinExpressCheckoutHierRein()” zu schreiben und der Shop und das Internet kriegen das schon auf irgendeine magische Weise hin, dass da eine Paypal Integration mit allem drum und dran entsteht.
Stattdessen muss man jeden logischen Schritt selber funktional mit PHP Code abbilden.
In Deinem Fall wären das mindestens:

  • ein HTML Formular mit allen nötigen Feldern, wie bei allen anderen Formularen im Shop. nur ein Eingabefeld für Dateien reicht nicht aus.
  • eine Methode bzw eine Stelle im Controller, die auf dein Upload reagiert und die Datei wie gewünscht verarbeitet

Schau Dir gerne zuerst das Kontaktformular an, da sieht man, wie die Sache mit dem Formular und der Funktion im Code so geht.
Danach schau dir irgendeineine Stelle an, wo Dateien hochgeladen werden, z.b. Artikel-Mediendateien in der Artikelverwaltung im Admin.
Und dann musst Du nur noch das programmieren, was mit der CSV Datei passieren soll. Aber auch hier gilt: es reicht nicht aus, einfach irgendwelche Wörter, die wie Varaiblen und Methoden aussehen, in die PHP Datei einzutippen und der Rest klappt irgendwie von selbst, sondern man muss den Shop beibringen, welches Objekt in der Variable $fileUpload ist und was seine Methode csvfileUpload() machen soll.

Mhh toll, komme mir bei der Aussage vor wie ein Erstklässler.
Ich glaube da hast du was Missverstanden, grundsätzlich weiß ich schon wie man sowas macht, halt nur nicht im Modul und primär verstehe ich nicht, warum nach senden ein Logout aus dem Admin erfolgt, in der Funktion steht ja noch nichts drin was so ein Fehler verursachen könnte.

also mindestens rein sollte
[{ $oViewConf->getHiddenSid() }]
input type=“hidden” name=“oxid” value="[{$oxid}]" /
input type=“hidden” name=“cl” value="[{ $oViewConf->getActiveClassName() }]"

ich hätte da einen modul anzubieten die mehr kann:

ich hab schon alles erlebt, daher versuche ich selbstverständliche Sachen nicht mehr als selbstverständlich zu betrachten :smiley:

guck mal dieses Formular hier an:

Durch cl = [{$oView->getClassname()}] schickt es Daten an seinen eigenen Controller, quasi an sich selbst.
Durch den fnc Parameter kann man auch eine bestimmte Methode in Controller aufrufen, dieser ist in meinem Code jedoch leer, weil er an einer anderen Stelle gesetzt wird:

Und im Controller werden die Daten aus dem Request raugeholt:

Für File Upload habe ich aktuell keine öffentlichen Beispiel-Module, aber in v6.2 nutze ich sowas:

$aFileInfo = Registry::getConfig()->getUploadedFile("userfile");

Danke, ich glaube damit komme ich schon einen Schritt weiter!

@rafig sowas komplexes benötige ich nicht, aber danke für den Link, eigentlich soll nur eine Datei auf dem Server gespeichert werden.

Muss nochmal nachhaken, kann es sein, dass die globale Variable $_FILES keine Ausgabe erzeugt? $_POST funzt problemlos, egal was ich mit FILES anstelle, nichts steht im Array. Versuche schon den ganzen Sonntag eine besch… Datei auf dem Server zu speichern.
Habe sowas schon öfter auf normalen Webseiten eingebaut, da gibt es nie Probleme.
Hoffe es gibt einen weiteren Ansatz der hilfreich ist. Will einfach nur erreichen, dass in meinem Modul eine Datei in ein Verzeichnis gespeichert wird, ohne sie weiter zu verarbeiten, dass passiert an anderer Stelle.

Das funktioniert nicht:
echo “

”;
echo “FILES:
”;
print_r ($_FILES);
echo “
”;

einzig aus meiner Fehlermeldung kommt vor oder nach dem senden: throw new RuntimeException(‘Invalid parameters.’);

Keine Ahnung ob ich irgendwas übersehe.

Upload erlaubt? Filesize, Extension? Zu groß, falsche Endung?

Verstehe ich nicht, warum sollte der Upload nicht erlaubt sein, der Ordner hat die entsprechenden Rechte und Filesize ist nicht angegeben, also nicht begrenzt, die Endung sollte kein Problem darstellen, da im enctype “multipart/form-data” steht.

Nicht hilfreich, wie erwähnt ich mach das nicht zum ersten mal und auf einer meiner Seiten funktioniert es, zumal wenn file_uploads = Off wäre, dann dürfte es grundsätzlich im Shop kein Fileupload möglich sein.