лучший способ передать переменную между двумя страницами php

#javascript #php #jquery

#javascript #php #jquery

Вопрос:

Необходимо передать переменную из index.php в edit.php .

Переменная должна быть невидимой для посетителей, поэтому адресная строка не разрешена.

Первый способ — использование формы на index.php с action атрибутом — edit.php .

Проблема с использованием формы заключается в предупреждении о повторной отправке, которое появляется при каждом edit.php обновлении.

Второй способ — использование вызова ajax на index.js для изменения переменной сеанса на стороне php.

Недостатком использования ajax является дополнительный путь — сначала перейдите к server side (для изменения php), затем к client side (функция успеха для получения нового значения) — и снова на сторону сервера (перейдите к edit.php , используя новую переменную).

Каков правильный способ?

Есть ли такой простой способ:

location.href = 'edit.php', set x = 5

И далее edit.php , чтобы получить это:

echo $x (результат 5);

Комментарии:

1. Третий способ — сессия.

2. location.href = 'edit.php?x=5' ? тогда, конечно, страница должна прочитать текущее свойство «search» текущего URL и обработать x = 5

3. @u_mulder, вы, вероятно, имеете в виду second way из моего поста?

4. @JaromandaX, адресная строка не разрешена, прочитайте сообщение еще раз, пожалуйста

5. Post, Get, Ajax, Session, Cookie — это все, что видно в консоли, поэтому, если вы хотите, чтобы посетители не видели, зашифруйте и отправьте

Ответ №1:

Вы можете создать пользовательский файл cookie в index.js и добавить к document.cookie , и когда будет сделан запрос на edit.php , он будет доступен.

index.js

 const custom_cookie = "x=5";
document.cookie = custom_cookie;
.....
window.location = 'edit.php';
  

edit.php

 $cookie_name = 'x';
echo $_COOKIE[$cookie_name]
  

Комментарии:

1. Но файлы cookie видны пользователям. Это требование от OP (чтобы не было видно).

2. @Andreas У меня такое чувство, что OP означает, что он не отображается в пользовательском интерфейсе (т.Е. адресной строке)

3. Вы не добавляете префикс к существующему значению cookie при установке новых. Это странно. Смотрите developer.mozilla.org/en-US/docs/Web/API/Document /…

4. О, моя ошибка. Ее обновление.

Ответ №2:

Используйте cookie…

index.php:

 setcookie("x", 5);
  

edit.php:

 echo $_COOKIE["x"];
  

Комментарии:

1. OP говорит в другом комментарии… «при запуске я не на стороне сервера, а на стороне клиента» поэтому они не могут использовать PHP setcookie()

Ответ №3:

Если параметр должен оставаться невидимым в пользовательском интерфейсе (т. Е. Не в адресной строке) и вам нужно избегать запросов POST из-за перезагрузки страницы, вы можете добиться этого с помощью двух запросов…

Либо одно сообщение AJAX, либо GET, т.Е.

 fetch('set-session-var.php', {
  method: 'post',
  body: 'x=5',
  headers: {
    "Content-Type": "application/x-www-form-urlencoded"
  }
}).then(res => {
  if (res.ok) {
    window.location = 'edit.php'
  }
})
  

или используйте шаблон Post / Redirect / Get, например

 <form action="set-session-var.php" method="post">
  <!-- set the "x" value however and whenever you want -->
  <button type="submit" name="x" value="5">Go</button>
</form>
  
 // set-session-var.php
session_start();
$_SESSION['x'] = $_POST['x'];
header('Location: edit.php'); // omit this if using the AJAX version
  

Ответ №4:

Другой способ — использовать сеансы PHP.

 //index.php
$_SESSION['varname'] = $var_value;

//edit.php
$var_value = $_SESSION['varname'];
  

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

Комментарии:

1. при запуске я не на стороне сервера, а на стороне клиента

2. Вы сказали, что ваши файлы index.php и edit.php тогда ваш брат на стороне сервера

3. конечно, нет, index.php загруженный на локальном компьютере является клиентской стороной.

4. как вы запускаете index.php файл? есть ли у вас какие-либо Xampp или Wamp ..?

5. @KhalilDaNish OP говорит, что x значение поступает со стороны клиента, поэтому неизвестно, когда PHP выполняет синтаксический анализ index.php . Это известно в браузере только после рендеринга страницы