Ergebnis 1 bis 12 von 12

Thema: Bug? Dateiupload speichert Datei, allerdings wird der Pfad in DB gespeichert

  1. #1
    Contao-Nutzer Avatar von petra
    Registriert seit
    10.01.2010.
    Ort
    Herford
    Beiträge
    194

    Standard Bug? Dateiupload speichert Datei, allerdings wird der Pfad in DB gespeichert

    Hallo liebe Contao-Community,

    habe unter Contao 3.2.7 ein Formular angelegt mit Dateiupload; das Bild wird gespeichert, allerdings wird in der Datenbank der Pfad in 17 Zeichen gespeichert: "files/xxx..". Dabei sollte es doch die Bild-ID speichern, oder? Dateityp: binary (16).

    Für einen kleinen Hinweis wäre ich sehr dankbar!
    Geändert von petra (12.03.2014 um 09:16 Uhr)

  2. #2
    Contao-Nutzer Avatar von petra
    Registriert seit
    10.01.2010.
    Ort
    Herford
    Beiträge
    194

    Standard

    UPDATE: Da keiner antwortet, wollte ich nachfragen, ob ich mich vielleicht zu kompliziert ausgedrückt habe? Oder nutzt keiner von Euch die Funktion "Eingaben speichern" im Formulargenerator?

    Für ein Upload-Feld habe ich in der Datenbank ein Feld binary(16) angelegt, es wird jedoch der gesamte Dateipfad gespeichert und nicht die UUID. Ist das ein Fehler oder habe ich wohl etwas falsch gemacht?
    Wäre super, wenn mir jemand einen Tipp geben könnte. Danke!!

  3. #3
    Alter Contao-Hase Avatar von Messa
    Registriert seit
    19.01.2011.
    Ort
    Vorarlberg, Österreich
    Beiträge
    1.423

    Standard

    Habe das gleiche Problem.
    https://github.com/contao/core/issues/6849
    Full Service Agentur - Grafikdesign, Screendesign, Webdesign, Webentwicklung, SEO, Weiterbildung, persönliches Coaching
    http://www.matthiasgmeiner.com

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Bug ist das keiner - war schon immer so und wurde in Contao 3 wahrscheinlich auch nie geändert um Rückwärtskompatibel zu bleiben.

    Die relevanten Code stellen sind:
    • system/modules/core/forms/FormFileUpload.php, #239 - hier werden die Informationen über den Dateiupload in das $_SESSION array gespeichert.
    • system/modules/core/forms/FormFileUpload.php, #251 - hier wird der Datenbankeintrag für die Datei erzeugt.
    • system/modules/core/forms/Form.php, #441 - hier wird der Dateiname bzw. Pfad aus dem $_SESSION array extrahiert.


    Man müsste wahrscheinlich:
    • Das FormFileUpload Widget und die Form Class dahingehend erweitern, dass man optional auswählen kann, dass die UUID statt dem Pfad gespeichert wird.
    • Diese UUID muss daher auch im $_SESSION array mit gespeichert werden.
    • Dazu muss die Erzeugung des Datenbankeintrags auch vorgezogen werden.



    Oder man behilft sich mit HOOKS - da würde sich storeFormData anbieten.
    Geändert von Spooky (03.04.2014 um 13:46 Uhr)

  5. #5
    Contao-Nutzer Avatar von petra
    Registriert seit
    10.01.2010.
    Ort
    Herford
    Beiträge
    194

    Standard

    Hallo spooky,

    vielen Dank für Deine Erklärung! Habe es auch mit einem Hook gelöst. Besser wäre es aber trotzdem, wenn alles einheitlich wäre...

    Viele Grüße, Petra

  6. #6
    Alter Contao-Hase Avatar von Messa
    Registriert seit
    19.01.2011.
    Ort
    Vorarlberg, Österreich
    Beiträge
    1.423

    Standard

    Hey Petra kannst du den Hook posten?
    Brauche den gerade auch.

    Ja aber ist doch sinnfrei, wenn schon alles auf UUID aufgebaut ist,
    dann sollte das interne Formular auch so sein!

    lg Matthias
    Full Service Agentur - Grafikdesign, Screendesign, Webdesign, Webentwicklung, SEO, Weiterbildung, persönliches Coaching
    http://www.matthiasgmeiner.com

  7. #7
    Contao-Nutzer Avatar von petra
    Registriert seit
    10.01.2010.
    Ort
    Herford
    Beiträge
    194

    Standard

    Hallo Matthias,

    nehme den Hook processFormData. Es gibt bestimmt eine bessere Lösung, hatte meine auch eher als Notlösung, weil ich hoffte, dass "der Bug" noch behoben wird...

    PHP-Code:
    if($arrForm['id'] == 1//hier Deine Formular-Nummer einsetzen
    {
    ....
                    
    //Logo hochgeladen? Dann richtige UUID speichern, nicht den Pfad, wie Contao es aktuell macht
                    
    if(count($arrFiles['logo'])>&& $arrFiles['logo']['error']==&& $arrFiles['logo']['uploaded']==1) {
                        
    $pfad explode('files'$arrFiles['logo']['tmp_name']);
                        if(
    count($pfad)>0) {
                            
    $objFile = \FilesModel::findByPath('files'.$pfad[1]);
                            
    //print_r($objFile);
                            
    if($objFile !== null) {
                                
    $set['logo'] = $objFile->uuid;
                            }
                        }
                    }

                    \
    Database::getInstance()->prepare("UPDATE tl_table %s WHERE...")->set($set//die WHERE-Bedingung und Execute-Werte musst Du bei Dir natürlich anpssen
                                            
    ->execute(...);


    Viele Grüße, Petra

  8. #8
    Alter Contao-Hase Avatar von Messa
    Registriert seit
    19.01.2011.
    Ort
    Vorarlberg, Österreich
    Beiträge
    1.423

    Standard

    Hallo Petra danke für den Tipp.

    Mein Hook funktioniert super.
    Doch wenn ich nun über das BE -> Dateiverwaltung ein Bild hochladen bekomme ich diesen Fehler
    Code:
    Fatal error: Call to undefined method FileUpload::generateMarkup() in /contao/system/modules/core/drivers/DC_Folder.php on line 978
    Oky habe es rausgefunden habe meine Class FileUpload gennant aber die wird von Contao ja schon verwendet.
    http://www.contao-docs.org/docs/Cont...48164e0dded7b0

    lg Matthias
    Geändert von Messa (04.04.2014 um 11:27 Uhr)
    Full Service Agentur - Grafikdesign, Screendesign, Webdesign, Webentwicklung, SEO, Weiterbildung, persönliches Coaching
    http://www.matthiasgmeiner.com

  9. #9
    Contao-Nutzer Avatar von petra
    Registriert seit
    10.01.2010.
    Ort
    Herford
    Beiträge
    194

    Standard

    Hallo Matthias, ja supi, dass es jetzt klappt!

  10. #10
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Ich habe hier mal eine kleine Erweiterung gebastelt, mit der das Konvertieren zu einer UUID nun automatisch passiert, wenn das Ziel-Feld im DCA als fileTree input definiert ist.
    Geändert von Spooky (25.11.2015 um 07:22 Uhr)

  11. #11
    Contao-Nutzer
    Registriert seit
    16.02.2010.
    Ort
    Schwepnitz
    Beiträge
    41

    Standard

    Hallo,
    das Thema möchte ich noch einmal aufgreifen.
    In der Beschreibung zur Erweiterung store_uuid steht:
    ... wenn das Ziel-Feld im DCA als fileTree input definiert ist.
    Genau daran scheitere ich im Moment.
    Wie müßte man wo so etwas definieren?

    Ziel ist eine Bilddatei, die über ein Frontendformular in der Dateiverwaltung gespeichert wurde, in einer MetaModels-Ausgabe anzuzeigen.
    Bislang klappt das maximal nur mit dem Pfad zur Datei....


    Beste Grüße
    Hartmut

  12. #12
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Den DCA Eintrag machst du ja normalerweise nicht selbst. Das Problem hier ist, dass die automatische Erkennung in Verbindung mit MetaModels nicht funktioniert bzw. evt. gar nie funktionieren kann. Da habe ich zu wenig Erfahrung, ich weiß leider nicht ob, wie und wann MetaModels ein etwaiges DCA für die Tabellen aufbaut.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •