Variable zwei mal in folge mit header übergeben?
Ich habe eine Variable mit Header mit gegeben, und dann auf der nächsten Seite ganz normal mit GET ausgelesen und neu gespeichert.
Jetzt möchte ich in einem Menü, dass wenn man den Button (
<div class="...">
<input type="submit" class="..." name="a" value="...">
</div>
)
drückt, man zu einer anderen Seite weitergeleitet wird, und dabei eine Variable mitnehmen kann.
if (isset($_POST["a"])) {
header("Location: a.php?variable=".$variable);
}
Dann wollte ich die Variable mit GET wieder aufnehmen. Aber irgendwie wird die Variable nicht mal mitgeschickt. Deshalb findet er sie nicht und kann sie nicht neu aufnehmen.
Ich habe sogar versucht die Variable einfach direkt davor nochmal mit GET aufzunehmen, aber das bringt auch nichts.
Wie könnte man dieses Problem beheben?
4 Antworten
Geh die gesamte Transportkette noch einmal schrittweise durch. In den Webentwicklungstools deines Browsers (Network-Tab) kannst du prüfen, welcher Payload mit deinen Requests übertragen wurde. Insofern kannst du ermitteln, ob es folgend beim Lesen des Werts oder bei der Weitergabe scheitert.
Anhand der von dir geteilten Informationen ist nicht ersichtlich, wo es genau scheitert. Man könnte lediglich vermuten, dass du in Schritt 2 kein Formular nutzt oder in Schritt 3 tatsächlich eine undefinierte Variable einsetzt.
Ein funktionaler Weg würde jedenfalls so aussehen:
Initialer Trigger:
<?php header("Location: page2.php?variable=123");
page2.php:
<!-- ... -->
<form action="page3.php" method="post">
<!-- ... -->
<input type="submit" name="a" value="<?= $_GET['variable'] ?>">
<!-- ... -->
</form>
page3.php:
<?php
if (isset($_POST['a'])) {
header("Location: a.php?variable=" . $_POST['a']);
exit;
}
a.php:
<?php print $_GET['variable'];
Wenn alle drei Seiten über dieselbe Domain laufen und sich der Wert zwischen dem ersten und letzten Schritt nie ändert, wäre es allerdings durchaus eine Überlegung wert, den Wert stattdessen in einer Session abzulegen.
Erste Seite:
<?php
session_start();
$_SESSION['variable'] = 123;
Letzte Seite:
<?php
session_start();
print $_SESSION['variable'];
Auch auf allen dazwischenliegenden Seiten muss am Dateianfang erst die session_start-Funktion aufgerufen werden, um die bestehende Session nicht zu verlieren.
Wäre eine Session nicht das Richtige für diesen Fall?
Ja, jetzt geht es, danke
Ich hab sogar davor schon Session Variablen verwendet, nur daran hab ich irgendwie nicht gedacht...
Hi Frage9547,
ersteimal hast sollte man zwischen den Methoden POST und GET in PHP unterscheiden. Wenn du Daten von einer zur anderen Seite übertragen möchtest, wäre es doch schlau diese in einem Cookie via JavaScript zu speichern. Du kannst auch SESSION in PHP nutzen um Sachen zu speichern und dann via Ajax speichern oder abrufen.
Zu Submit-Button:
Ein Submit-Button ist da um ein Formular zu versenden. Dabei wird die Seite normalerweise neu geladen. Hier empfielt sich aber kein Submit-Button sondern ein Button der einen EventListener in JavaScript triggert, der wiederum Ajax-Request sendet mit den Daten die wiederum gespeichert werden kann in einer SESSION oder direkt ohne SESSION über ein Cookie.
Woher soll der hier denn in $variable einen Wert haben?
if (isset($_POST["a"])) {
header("Location: a.php?variable=".$variable);
}
müsste wohl eher so:
if (isset($_POST["a"])) {
header("Location: a.php?variable=".$_POST["a"]);
}
Und dann frage ich mich, woher der weiss, das es POST ist? Hast du ein Form Tag vor dem Submit Button? Und warum nimmst du da dann nicht einfach Get, dann würde ein Request wie a.php?a=[Bottun value] rauskommen und du sparst den Umweg...
Das sind insgesamt drei Seiten
Seite 1 -> gibt die Variable a bei header mit
Seite 2 -> nimmt die Variable a auf und soll sie beim drücken vom Button weiter reichen mit header
Seite 3 -> sollte eigentlich diese Variable wieder aufnehmen, aber das funktioniert nicht, weil sie nicht mitgeschickt wird
Das heißt, ich brauche die gleiche Variable wie bei Seite 1 auch wieder auf Seite 3