phpBB: "Das übermittelte Formular war ungültig."

Fragen zum Thema HTML, JavaScript, PHP
Antworten
Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

phpBB: "Das übermittelte Formular war ungültig."

Beitrag von fat-lobyte » Mi Feb 01, 2012 12:02 pm

Hallo, ich versuche gerade für ein Forum ein Python Skript zu schreiben, das ein Verzeichnis hochlädt.
Das Forum ist phpBB 3.10.0, und die Dateien werden in einen MOD hochgeladen, der DownloadMOD heißt.

In Python verwende ich mechanize um als "Browser" zu fungieren. Der betreffende Code sieht so aus:

Code: Alles auswählen

def upload_file(self, infilename, description, long_desc, category=None, cat_id=None):
    if not cat_id:
        try:
            cat_id = self.category_map[category]
        except KeyError:
            raise UnknownCategory("Category \"%s\" unknown." % category)

    # open upload page
    up_url = Uploader.BASE_URL+Uploader.PATH_UPLOAD+str(cat_id) # die URL für das Upload-Formular
    logger.debug("Upload URL is: %s", up_url)
    self.browser.open(up_url)

    self.browser.select_form(nr=1)

    self.browser["description"] = description
    self.browser["long_desc"]   = long_desc
    self.browser["cat_id"]      = [str(cat_id)]

    # guess mimetype
    mimetype = mimetypes.guess_type(infilename)[0]
    logger.debug("MIME-type of file is: %s", mimetype)


    # open file to be uploaded and submit form
    with open(infilename, 'rb') as f:
        self.browser.form.add_file(f, mimetype, os.path.basename(infilename))
        try:
            r = self.browser.submit()
        except mechanize.HTTPError:
            raise DLModError("An error uploading the file occured")
Leider funktioniert der Upload *manchmal* nicht. Woran es liegt weiß ich nicht, es hängt nicht von der Datei oder vom Dateityp ab.
Wenn es fehlschlägt, bekomme ich auf der Antwortseite angezeigt:
Das übermittelte Formular war ungültig. Versuchen Sie erneut, das Formular abzusenden.
Hat jemand irgendeine Ahnung, warum dieser Fehler kommt? Wann kommt er normalerweise? Was kann man dagegen tun?

Bin für jeden Tip dankbar, auch wenns nur Ideen sind.
mfg, fat-lobyte
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: phpBB: "Das übermittelte Formular war ungültig."

Beitrag von Xin » Mi Feb 01, 2012 12:17 pm

Wenn ich das richtig verstehe, versteht der Webserver die Daten nicht, die Du mit dem Pythonskript versenden möchtest.

Kannst Du dir die Anfrage an den Webserver auf die Festplatte schreiben?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: phpBB: "Das übermittelte Formular war ungültig."

Beitrag von fat-lobyte » Mi Feb 01, 2012 12:35 pm

Xin hat geschrieben:Wenn ich das richtig verstehe, versteht der Webserver die Daten nicht, die Du mit dem Pythonskript versenden möchtest.
Richtig. Aber wieso versteht er sie "manchmal" und "manchmal" nicht?
Xin hat geschrieben:Kannst Du dir die Anfrage an den Webserver auf die Festplatte schreiben?
Ja, kann ich, muss aber wissen was. Was wäre denn interessant?
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: phpBB: "Das übermittelte Formular war ungültig."

Beitrag von Xin » Mi Feb 01, 2012 1:06 pm

fat-lobyte hat geschrieben:
Xin hat geschrieben:Wenn ich das richtig verstehe, versteht der Webserver die Daten nicht, die Du mit dem Pythonskript versenden möchtest.
Richtig. Aber wieso versteht er sie "manchmal" und "manchmal" nicht?
Weil manchmal ein Bug erreicht wird und manchmal nicht?

Nur, weil Du den Fehler in der Software nicht selbst produziert hast, heißt das nicht, dass andere Entwickler Dir keine Fehler unterjubeln.
fat-lobyte hat geschrieben:
Xin hat geschrieben:Kannst Du dir die Anfrage an den Webserver auf die Festplatte schreiben?
Ja, kann ich, muss aber wissen was. Was wäre denn interessant?
Ob die abgesendeten Informationen bei einer erfolgreichen Übertragung identisch sind mit einer nicht erfolgreichen Übertragung.

Und falls nicht hat man einen Anhaltspunkt, was schief läuft.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: phpBB: "Das übermittelte Formular war ungültig."

Beitrag von fat-lobyte » Mi Feb 01, 2012 2:17 pm

Xin hat geschrieben: Weil manchmal ein Bug erreicht wird und manchmal nicht?

Nur, weil Du den Fehler in der Software nicht selbst produziert hast, heißt das nicht, dass andere Entwickler Dir keine Fehler unterjubeln.
Ohje, wenn du recht hast ist das schlecht. Ich habe keine Lust mich noch mit irgendwelchen MODs für Foren in PHP auseinanderzusetzen.
Xin hat geschrieben:Ob die abgesendeten Informationen bei einer erfolgreichen Übertragung identisch sind mit einer nicht erfolgreichen Übertragung.

Und falls nicht hat man einen Anhaltspunkt, was schief läuft.
Danke für den Tip, ich werds mir mal ansehen.
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: phpBB: "Das übermittelte Formular war ungültig."

Beitrag von Kerli » Mi Feb 01, 2012 11:51 pm

Viele Formulare verwenden in irgendeiner Weise ein Token, dass beim Abschicken übertragen wird und meist nur eine gewisse Zeit gültig ist. Wenn dieses Token ungültig oder zu alt ist kommt meistens eine Fehlermeldung wegen einem ungültigem Formular. Keine Ahnung ob das hier eine Rolle spielt :)
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: phpBB: "Das übermittelte Formular war ungültig."

Beitrag von Xin » Do Feb 02, 2012 11:22 am

Kerli hat geschrieben:Viele Formulare verwenden in irgendeiner Weise ein Token, dass beim Abschicken übertragen wird und meist nur eine gewisse Zeit gültig ist. Wenn dieses Token ungültig oder zu alt ist kommt meistens eine Fehlermeldung wegen einem ungültigem Formular. Keine Ahnung ob das hier eine Rolle spielt :)
Ich bin noch nicht sicher, was es bedeutet "Verzeichnisse" hochzuladen, denn Verzeichnisse könnten ja auch größer sein und das wiederum länger dauern...
Die Übertragungsgeschwindigkeit wäre dann die willkürliche Komponente, die darüber entscheidet, ob es klappt oder nicht.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: phpBB: "Das übermittelte Formular war ungültig."

Beitrag von fat-lobyte » Do Feb 02, 2012 4:01 pm

Xin hat geschrieben:Ich bin noch nicht sicher, was es bedeutet "Verzeichnisse" hochzuladen
Das bedeutet alle Dateien in einem Verzeichnis.

Also, ich habe das Problem zwar nicht im klassischen Sinne "gelöst", aber zumindest funktioniert das Skript jetzt.
Zwei Dinge habe ich gemacht:

1) ich habe vor jedem upload ein sys.sleep(1) eingebaut, damit sich der Empfänger auf dem Server "beruhigen" kann. Das ist zwar wirklich nicht hübsch, funktioniert aber erstaunlich gut.

2) Als ich dann das Skript auf Linux ausprobiert habe gabs keine Probleme. Auf Windows allerdings schon - ich bekam wieder den Fehler.
Das Problem lag darin: Die Dateinamen sind auf Windows in irgendeinem encoding kodiert, das "mcbs" heißt.
Das Formular erwartete aber anscheinend "UTF-8", wenn es Sonderzeichen bekam, kam der Fehler. Nachdem auf Linux die Dateinamen in UTF-8 kodiert sind war das dort kein Problem.
Also was habe ich gemacht? Ich habe einfach alle Strings, die dem Formular übergeben wurden umkodiert, mit folgender Zeile:
str = irgendeine_betriebssystem_fkt()
str = str.decode(sys.getfilesystemencoding()).encode('UTF-8')
sys.getfilesystemencoding() gibt die Kodierung des Dateisytems zurück (Windows: 'mcbs' und Linux: 'UTF-8'). Damit "dekodiert" man den String und kodiert ihn dann in das gewünschte Format.

Danke für die Hilfe Leute!
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: phpBB: "Das übermittelte Formular war ungültig."

Beitrag von Xin » Do Feb 02, 2012 4:12 pm

fat-lobyte hat geschrieben:
Xin hat geschrieben:Ich bin noch nicht sicher, was es bedeutet "Verzeichnisse" hochzuladen
Das bedeutet alle Dateien in einem Verzeichnis.

2) Als ich dann das Skript auf Linux ausprobiert habe gabs keine Probleme. Auf Windows allerdings schon - ich bekam wieder den Fehler.
Das Problem lag darin: Die Dateinamen sind auf Windows in irgendeinem encoding kodiert, das "mcbs" heißt.
Das Formular erwartete aber anscheinend "UTF-8", wenn es Sonderzeichen bekam, kam der Fehler. Nachdem auf Linux die Dateinamen in UTF-8 kodiert sind war das dort kein Problem.
Interessantes Problem, logische Lösung.

Wieso gehst Du in fremden Boards fremd? ;-D
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: phpBB: "Das übermittelte Formular war ungültig."

Beitrag von fat-lobyte » Do Feb 02, 2012 4:27 pm

Xin hat geschrieben:Wieso gehst Du in fremden Boards fremd? ;-D
:-)
Das ist ein Board für meine Studienrichtung, wo sich leute mit Tips bzgl. Studium, Lehrveranstaltungen, Organisatorisches, ... austauschen.
Zusätzlich gibts noch eine Prüfungsfragensammlung, und da das Board vor kurzem neu erstellt wurde, habe ich angeboten ein Skript zum Hochladen der alten Dateien zu schreiben. War dann (wie so üblich) mehr Arbeit als erwartet, aber immerhin funktioniert das Skript so einigermaßen :-D

[edit] Oh, ganz vergessen! Natürlich kann man sich den ganzen Code hier ankucken, falls mal jemand eine Ähnliche Problemstellung hat:
https://github.com/fat-lobyte/biograz-uploader
Haters gonna hate, potatoes gonna potate.

Antworten