Hallo,
ich binde ein bestehendes Formular, mit dem Daten in meine zentrale Datenbank geschrieben werden sollen, in einer WP-Seite ..../formular/ mit readfile (...) ein.
Das klappt auch, und im Sourcecode erkenne ich, dass in der Anordnung <form name="Form" action="..../formular/" method="POST"> auch die gewünschte URL erscheint.
Beim zweiten Aufruf der Seite (Ausführen des Formulars) soll das Schreiben in die Datenbank erfolgen. Ich erhalte aber eine 404-Fehlermeldung!
Meine Frage: Verhindert WP derartige Konstruktionen?
Hat jemand eine Idee?
Form mit Post
-
-
- Gerade eben
- Anzeige
Hallo!
Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.
- ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
- ✔️ Deutsche Server & DSGVO-konform
- ✔️ Persönlicher Support (kein 0815-Ticket-System)
-
Du musst darauf achten, im Formular keine Feldnamen zu übergeben, die WP möglicherweise intern verwendet. Am geeignesten ist immer einen Präfix in den Formularfeldnamen zu verwenden. Außerdem kannst du mit readfile() keinen PHP-Code (also den zur Formularverarbeitung?) ausführen, wenn ich das richtig in Erinnerung habe, hier brauchst du include bzw. require.
-
Die Feldnamen habe mit einem Prefix versehen, keine Veränderung, das war es also nicht. Am readfile() kann es normalerweise auch nicht liegen. So wie ich es jetzt von WP aus versuche, habe ich es schon häufiger gemacht. Ich vermute, dass WP irgend etwas nicht schluckt.
Keine Ahnung, was. -
Dann würde ich zunäcsht nachschauen, was in WP ankommt (var_dump($_POST)) und was WP anschließend damit tut bzw. was passiert (zB welches Template verwendet wird etc.).
-
Ich habe die POST-Anweisung auf <form name="Form" action="anderedomain.de/test.php" method="POST"> geändert. Das macht er wunderbar, und ich kann mir mit var_dump($_POST) ansehen, was an Variablen so ankommt. Das ist alles einwandfrei.
So wie aber die angeforderte Seite eine WP-Seite ist, erhalte ich den 404-Fehler. Das heißt, ich erreiche diese Seite gar nicht.
Evtl. verlagere ich die Verarbeitung auf eine externe Seite, was aber nicht optimal für den Anwender ist.
Hast du noch eine Idee?
Wenn nicht, bedanke ich mich schon mal für deine Mühe! -
Poste vielleicht mal ein wenig Beispielcode, und wie du vorgehst. Am besten wäre ein minimales Testcase, was öffentlich zugänglich ist und das Problem reproduziert.
Ich setze auf mehreren Blogs als Kontaktformular-Plugin eine stark angepasste (eigentlich fast vollständig neugeschriebene) Variante einer uralten CForms-Version ein. Diese erstellt ein Formular (leere Action -> gleiche URL) im Beitrag. Ansonsten nichts anderes, Feldnamen erhalten einen Präfix und schon läufts.
Achja, verwendet die Seite Permalinks?
-
Das konkrete Beispiel kann ich anbieten, da es sich um eine Kundenseite handelt.
Ich erstelle eine leere WP-Seite mit einer ID=yy und einem konkreten Permalink (z.B. ../formular/).
In der page.php steht exemplarisch:
if ($post->ID == yy):
// -- bei GET
$var1 = $_GET['var1r'];
$var1 = $_GET['var1r'];
.....
// -- bei POST
$var1 = $_POST['var1r'];
$var1 = $_POST['var1r'];
.....
readfile ("domain.tld/seite.php?var1=$var1&var2=$var2......");
endif;
Die domain.tld/seite.php ist ein Script, das wahlweise (durch Variablen gesteuert) Daten anzeigt, ein Formular bereitstellt und die Formulardaten abspeichert und gleichzeitig die neuen Daten anzeigt. Vergleichbar mit einem Gästebuch.
Mit "normalen" Seiten ../formular/ mache ich das schon länger ohne Probleme.
In WP funktionieren alle Aufrufe per GET.
Die Übergabe mit POST landet, wie schon beschrieben im Nirvana, obwohl ACTION in der FORM-Anweisung die korrekte URL erhält. -
if ($post->ID == yy):
Zitatreadfile ("domain.tld/seite.php?var1=$var1&var2=$var2......");
Das funktioniert auch soweit noch? Egal ob $var1 per $_GET oder $_POST übergeben wird?
ZitatDie Übergabe mit POST landet, wie schon beschrieben im Nirvana, obwohl ACTION in der FORM-Anweisung die korrekte URL erhält.
Stehen die übergebenen Variablen vielleicht in $_GET?
Poste bitte mal ein minimales reproduzierbares Beispielscript.Übrigens:
Zitat<form name="Form" action="..../formular/" method="POST">
-
Danke!
Ich werde das alles mal mit ins lange Wochenende nehmen und noch einmal von Grund auf abrollen.
Ich melde mich in der kommenden Woche und berichte. -
Inzwischen hat mein Auftraggeber seine Anforderungen soweit abgespeckt, dass ich auf das Formular verzichten kann. Ich werde das Problem im Hinterkopf behalten, aber zunächst nicht weiter verfolgen.
Vielen Dank für deine Hilfe , marX!
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!