Action URL in einem PHP-Formular über einen Schalter in Echtzeit dynamisch ändern, wie?

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

Woher ich das weiß:Berufserfahrung – Ich bin gelernter Mediengestalter Digital und Print(IHK)

Rexxxxx 
Fragesteller
 07.06.2024, 00:47

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...

0

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.


Rexxxxx 
Fragesteller
 23.05.2024, 22:01

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?

0
tilfuerst  23.05.2024, 22:41
@Rexxxxx

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.

0

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.