PHP Variable an nächste Seite übergeben


196

Es scheint ziemlich einfach zu sein, aber ich kann keinen guten Weg finden, es zu tun.

Angenommen, ich erstelle auf der ersten Seite eine Variable

$myVariable = "Some text";

Die Aktion des Formulars für diese Seite lautet "Page2.php". Wie kann ich in Page2.php auf diese Variable zugreifen? Ich weiß, dass ich es mit Sitzungen machen kann, aber ich denke, es ist zu viel für eine einfache Zeichenfolge, und ich muss nur eine einfache Zeichenfolge (einen Dateinamen) übergeben.

Wie kann ich das erreichen?

Vielen Dank!


Das Beste und Einfachste, um Variablen zu übergeben, ist, wie ich es hier erklärt habe: stackoverflow.com/questions/14465464/…
Jaro

Antworten:


450

HTML / HTTP ist zustandslos, dh was Sie auf der vorherigen Seite getan / gesehen haben, ist vollständig nicht mit der aktuellen Seite verbunden. Außer wenn Sie so etwas wie Sitzungen, Cookies oder GET / POST-Variablen verwenden. Sitzungen und Cookies sind recht einfach zu verwenden, wobei Sitzungen weitaus sicherer sind als Cookies. Sicherer, aber nicht vollständig sicher.

Session:

//On page 1
$_SESSION['varname'] = $var_value;

//On page 2
$var_value = $_SESSION['varname'];

Denken Sie daran, die session_start();Anweisung auf beiden Seiten auszuführen, bevor Sie versuchen, auf das $_SESSIONArray zuzugreifen , und bevor eine Ausgabe an den Browser gesendet wird.

Plätzchen:

//One page 1
$_COOKIE['varname'] = $var_value;

//On page 2
$var_value = $_COOKIE['varname'];

Der große Unterschied zwischen Sitzungen und Cookies besteht darin, dass der Wert der Variablen auf dem Server gespeichert wird, wenn Sie Sitzungen verwenden, und auf dem Client, wenn Sie Cookies verwenden. Ich kann mir keinen guten Grund vorstellen, Cookies anstelle von Sitzungen zu verwenden, es sei denn, Sie möchten, dass Daten zwischen Sitzungen bestehen bleiben, aber selbst dann ist es vielleicht besser, sie in einer Datenbank zu speichern und sie basierend auf einem Benutzernamen oder einer ID abzurufen.

GET und POST

Sie können die Variable im Link zur nächsten Seite hinzufügen:

<a href="page2.php?varname=<?php echo $var_value ?>">Page2</a>

Dadurch wird eine GET-Variable erstellt.

Eine andere Möglichkeit besteht darin, ein verstecktes Feld in ein Formular aufzunehmen, das an Seite zwei gesendet wird:

<form method="get" action="page2.php">
    <input type="hidden" name="varname" value="var_value">
    <input type="submit">
</form>

Und dann auf Seite zwei:

//Using GET
$var_value = $_GET['varname'];

//Using POST
$var_value = $_POST['varname'];

//Using GET, POST or COOKIE.
$var_value = $_REQUEST['varname'];

Ändern postSie einfach die Methode für das Formular in, wenn Sie dies per Post tun möchten. Beide sind gleichermaßen unsicher, obwohl GET leichter zu hacken ist.

Die Tatsache, dass jede neue Anforderung, mit Ausnahme der Sitzungsdaten, eine völlig neue Instanz des Skripts ist, hat mich beim ersten Codieren in PHP überrascht. Sobald Sie sich daran gewöhnt haben, ist es jedoch recht einfach.


2
Dank dieser Hilfe bestand das Problem darin, dass ich auf der ersten Seite eine Reihe von Variablen hatte. Ich habe also ein Array mit all diesen Variablen erstellt und es mithilfe von Sitzungen an die nächste Seite gesendet.
Carlo

Schweet :) Ich bin froh, dass ich helfen konnte.
Jrgns

4
Nitpick: Sitzungen in PHP werden im Allgemeinen auch von Cookies behandelt. Das Sitzungscookie ist kein dauerhaftes Cookie und enthält normalerweise nur die Sitzungs-ID. Aber es ist immer noch ein Keks.
Anständiger Dabbler

Um auf meinen eigenen Kommentar einzugehen. Der Grund dafür ist, dass HTTP, wie Sie sagten, zustandslos ist. Daher benötigt PHP noch eine Möglichkeit, die Sitzung zu identifizieren. Dazu wird auf dem Client ein Cookie mit einer Sitzungs-ID gespeichert. Wenn Cookies clientseitig deaktiviert sind, verwendet PHP manchmal $ _GET-Variablen, um die Sitzungs-ID an Links zwischen Seiten anzuhängen. Dies wird jedoch im Allgemeinen als unsicher angesehen und ist daher für die meisten Webserver (php.ini) im Allgemeinen deaktiviert.
Anständiger Dabbler

@fireeyedboy PHP-Sitzungen können auch mit GET- und POST-Variablen weitergegeben werden. Am Ende des Tages vereinfacht die Sitzung die Übergabe von Variablen von einer Seite zur nächsten, indem nur ein Datenelement übertragen werden muss: die Sitzungs-ID. Diese Sitzungs-ID wird dann verwendet, um die zuvor gespeicherten Daten abzurufen.
Jrgns

30

Danke für die Antworten oben. So habe ich es gemacht, ich hoffe es hilft denen, die folgen. Ich möchte eine Registrierungsnummer von einer Seite zur anderen weitergeben, daher regName und regValue :

Erstellen Sie Ihre erste Seite, nennen Sie sie set_reg.php :

<?php

session_start();

$_SESSION['regName'] = $regValue;

?>

<form method="get" action="get_reg.php">
    <input type="text" name="regName" value="">
    <input type="submit">
</form>

Erstellen Sie Ihre zweite Seite, nennen Sie sie get_reg.php :

<?php

session_start();

$regValue = $_GET['regName'];

echo "Your registration is: ".$regValue.".";

?>

<p><a href="set_reg.php">Back to set_reg.php</a>

Obwohl nicht so umfassend wie die obige Antwort, veranschaulicht dies für meine Zwecke auf einfache Weise die Beziehung zwischen den verschiedenen Elementen.


13
Ihr Beispiel funktioniert auch ohne Sitzungen und ruft die Daten tatsächlich nicht über den Sitzungsmechanismus (in get_reg.php) ab. Sie senden regName über ein Formular mit der von Jrgns erläuterten get-Methode. Auf die Variable kann daher auf der Seite get_reg.php über das Array $ _GET zugegriffen werden.
Metatron

16

Daten in der Anfrage übergeben

Sie können es entweder als verstecktes Feld in Ihr Formular einbetten oder Ihre Formularaktions-URL hinzufügen

 echo '<input type="hidden" name="myVariable" value="'.
     htmlentities($myVariable).'">';

oder

echo '<form method="POST" action="Page2.php?myVariable='.
    urlencode($myVariable).'">";

Beachten Sie, dass dies auch die Verwendung von HTML-Eigenschaften und Urlencode beim Weitergeben von Daten veranschaulicht .

Daten in der Sitzung übergeben

Wenn die Daten nicht an die Clientseite übergeben werden müssen, sind Sitzungen möglicherweise besser geeignet. Rufen Sie einfach session_start () am Anfang jeder Seite auf, und Sie können Daten in das Array $ _SESSION abrufen und festlegen.

Sicherheit

Da Sie angeben, dass Ihr Wert tatsächlich ein Dateiname ist, müssen Sie sich der Sicherheitsauswirkungen bewusst sein. Wenn der Dateiname von der Clientseite eingetroffen ist, wird davon ausgegangen, dass der Benutzer den Wert manipuliert hat. Überprüfen Sie die Gültigkeit! Was passiert, wenn der Benutzer den Pfad zu einer wichtigen Systemdatei oder einer von ihm kontrollierten Datei übergibt? Kann Ihr Skript verwendet werden, um den Server nach Dateien zu durchsuchen, die vorhanden sind oder nicht?

Da Sie gerade erst hier anfangen, sollten Sie daran erinnern, dass dies für alle Daten gilt, die in $ _GET, $ _POST oder $ _COOKIE eingehen. Nehmen Sie an, Ihr schlimmster Feind hat den Inhalt dieser Arrays erstellt und den Code entsprechend erstellt.


9

Es gibt drei Methoden, um Werte in PHP zu übergeben.

  • Per Post
  • Durch bekommen
  • Indem Sie die Sitzung variabel machen

Diese drei Methoden werden für unterschiedliche Zwecke verwendet. Wenn wir beispielsweise unseren Wert auf der nächsten Seite erhalten möchten, können wir die Methode 'post' ($ _POST) wie folgt verwenden: -

$a=$_POST['field-name'];

Wenn wir den Wert der Variablen auf mehr als einer Seite benötigen, können wir die Sitzungsvariable wie folgt verwenden:

$a=$_SESSION['field-name];

Bevor wir diese Syntax zum Erstellen der SESSION-Variablen verwenden, müssen wir dieses Tag ganz am Anfang unserer PHP-Seite hinzufügen

session_start(); 

Die GET-Methode wird im Allgemeinen verwendet, um Daten auf derselben Seite zu drucken, auf der Eingaben vom Benutzer vorgenommen wurden. Die Syntax lautet wie folgt:

$a=$_GET['field-name'];

POST-Methoden sind im Allgemeinen sicherer als GET, da bei Verwendung der Get-Methode die Daten in der URL-Leiste angezeigt werden können. Wenn es sich bei den Daten um vertraulichere Daten wie Kennwörter handelt, kann es sich um Inggeris handeln.


7

Sitzungen wären der einzig gute Weg, Sie könnten auch GET / POST verwenden, aber das wäre möglicherweise unsicher.


6

Versuchen Sie diesen Code

Mit versteckten Feldern können wir PHP Varibale an eine andere Seite übergeben

page1.php

<?php $myVariable = "Some text";?>
<form method="post" action="page2.php">
 <input type="hidden" name="text" value="<?php echo $myVariable; ?>">
 <button type="submit">Submit</button>
</form>

Übergeben Sie die PHP-Variable an den Wert des versteckten Felds, damit Sie auf diese Variable auf einer anderen Seite zugreifen können

page2.php

<?php
 $text=$_POST['text'];
 echo $text;
?>

1
**page 1**
<form action="exapmple.php?variable_name=$value" method="POST"> 
    <button>
        <input  type="hidden" name="x">
    </button>
</form>`

Seite 2

if(isset($_POST['x'])) {
    $new_value=$_GET['variable_name'];
}

1

Sitzungen wären der einzig gute Weg, Sie könnten auch GET / POST verwenden, aber das wäre möglicherweise unsicher.

Übergeben von Daten in der Sitzung Wenn die Daten nicht an den Client übergeben werden müssen, sind Sitzungen möglicherweise besser geeignet. Rufen Sie einfach session_start () am Anfang jeder Seite auf, und Sie können Daten in das Array $ _SESSION abrufen und festlegen.

Sicherheit Da Sie angeben, dass Ihr Wert tatsächlich ein Dateiname ist, müssen Sie die Sicherheitsauswirkungen kennen. Wenn der Dateiname von der Clientseite eingetroffen ist, wird davon ausgegangen, dass der Benutzer den Wert manipuliert hat. Überprüfen Sie die Gültigkeit! Was passiert, wenn der Benutzer den Pfad zu einer wichtigen Systemdatei oder einer von ihm kontrollierten Datei übergibt? Kann Ihr Skript verwendet werden, um den Server nach Dateien zu durchsuchen, die vorhanden sind oder nicht?

Da Sie hier gerade erst anfangen, sollten Sie daran erinnern, dass dies für alle Daten gilt, die in $ _GET, $ _POST oder $ _COOKIE eingehen. Nehmen Sie an, Ihr schlimmster Feind hat den Inhalt dieser Arrays erstellt und den Code entsprechend erstellt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.