#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 = 53. @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
. Это известно в браузере только после рендеринга страницы