Action URL in einem PHP-Formular über einen Schalter in Echtzeit dynamisch ändern, wie?
Also Folgendes: ich hab hier ein PHP-Formular mit einem Eingabefeld und einem Submit Button, dass die eingegebenen Werte an eine bestimmte URL sendet. (Das ist erstmal simpel) Ich habe auch herausgefunden, wie man die URL z.b mit einer Zahlenfunktion variieren kann. Auch das geht relativ leicht. Was hingegen scheinbar weniger einfach ist: Ich würde das Action Attribut, also die URL, wo die Eingaben hingesendet werden nun gerne über einen HTML-Schalter z.b Checkbox dynamisch & in Echtzeit ändern. z.b Checkbox aktiv = Daten werden an URL2 gesendet, Checkbox nicht aktiv = Daten werden an URL1 gesendet. Oder es soll einfach ein URL-Zusatz hinzugefügt werden, je nachdem ob die Checkbox aktiv ist oder nicht. Meine jetzt ganz blöde Frage: Wie oder mit welchem Ansatz kann das funktionieren? Ich habe da jetzt bereits XX Stunden rumprobiert: Normale Variablen mit Conditions definieren, Sessions starten, der Versuch ein Cookie zu setzen, dass beim Ein und Ausschalten der Checkbox gesetzt bzw. gelöscht werden soll (klappt nicht). Mit JS Codeschnipseln herumprobiert. Nichts davon scheint zu funktionieren bzw. es wird einfach immer der Zustand "checkbox unchecked" an URL1 gesendet.
Hat irgendeiner mit Ahnung ne Idee wieso das nicht funktioniert und ob es einen lösbaren Ansatz für dieses Problem gibt?
4 Antworten
Hi Rexxxxx,
das ist relativ einfach. Du verwendest in deinem HTML-Dokument JavaScript und änderst damit dynamisch das Attribut. Dafür gibt es verschiedene Wege um das zu tun. Mithilfe von DOM-Manipulation kannst du die Zieladresse für das Formular ändern.
Ich habe folgenden Code für dich schnell in meiner IDE erstellt:
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dynamisches Formular</title>
<script>
document.addEventListener("DOMContentLoaded", init);
let dyn_chk, myForm, ziele = ['meinePHPdatei.php', 'anderePHPdatei.php'];
function init() {
dyn_chk = document.querySelector("#dyn_chk");
myForm = document.querySelector("#myForm");
dyn_chk.addEventListener("change", changeAction);
}
function changeAction() {
if(dyn_chk.checked) {
myForm.action = ziele[1];
} else {
myForm.action = ziele[0];
}
}
</script>
</head>
<body>
<h1>Dynamische Formular</h1>
<label for="dyn_chk">
<input type="checkbox" id="dyn_chk">
Formular auf Zieladresse umstellen
</label>
<form action="meinePHPdatei.php" method="post" id="myForm">
<label for="vorname">
<input type="text" name="vorname" id="vorname">
</label>
<label for="nachname">
<input type="text" name="nachname" id="nachname">
</label>
<button type="submit">Formular senden</button>
</form>
</body>
</html>
Ich hoffe mein Code beantwortet deine Frage und würde mich über eine Rückmeldung freuen. Gern kannst du auf gutefrage.net weitere Fragen zum Thema stellen.
Viel Erfolg Rexxxxx
OK vielen Dank (hatte hier nicht mehr geschaut), da die einfache Lösung mit dem handle.php unten ganz am Anfang bereits hervorragend funktioniert hat. Oder gibt es hier bei Verwendung von JS irgendwelche Vor/ Nachteile bzw. braucht man eine spezielle Bibliothek? Aus irgendwelchen Gründen neigen meine JS-Scripte oft zu unerwarteten oder fehlerhaften Verhalten...
Moin.
Der Grundaufbau bei php ist ja der, dass du mittels php auf dem Server erzeugst (in html) und diese dann an den Client, sprich den Browser sendest.
Ab dem Moment, in dem das gesendet ist, kannst du mit php den Inhalt nicht mehr beeinflussen. Dafür nimmt man Javascript.
Ich persönlich würde Dir die Bibliothek JQuery empfehlen.
Sowohl dein <form> tag als auch das <input> (für die Checkbox) brauchen ein ID Attribut. Dann kannst du im Javascript Teil eine Funktion schreiben, die aktiviert wird, wenn der Nutzer die Checkbox schaltet, und diese dann das action Attribut des Form Tags ändert.
Wie das genau geht, dafür gibt es unzählige Anleitungen im Netz, hier ist google dein Freund.
Suchanfragen: jquery erste Schritte, jquery reagiere auf input checkbox ändern, jquery setze form action ....
Viel Erfolg,
T.
Nein. Eine Checkbox kann kein cookie verändern. Wenn dann höchstens wieder nur mit JavaScript. Aber damit habe ich keine Erfahrung und das wäre auch nicht der gängige Weg.
Du hast meines Erachtens zwei Möglichkeiten: Entweder, du baust ein Javascript ein, dass auf die Auswahl der Checkbox reagiert, wie in meiner Antwort beschrieben.
ODER Du sendest jede Anfrage zunächst an eine einzige Ziel URL. Dann kannst du mit php den POST oder GET Request auslesen und je nach Zustand der Checkbox entweder das eine oder das andere tun. Zum Beispiel mittels "include" unterschiedliche php Dateien laden. Oder aber durch das Senden eines Headers den Nutzer auf eine andere Seite weiterleiten.
Ich wünsche gutes Gelingen, kannst gerne weiter nachfragen.
T.
Du kannst die Daten an ein Skript schicken, welches je nach gesetzter Checkbox die Daten anders verarbeitet.
Beispiel:
<form action="handle.php" method="post">
<input name="data">
<input name="other-target" type="checkbox">
<input type="submit">
</form>
handle.php:
<?php
if (isset($_POST['other-target'])) {
include_once 'handleA.php';
}
else {
include_once 'handleB.php';
}
Alternativ könntest du die Daten auch erst in eine Session schreiben, dann weiterleiten und die Daten dann wieder aus der Session auslesen.
handle.php:
<?php
session_start();
$_SESSION['data'] = $_POST['data'];
if (isset($_POST['other-target'])) {
header('Location: handleA.php');
}
else {
header('Location: handleB.php');
}
Auslesen der Daten aus der Session:
<?php
session_start();
$data = $_SESSION['data'];
Du benötigst im PHP-Teil, der das Formular auswertet, einen kleinen if-Teil. Damit überprüfst du, ob Checkbox "isset" oder welche Checkbox gewählt wurde. Das kriegst du problemlos - notfalls mit ChatGPT - hin.
Nun müssen die Daten lediglich an eine der zwei URLs weitergeleitet werden. Dafür würde ich eine weitere PHP-Seite mit einem Formular basteln und ggf. GET als Methode nutzen.
Ok, also ohne Javascript geht das definitiv nicht?
Ich hatte ja bereits etwas mit JS herumprobiert aber hat bisher nicht zum Erfolg geführt. Bin aber in JS auch ein extremer Anfänger...
Was ich an der ganzen Sache nicht verstehe: Rein theoretisch müsste es doch zb. über ein simples Session Cookie bzw. einem Auslesen des Wertes funktionieren (wenn das De - Aktivieren der Checkbox dieses setzen und löschen kann?) Dies müsste auch von dem PHP-Interpret vor dem Absenden des Formulars durchgeführt werden können richtig?