PHP Перехід змінної на наступну сторінку


196

Це здається досить простим, але я не можу знайти хорошого способу зробити це.

Скажіть на першій сторінці я створюю змінну

$myVariable = "Some text";

І дія форми на цій сторінці - "Page2.php". Отже, у Page2.php, як я можу отримати доступ до цієї змінної? Я знаю, що я можу це зробити за допомогою сеансів, але я думаю, що це занадто багато для простого рядка, і мені потрібно лише передати просту рядок (ім'я файлу).

Як я можу цього досягти?

Дякую!


Найкраще і найпростіше передати змінні - це я пояснив це тут: stackoverflow.com/questions/14465464/…
Jaro

Відповіді:


450

HTML / HTTP не має статусу, тобто, те, що ви робили / бачили на попередній сторінці, повністю не пов'язане з поточною сторінкою. За винятком випадків, коли ви використовуєте щось на зразок сесій, файлів cookie або змінних GET / POST. Сесії та файли cookie досить прості у використанні, оскільки сесія набагато безпечніша, ніж файли cookie. Більш безпечний, але не повністю безпечний.

Сесія:

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

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

Не забудьте запустити session_start();оператор на обох цих сторінках перед тим, як спробувати отримати доступ до $_SESSIONмасиву, а також перед тим, як будь-який вихід буде надісланий у браузер.

Cookie:

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

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

Велика різниця між сеансами та файлами cookie полягає в тому, що значення змінної буде зберігатися на сервері, якщо ви використовуєте сеанси, і на клієнті, якщо ви використовуєте файли cookie. Я не можу придумати жодної вагомої причини використовувати файли cookie замість сеансів, за винятком випадків, коли дані зберігаються між сесіями, але навіть тоді, можливо, краще зберегти їх у БД та отримати їх на основі імені користувача або ідентифікатора.

Отримати та відправити

Ви можете додати змінну за посиланням на наступну сторінку:

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

Це створить змінну GET.

Інший спосіб - включити приховане поле у ​​форму, яка подається на другу сторінку:

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

А потім на другій сторінці:

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

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

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

Просто змініть метод для форми, postякщо ви хочете зробити це через пошту. Обидва однаково незахищені, хоча зламати GET легше.

Той факт, що кожен новий запит, за винятком даних сеансу, абсолютно новий екземпляр сценарію зловив мене, коли я вперше розпочав кодування в PHP. Як тільки ти звикнеш до цього, все-таки досить просто.


2
Завдяки цьому допомогло. Проблема полягала в тому, що я мав купу змінних на першій сторінці, тому я зробив створення масиву з усіма цими змінними та надіслати його на наступну сторінку за допомогою сеансів.
Карло

Schweet :) Радий, що можу допомогти.
Jrgns

4
Nitpick: сеанси в PHP зазвичай також обробляються файлами cookie. Сесійне cookie не є стійким файлом cookie і зазвичай просто містить ідентифікатор сеансу. Але це все-таки печиво.
Гідний Даблер

Щоб детальніше розглянути свій власний коментар. Причина в тому, що, як ви сказали, HTTP без громадянства. Для цього PHP все ще потребує способу ідентифікації сеансу. Це робиться шляхом зберігання файлу cookie на клієнті з ідентифікатором сеансу. Якщо файли cookie відключені клієнтами, PHP іноді використовує $ _GET vars, щоб додати ідентифікатор сеансу до посилань між сторінками. Але це, як правило, вважається небезпечним, і він, як правило, відключений у більшості веб-серверів (php.ini).
Гідний даблер

@fireeyedboy PHP-сеанси можна також розповсюджувати за допомогою змінних GET та POST. Наприкінці дня сеанс спрощує передачу змінних з однієї сторінки на іншу, маючи лише один фрагмент даних для передачі: ідентифікатор сеансу. Цей ідентифікатор сеансу використовується для отримання раніше збережених даних.
Jrgns

30

Дякуємо за відповіді вище. Ось як я це зробив, сподіваюся, що це допоможе тим, хто слідує. Я хочу передати реєстраційний номер з однієї сторінки на іншу, звідси regName та regValue :

Створіть свою першу сторінку, назвіть її 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>

Створіть свою другу сторінку, назвіть її 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>

Хоча це не так всебічно, як відповідь вище, для моїх цілей це просто ілюструє взаємозв'язок між різними елементами.


13
Ваш приклад також працює без сеансів і насправді не отримує дані через механізм сеансів (в get_reg.php). Ви надсилаєте regName через форму з методом get, як пояснив Jrgns. Таким чином, змінна доступна на сторінці get_reg.php через масив $ _GET.
метатрон

16

Передача даних у запиті

Ви можете або вставити його як приховане поле у ​​свою форму, або додати до нього URL-адресу дії вашої форми

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

або

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

Зверніть увагу, це також ілюструє використання htmlentity та urlencode при передачі даних навколо.

Передача даних у сеанс

Якщо дані не потрібно передавати клієнтові, то сеанси можуть бути більш доречними. Просто зателефонуйте session_start () на початку кожної сторінки, і ви зможете отримати та встановити дані в масив $ _SESSION.

Безпека

Оскільки ви заявляєте, що ваше значення є насправді іменем файлу, вам потрібно знати про наслідки безпеки. Якщо ім'я файлу надійшло від клієнтської сторони, припустимо, що користувач підробив це значення. Перевірте це на дійсність! Що відбувається, коли користувач проходить шлях до важливого системного файлу або до файлу, який знаходиться під його контролем? Чи може ваш скрипт використовуватись для "зондування" сервера для файлів, які є чи не існують?

Оскільки ви, очевидно, тільки починаєте тут, варто нагадати, що це стосується будь-яких даних, які надходять у $ _GET, $ _POST або $ _COOKIE - припустимо, що ваш найгірший ворог створив вміст цих масивів і відповідно кодує!


9

Існує три методи передачі значення у php.

  • Поштою
  • За дістати
  • Зробивши сеанс змінним

Ці три методи використовуються з різною метою. Наприклад, якщо ми хочемо отримати наше значення на наступній сторінці, тоді ми можемо використовувати метод "post" ($ _POST) як: -

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

Якщо нам потрібне значення змінної на більш ніж одній сторінці, ми можемо використовувати змінну сесії як: -

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

Перш ніж використовувати цей синтаксис для створення змінної SESSION, спочатку ми повинні додати цей тег на самому початку нашої сторінки php

session_start(); 

Метод GET зазвичай використовується для друку даних на тій самій сторінці, яка використовується для отримання даних від користувача. Його синтаксис такий:

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

Метод POST, як правило, споживає більш безпечно, ніж GET, оскільки коли ми використовуємо метод Get, ніж він може відображати дані в рядку URL-адреси. Якщо дані є більш чутливими даними, такими як пароль, то вони можуть бути ангелами.


7

Сеанси - це єдиний хороший спосіб, ви також можете використовувати GET / POST, але це може бути небезпечно.


6

спробуйте цей код

використовуючи приховане поле, ми можемо передати php varibale на іншу сторінку

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>

передати змінну php до значення прихованого поля, щоб ви могли отримати доступ до цієї змінної на іншу сторінку

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

сторінка 2

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

1

Сеанси - це єдиний хороший спосіб, ви також можете використовувати GET / POST, але це може бути небезпечно.

Передача даних у сеанс Якщо дані не потрібно передавати клієнтові, то сеанси можуть бути більш доречними. Просто зателефонуйте session_start () на початку кожної сторінки, і ви зможете отримати та встановити дані в масив $ _SESSION.

Безпека Оскільки ви заявляєте, що ваше значення є насправді іменем файлу, вам потрібно знати про наслідки безпеки. Якщо ім'я файлу надійшло від клієнтської сторони, припустимо, що користувач підробив це значення. Перевірте це на дійсність! Що відбувається, коли користувач проходить шлях до важливого системного файлу або файлу, який знаходиться під його контролем? Чи може ваш скрипт використовуватись для "зондування" сервера для файлів, які є чи не існують?

Оскільки ви, очевидно, тільки починаєте тут, варто нагадати, що це стосується будь-яких даних, які надходять у $ _GET, $ _POST або $ _COOKIE - припустимо, що ваш найгірший ворог розробив вміст цих масивів і відповідно кодуйте!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.