Zmienna PHP Pass na następną stronę

196

Wydaje się to dość proste, ale nie mogę znaleźć dobrego sposobu na zrobienie tego.

Powiedz na pierwszej stronie, że tworzę zmienną

$myVariable = "Some text";

A akcja formularza dla tej strony to „Page2.php”. Więc w Page2.php, jak mogę uzyskać dostęp do tej zmiennej? Wiem, że mogę to zrobić za pomocą sesji, ale myślę, że to za dużo jak na zwykły ciąg i muszę jedynie przekazać prosty ciąg (nazwę pliku).

Jak mogę to osiągnąć?

Dzięki!

Carlo
źródło
Najlepszą i najłatwiejszą rzeczą do przekazania zmiennych jest sposób, w jaki to tutaj wyjaśniłem: stackoverflow.com/questions/14465464/…
Jaro

Odpowiedzi:

450

HTML / HTTP jest bezstanowy, innymi słowy to, co zrobiłeś / widziałeś na poprzedniej stronie, jest całkowicie niezwiązane z bieżącą stroną. Z wyjątkiem sytuacji, gdy używasz czegoś takiego jak sesje, pliki cookie lub zmienne GET / POST. Sesje i pliki cookie są dość łatwe w użyciu, a sesja jest zdecydowanie bezpieczniejsza niż pliki cookie. Bardziej bezpieczne, ale nie do końca bezpieczne.

Sesja:

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

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

Pamiętaj, aby uruchomić session_start();instrukcję na obu tych stronach przed próbą uzyskania dostępu do $_SESSIONtablicy, a także przed wysłaniem danych wyjściowych do przeglądarki.

Ciastko:

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

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

Duża różnica między sesjami a plikami cookie polega na tym, że wartość zmiennej będzie przechowywana na serwerze, jeśli korzystasz z sesji, a na kliencie, jeśli używasz plików cookie. Nie mogę wymyślić żadnego dobrego powodu, aby używać plików cookie zamiast sesji, z wyjątkiem sytuacji, gdy chcesz zachować dane między sesjami, ale nawet wtedy lepiej być może przechowywać je w bazie danych i pobierać na podstawie nazwy użytkownika lub identyfikatora.

POBIERZ i POST

Możesz dodać zmienną w linku do następnej strony:

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

Spowoduje to utworzenie zmiennej GET.

Innym sposobem jest dołączenie ukrytego pola do formularza, który przesyła się na stronę drugą:

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

A następnie na stronie drugiej:

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

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

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

Po prostu zmień metodę formularza na, postjeśli chcesz to zrobić pocztą. Oba są równie niepewne, chociaż łatwiej jest włamać się do GET.

Fakt, że każde nowe żądanie, z wyjątkiem danych sesji, jest zupełnie nową instancją skryptu, przyłapał mnie, gdy zaczynałem kodować w PHP. Kiedy już się przyzwyczaisz, jest to dość proste.

Jrgns
źródło
2
Dzięki temu pomogłem, problem polegał na tym, że miałem kilka zmiennych na pierwszej stronie, więc stworzyłem tablicę ze wszystkimi tymi zmiennymi i wysłałem ją na następną stronę za pomocą sesji.
Carlo
Schweet :) Cieszę się, że mogłem pomóc.
Jrgns,
4
Nitpick: sesje w PHP są zazwyczaj obsługiwane również przez pliki cookie. Sesyjny plik cookie nie jest trwałym plikiem cookie i zwykle po prostu przechowuje tylko identyfikator sesji. Ale to nadal ciasteczko.
Przyzwoity Dabbler
Aby rozwinąć własny komentarz. Powodem jest to, że, jak powiedziałeś, HTTP jest bezstanowy. Dlatego PHP nadal potrzebuje sposobu na identyfikację sesji. Odbywa się to poprzez przechowywanie pliku cookie na kliencie z identyfikatorem sesji. Jeśli pliki cookie są wyłączone po stronie klienta, PHP czasami używa zmiennej $ _GET, aby dołączyć identyfikator sesji do łączy między stronami. Ale jest to ogólnie uważane za niebezpieczne i dlatego jest ogólnie wyłączone dla większości serwerów (php.ini).
Przyzwoity Dabbler
Sesje PHP @fireeyedboy można propagować również przy użyciu zmiennych GET i POST. Pod koniec dnia sesja upraszcza przekazywanie zmiennych z jednej strony na drugą, mając do przesłania tylko jedną część danych: identyfikator sesji. Ten identyfikator sesji jest następnie wykorzystywany do odzyskania wcześniej zapisanych danych.
Jrgns,
30

Dzięki za odpowiedzi powyżej. Oto jak to zrobiłem, mam nadzieję, że pomoże tym, którzy podążają. Chcę przekazać numer rejestracyjny z jednej strony na drugą, stąd regName i regValue :

Utwórz pierwszą stronę, nazwij ją 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>

Utwórz drugą stronę, nazwij ją 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>

Chociaż nie jest tak wyczerpująca jak powyższa odpowiedź, dla moich celów ilustruje to w prosty sposób związek między poszczególnymi elementami.

Szczery
źródło
13
Twój przykład działa również bez sesji i w rzeczywistości nie pobiera danych przez mechanizm session (w get_reg.php). Wysyłasz regName za pomocą formularza z metodą get-wyjaśnioną przez Jrgns. Zmienna jest więc dostępna na stronie get_reg.php poprzez tablicę $ _GET.
metatron
16

Przekazywanie danych we wniosku

Możesz albo osadzić go jako ukryte pole w formularzu, albo dodać adres URL akcji formularza

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

lub

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

Zauważ, że ilustruje to również użycie htmlentities i urlencode podczas przekazywania danych.

Przekazywanie danych w sesji

Jeśli dane nie muszą być przekazywane po stronie klienta, sesje mogą być bardziej odpowiednie. Wystarczy wywołać session_start () na początku każdej strony, aby uzyskać i ustawić dane w tablicy $ _SESSION.

Bezpieczeństwo

Ponieważ twierdzisz, że twoja wartość jest w rzeczywistości nazwą pliku, musisz zdawać sobie sprawę z konsekwencji bezpieczeństwa. Jeśli nazwa pliku dotarła ze strony klienta, załóżmy, że użytkownik sfałszował wartość. Sprawdź, czy jest ważna! Co się stanie, gdy użytkownik przekaże ścieżkę do ważnego pliku systemowego lub pliku pod ich kontrolą? Czy można użyć skryptu do „sondowania” serwera w poszukiwaniu plików, które nie istnieją lub istnieją?

Ponieważ wyraźnie dopiero zaczynasz, warto przypomnieć, że dotyczy to wszystkich danych, które docierają do $ _GET, $ _POST lub $ _COOKIE - zakładając, że twój najgorszy wróg spreparował zawartość tych tablic i odpowiednio kod!

Paul Dixon
źródło
9

Istnieją trzy metody przekazywania wartości w php.

  • Pocztą
  • Dostać
  • Dokonując zmiennej sesji

Te trzy metody są używane do różnych celów. Na przykład, jeśli chcemy otrzymać naszą wartość na następnej stronie, możemy użyć metody „post” ($ _POST) jako: -

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

Jeśli wymagamy wartości zmiennej na więcej niż jednej stronie, możemy użyć zmiennej sesji jako:

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

Przed użyciem tej składni do tworzenia zmiennej SESSION musimy najpierw dodać ten tag na samym początku naszej strony php

session_start(); 

Metoda GET jest zwykle używana do drukowania danych na tej samej stronie, na której użytkownik pobierał dane od użytkownika. Jego składnia jest następująca:

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

Metoda POST jest na ogół bardziej bezpieczna niż GET, ponieważ gdy używamy metody Get, może ona wyświetlać dane w pasku adresu URL. Jeśli dane są bardziej wrażliwe, takie jak hasło, może to być inggeris.

Ravi Sharma
źródło
7

Sesje byłyby jedynym dobrym sposobem, możesz także użyć GET / POST, ale byłoby to potencjalnie niepewne.

Alo
źródło
6

wypróbuj ten kod

za pomocą ukrytego pola możemy przenieść php varibale na inną stronę

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>

przekazać zmienną php do wartości ukrytego pola, aby uzyskać dostęp do tej zmiennej na innej stronie

page2.php

<?php
 $text=$_POST['text'];
 echo $text;
?>
Bhargav Chudasama
źródło
1
**page 1**
<form action="exapmple.php?variable_name=$value" method="POST"> 
    <button>
        <input  type="hidden" name="x">
    </button>
</form>`

Strona 2

if(isset($_POST['x'])) {
    $new_value=$_GET['variable_name'];
}
V Kash Singh
źródło
1

Sesje byłyby jedynym dobrym sposobem, możesz także użyć GET / POST, ale byłoby to potencjalnie niepewne.

Przekazywanie danych w sesji Jeśli dane nie muszą być przekazywane po stronie klienta, sesje mogą być bardziej odpowiednie. Wystarczy wywołać session_start () na początku każdej strony, aby uzyskać i ustawić dane w tablicy $ _SESSION.

Bezpieczeństwo Ponieważ twierdzisz, że twoja wartość jest w rzeczywistości nazwą pliku, musisz zdawać sobie sprawę z konsekwencji bezpieczeństwa. Jeśli nazwa pliku dotarła ze strony klienta, załóż, że użytkownik sfałszował wartość. Sprawdź, czy jest ważna! Co się stanie, gdy użytkownik przekaże ścieżkę do ważnego pliku systemowego lub pliku pod ich kontrolą? Czy można użyć skryptu do „sondowania” serwera w poszukiwaniu plików, które nie istnieją lub istnieją?

Ponieważ najwyraźniej dopiero zaczynasz, warto przypomnieć, że dotyczy to wszystkich danych, które docierają do $ _GET, $ _POST lub $ _COOKIE - zakładając, że twój najgorszy wróg spreparował zawartość tych tablic i odpowiednio kod!

Kaushik Kothiya
źródło