Blog

CForms und WordPress-Probleme

Thema: Allgemein, 19.09.2007

CForms ist an sich ein prima Plugin als Kontaktformular. Gefällt. Das ich bis dato in der Sidebar eingebaut hatte und ganz hervorragend angenommen wurde. Wie es sich aber herausgestellt hat, kauft man sich damit zwei fette Probleme ein:

1. Kommentartext weg: Einige Leser hatten sich zurecht beklagt, dass man Probleme beim Kommentieren hat. Sobald man vergisst, ein Pflichtfeld wie zB das Rechenfeld (Antispam) auszufüllen, kommt ne Fehlermeldung, dass man doch bitte das Feld X ausfüllen möge, doch beim zurückgehen ist der gesamte Kommentartext weg! Das würde auch mich zum Abkotzen bringen, wenn ich mal nen langen Kommentarbeitrag verfasst hätte und die ganze Mühe für den Arsch war.

2. Seitenaufbau lahm: Zudem ist der Seitenaufbau der Sidebar nach dem Absenden eines Kommentars monsterlahm. Das hat mich seit Beginn an unmittelbar nach der Designumstellung irritiert. Auch das ist nun aufgeklärt.

3. Ursache: soweit ist jetzt klar, dass es am CForms-Plugin liegt. Dafür ein ganz herzliches Dankeschön an MT, der mich auf die Spur gebracht hatte (und natürlich auch ein Dank an Michael Wöhrer, der mir geholfen hat, obs nicht an seinem Plugin Edit Comments liegt). Er hat herausgefunden, dass das Caching deaktiviert ist im Blog:

Und vielleicht liegt es doch an Dir, denn Du sendest folgende Header bei Aufruf der wp-comments-post.php mit:

Cache-Control: no-cache, must-revalidate, max-age=0
Pragma: no-cache

Es lag aber nicht an Einstellungen in der Header.php (eines der Templatefiles), sondern an dem Plugin CForms. Das in der Datei CForms.php folgende Anweisungen mitsendet, egal wo man sich auf dem Blog befindet:
header(�Pragma: public�);
header(�Expires: 0″);
header(�Cache-Control: must-revalidate, post-check=0, pre-check=0″);
header(�Content-Type: application/force-download�);
header(�Content-Type: application/octet-stream�);
header(�Content-Type: application/download�);
header(â€?Content-Disposition: attachment; filename=\â€?formconfig.txt\â€?”);
header(�Content-Transfer-Encoding: binary�);
header(�Content-Length: � .(string)(strlen($buffer)) );

4. Gegenmaßnahme: Es reicht nicht, wenn man das Kontaktformular aus der Sidebar (wo es bei mir platziert ist und damit überall eingeblendet wird) ausbaut. Das bringt nix, denn das Plugin ist immer noch aktiv und sendet die no-cache Anweisung weiterhin. Man muss zudem das Plugin komplett deaktivieren! Sobald das Plugin deaktiviert ist, bleibt der Kommentartext erhalten, trotz Fehleingabe und der Seitenaufbau der Sidebar ist nun so wie er sein soll, zügig.

5. Lösung: Das ist natürlich keine Lösung auf Dauer, nur ein temporärer Fix. Denn, ich will das Plugin rein von der Funktionalität her behalten und weiterhin das Kontaktformular in der Sidebar anbieten. Denn dafür wurde es zu gut angenommen. Daher habe ich Oliver als Plugin-Inhaber angemailt, was man umstellen muss und wo, damit das Caching-Problem nicht auftritt und zudem das Kontaktformular dennoch funktioniert.


     

Artikelzusatzinfos
3. Artikelstatistik:
· read: 5985 · today: 2 · last: 24. May 2012

Trackback URI | Comments RSS

40 Kommentare zu “ CForms und WordPress-Probleme ”

  1. #1 paddya schrieb

    Wie wärs, wenn du einfach die Zeile

    header(�Cache-Control: must-revalidate, post-check=0, pre-check=0″);

    mal auskommentierst? Falls das nicht klappt, einfach mal alles auskommentieren :P

    Greetz

    paddya

  2. #2 Robert Basic [www] schrieb

    das Problem: ich weiß nicht, wie sich das auf CForms selbst auswirkt. Ich wart nun einfach die Antwort von Oli ab.

  3. #3 paddya schrieb

    Im Prinzip dürfte sich das gar nicht auswirken. Du sagst dem Browser ja dann nur nicht mehr, dass er die Datei cachen soll. Also eigentlich dürfte da nix passieren…

    Greetz

    paddya

  4. #4 BloggingTom [www] schrieb

    Oli scheint aber abwesend zu sein…

    PLEASE NOTE: There will be no cformsII support until September 23rd, I will not be able to respond to your posts prior to our return. If you haven’t posted here before your posts will end up in a moderation queue and not show prior to approval. Thanks for your understanding. See you soon.

    Da heissts wohl noch ein paar Tage warten ;-)

  5. #5 Robert Basic [www] schrieb

    was wäre mit
    header(�Expires: 0″);
    ?

  6. #6 Robert Basic [www] schrieb

    @Tom ,alles klar, ich hab Zeit:)

  7. #7 paddya schrieb

    Hm… ich muss mich echt mal mit den Headern, die fürs Caching zuständig sind beschäftigen ;)

    Ich denke mal, dass du das auch auskommentieren musst. Ich guck in der Zeit mal auf php.net wegen den Headern.

    Edit: Ja, solltest du auch auskommentieren

  8. #8 Kontaktformular at Gezeitencafe [www] schrieb

    [...] online, aber sicher ist sicher. Scheint leider ein kleiner Störenfried zu sein wie ich bei Basic Thinking gelesen habe. Filed under Allgemein [...]

  9. #9 mt [www] schrieb

    So, nun bin ich zu Hause und habe mir eben mal schnell die Sourcen von cforms II angesehen…

    Warum verrätst Du mir denn nicht, dass das Ding PHP-sessions benutzt?

    Dann ist das Problem vermutlich offensichtlich:

    Du hast (wird üblicherweise per default so ausgeliefert) in Deiner php.ini den Parameter

    session.cache_limiter=nocache

    stehen.

    Ersetze das mal durch

    session.cache_limiter=private_no_expire

    und starte den Webserver neu.

    Letztendlich handelt es sich aber trotzdem um einen Programmierfehler in cforms II, denn dort müsste in cforms.php in der Funktion start_cforms_session() vor dem Aufruf session_start() noch die Art und Weise des Cachings für die Session durch Aufruf von session_cache_limiter(‘private_no_expire’) gesetzt werden.

  10. #10 BloggingTom [www] schrieb

    @mt: Das würde heissen, dass man anstelle der Änderung in der php.ini auch das “session_cache_limiter” in die Datei cforms.php “reinpflanzen” könnte?

  11. #11 mt [www] schrieb

    Richtig, kann man.

    Habe ich soeben ausprobiert.

    In cforms.php ab Zeile 79

    function start_cforms_session() {
    @session_start();
    }

    ersetzen durch

    function start_cforms_session() {
    @session_cache_limiter(‘private_no_expire’);
    @session_start();
    }

    sollte das Problem lösen.

  12. #12 mt [www] schrieb

    Wäre nett, wenn die Lösung jemand verifizieren könnte und, falls keine Seiteneffekte auftauchen, den Autor des Plugins informiert.

    Da ich’s nicht einsetze, fühle ich mich nicht zuständig ;-)

  13. #13 Robert Basic [www] schrieb

    michse dabei, ist nun wieder drin.. test

  14. #14 Robert [www] schrieb

    nö, geht nicht, Mistding:)

  15. #15 mt [www] schrieb

    Öhmmm, jetzt greift bei Dir die explizite Programmierung.

    Auf Seiten, wo das Formular ANGEZEIGT wird, erzwingt das Plugin das NoCache und das ist offensichtlich explizit so gewollt, weil der Verfasser
    nicht davon ausgegangen ist, dass mehrere Formulare auf einer
    Seite angezeigt werden und er sich um das Zwischenspeichern der Inhalte seines Formulars selbst kümmert.

    Wir haben mit meinem Patch also das Problem nur für Leute behoben, die die cform auf einer eigenen Seite des Blog haben und nicht wie Du in der Sidebar :-(

  16. #16 Robert [www] schrieb

    immerhin

  17. #17 Robert [www] schrieb

    hab jetzt vorbeugend das Ergebnisfeld wirklich ätzend auffällig gemacht, wer das jetzt immer noch übersieht, muss echt eine Sonnenbrille mit Rot-Filter tragen:)

  18. #18 mt [www] schrieb

    Wobei ich das so ganz noch nicht verstehe…

    Hast Du o.g. Funktion wirklich so eingebunden wie beschrieben in die cforms.php?

    Weil der Expires:-Header immer noch darauf hindeutet, dass die PHP-Einstellung nicht zieht. Die Funktionen in der cforms.php sollten dem Header eigentlich ein anderes Aussehen verleihen.

    Kannst Du ggf. die Anpassung in der php.ini machen und anschliessend den Webserver neu starten?

  19. #19 Robert Basic [www] schrieb

    hm, sehr ungerne, da ich global keine Einstellungen wegen einem einzigen Plugin anpassen möchte

  20. #20 mt [www] schrieb

    Verstehe ich schon; wäre nur als Test zur Verifikation praktisch gewesen.

    Daher ist ‘ne gespiegelte Testumgebung (rsync und MySQL-Replikation rule) schon ganz praktisch…

  21. #21 Robert [www] schrieb

    mt, mein Fehler. Habe die falsche cforms hochgeladen, hatte nämlich drei lokale Versionen, 2 waren angepasst und via FTP ausgerechnet die falsche erwischt:))

    test … klappt nun.. probier mal
    ohne ausgefüllten Feld
    und mit falschem ergebnis
    geht in beiden Fällen in IE

  22. #22 Robert [www] schrieb

    kleineres Manko: man sieht den Kommentar nicht gleich nach dem Speichern und Reload der Page, oder war des eben ne optische Täuschung?

  23. #23 Robert Basic [www] schrieb

    wobei anscheinend doch irgendwie was faul ist: das mit CForms hakt nun nicht, sobald man einmal das Rechenfeld vergessen hat. Der Text ist dann wieder da beim zurückgehen.

    Aber irgendwie cacht das gesamt Blog nun sehr merkwürdig.
    Beispiel: recent comments in der Sidebar.

    Hier siehst Du nach dem Absendes des Kommentars in “jüngste Kommentare” Deinen Eintrag frisch dazugekommen. Geh dann auf die Startseite: dort siehst Du Dich nicht mehr. Erst ein manuelles Reload zeigt den Kommentar dann an. Ich war zB nicht eingeloggt drin, dann hatte ich was kommentiert mit allen fünf Kommentarfeldern, die sichtbar sind. Danach eingeloggt und siehe da, die Kommentarfelder wie Name etc waren immer noch zu sehen, was so aber für eingeloggte User nicht angezeigt wird. Auch da: Reload und gut ist. Hm… war das mit dem caching nun zuviel des Guten? Könnte halt hinderlich werden für Kommentarthreads, was die snychrone Anzeige neuer Comments angeht. Das dürfte die User ganz schön verwirren. Hm… wenn man es abwägt, dann ist das eine Problem (Rechenergebnis) nicht so wild wie nun das Neue. Werde also das Rechenergebnisfeld fett-rot gestalten, noch auffälliger und CForms erstmal im Originalzustand belassen. Alternativ mir ein anderes Plugin suchen für das Kontaktformular. Bis Oli wieder back ist und sich des Problems annehmen kann.

  24. #24 Robert Basic [www] schrieb

    sodele, habe nun den Ursprungszustand wieder hergestellt, originale cforms.php wieder aktiv. Werde das Ergebnis gleich separat im Artikel oben posten, was man machen kann, wenn das Plugin eben nicht in der Sidebar hängt, denn die Lösung ist schon mal was!!

  25. #25 mt [www] schrieb

    Ich würde das Ganze einen Designfehler des Plugins nennen.

    Durch die Verwendung von sessions, noch dazu für jede Seite, auch wenn dort gar kein cform angezeigt wird, wird der normale WordPress-Header-Mechanismus (mit passenden Expires: etc.) komplett durcheinander gewürfelt.

    WP funktioniert mit dem Plugin offensichtlich nur vernünftig, wenn man für sessions den Wert sessions_limiter=nocache setzt, was zufällig der Default-Wert ist und was dann aufgrund des Designfehlers des Plugins dazu führt, das JEDE Seite mit no-cache-Header ausgegeben wird, was dann wiederum zur Vor-/Rücktasten-Problematik bei normalen Formularen führt.

    Ich schau mal, ob man da noch was “feintunen” kann, aber eigentlich gehört so ein Murks in die Tonne. Punkt.

    Edit: Der Fehler mit dem notwendigen Reload wird IMMER auftauchen, auch wenn cforms NICHT in der Sidebar ist, siehe oben -> Designfehler.

  26. #26 Robert Basic [www] schrieb

    hat ja noch in dem einen Artikel viele weitere Vorschläge, ist ja nicht das einzige Plugin. Ich denke, wenn der Autor dieses Problem im Auge hat und gefixt hat, dass man es wunderbar wieder einsetzen kann.

  27. #27 paddya schrieb

    Ergänze aber bitte

    onclick=”this.value=””

    im Ergebnis-Feld. Wenn man den Text von Hand entfernen muss, nervt das.

    Greetz

    paddya

  28. #28 Robert Basic [www] schrieb

    mach ich

  29. #29 Robert [www] schrieb

    test

  30. #30 mt [www] schrieb

    Wenn noch jemand Lust hat, was auszuprobieren:

    function start_cforms_session() {
    @session_cache_limiter(‘private’);
    @session_cache_expire(0);
    @session_start();
    }

    Das erlaubt zwar das Cachen, expired den Cache aber sofort wieder.

    Das Vor-/Zurück im Browser funktioniert zumindest bei meiner Testseite dann immer noch. Mangels ständig neuer Kommentare etc. kann ich aber nicht probieren, ob auch die Aktualisierung der Seite besser klappt und man nicht explizit “Reload” drücken muss.

    @Robert: Hast Du Lust, das nochmal auszuprobieren, oder bist Du schon entnervt?

  31. #31 Robert Basic [www] schrieb

    werds noch testen^^

  32. #32 Alfons schrieb

    Sehe ich das Richtig, dass es nur Probleme gibt, wenn man beim schreiben eines Kommentars den Spamschutz vergisst einzutragen. Wenn es dieses Feld nicht gibt, gibts auch keine Probleme?
    Zumindest sind mir keine auf meinem Blog aufgefallen…

  33. #33 Stargazer [www] schrieb

    Ich wusste, warum ich wieder mal selbst das Rad neu erfinden musste. Zugegeben, Captchas und diese Mathe-Teile haben schon ihre Berühmtheit in der Blogszene erreicht. Aber muss das sein?

    Mal ganz einfach: Das ist zusätzliche Arbeit für den User. Ich bin eher für andere Ansätze mit denen man im Hintergrund den Spam rausholt _ohne_ dass der Benutzer etwas machen muss…

  34. #34 Basic Thinking Blog | CForms wieder aktiv [www] schrieb

    [...] hatten, das CForms-Plugin so hinzubiegen, dass es nicht mit dem Kommentarformular kollidiert (siehe Details hier), habe ich nun einen weiteren Versuch gemacht. Basiert auf dem Vorschlag von [...]

  35. #35 Tobias [www] schrieb

    Hallo, generelle Frage mit welchem code binde ich das Plugin überhaupt ein? Sidebar ist kein Problem, das geht ja mit den Widgets. aber sonst?

  36. #36 Robert Basic [www] schrieb

    steht in der ausführlichen Doku, die prima aufbereitet ist

  37. #37 rafael [www] schrieb

    Hallo Robert, erst mal Gratulation zum coolen Artikel in der Frankfurter Allgemeinen, hab ihn eben in Kasachstan, wo ich jetzt wohne gelesen. Zur Frage, das Cforms ist cool, wie aber bringe ich den dämlichen Wasserzeichentext unten weg, in welcher Datei liegt dieser. Ich habe einen Kundne, den dieses massiv stört. (Diesen Link – cforms contact form by delicious:days) wäre für eine Antwort dankbar!

  38. #38 Robert Basic [www] schrieb

    das dürfte simpel sein, wenn Du Deine Frage so formulierst, dass man sie im CFOrms-Forum versteht (weiß leider nicht, was Du mit Wasserzeichen meinst). Aber da CForms eine eigene CSS hat, dürfte es nicht so schwer sein herauszubekommen, welche Grafik das nun ist (siehe Adminmenue CForms) . Wenn Du mit Wasserzeichen tatsächlich nach diesem String mit Linkverweis suchst, so würde ich mir vorher zunächst die Lizenzbestimmungen anschauen, ob man den Linkverweis einfach so entfernen darf (außerdem ist das Ehrensache…) … und dann erst nach dem besagten String in den php-files suchen (mit Proton oder jedem anderen, beliebigen Editor).

    Kasachstan.. wie kommste denn dahin? Beruflich?

  39. #39 rafael [www] schrieb

    Vielen Dank für den guten Support :)

    Nun, zuerst wars Adventure, dann Liebe und jetzt der Versuch, in diesem Land in einem unvergleichlichen Aufbruch etwas aufzubauen:)

    Check my Blog: Da gibts viele Berichte und News von hier, mit schönen Fotos.

    http://www.wiedenmeier.ch/wordpress

  40. #40 Sabine [www] schrieb

    Moin, moin, cforms läuft super und ich habe viele Formulare.
    Seit ich >> WP simple cache << nutze, laufen die Formulare nicht mehr,besonders meine Onlinebuchung läuft nicht mehr.

    Was kann ich tuen.
    Habe mir gedacht die Seiten vom cache auszuschließen. Kann aber leider nicht Programmieren. Würde mich über eine Lösung freuen.


Dein Kommentar?

(Eingabe von Name, Mail und Webadresse ist freiwillig)