#javascript #php #html
#javascript #php #HTML
Вопрос:
первая страница была registration.php
на pay.php
<form action="success.php" method="post">
<input type="hidden" value=<?php echo json_encode($_POST); ?> custom="Hidden Element" name="customer">
</form>
на success.php
Я не получаю никаких значений
<?php
$_POST['customer'] = json_decode($_POST['customer'],true);
echo $_POST['customer']['name']; //prints nothing
?>
Комментарии:
1. Как правило, переназначать не очень хорошая идея
$_POST
.2. Взгляните на сгенерированный HTML. Скорее всего, это недопустимый HTML. Вам также нужно будет использовать htmlspecialchars для экранирования любых символов в вашем JSON, которые портят ваш html
3. Да, но у меня есть большие данные регистрационной формы. итак, повторное использование $_POST
4. @Progrock пустые данные
5. Исправлена синтаксическая ошибка с моим предыдущим фрагментом: каков результат сброса декодирования? $data = json_decode($_POST[‘customer’], true); var_dump($data);
Ответ №1:
Вместо того, чтобы передавать ваши данные обратно во внешний интерфейс, создайте сеанс на сервере, в котором ваши данные временно хранятся на всех страницах.
При запуске сеанса вы можете получить доступ и задать свои значения, используя $_SESSION
глобальную переменную. Эта переменная доступна во всех ваших файлах после запуска сеанса и будет удерживать ваши значения до окончания сеанса.
// Check if there is an active session.
// Otherwise start it.
if ( ! session_id() ) {
session_start();
}
// Receive and store.
$customer = $_POST[ 'customer' ]
$_SESSION[ 'customer' ] = $customer;
// Just to show what is in the session.
echo json_decode( $_SESSION[ 'customer' ] );
И если вы закончили и хотите завершить сеанс на последней странице, используйте session_destroy()
для удаления всего сеанса. Другой вариант — просто разрешить тайм-аут сеанса и удалить себя.
Ответ №2:
<?php
$data = ["name"=>"Thomas O'Leary"];
$encoded = json_encode($data);
//$encoded = bin2hex($encoded);
var_dump($_POST);
if(isset($_POST['data'])) {
$data = $_POST['data'];
//$data = hex2bin($data);
$data = json_decode($data, true);
var_dump($data);
}
?>
<form method='post'>
<input type='hidden' name='data' value='<?= $encoded ?>'>
<input type='submit'>
</form>
После отправки формы вы получите следующий вывод:
array(1) { ["data"]=> string(17) "{"name":"Thomas O" } NULL
Указывает на потерю данных и недопустимый json.
Это из-за кавычек в значении скрытого поля:
<input type='hidden' name='data' value='{"name":"Thomas O'Leary"}'>
Если вы используете двойные кавычки для атрибута, вы также можете столкнуться с проблемами.
Итак, кавычки нуждаются в каком-то экранировании / кодировании.
Если вы раскомментируете строки bin2hex
и hex2bin
выше, вы получите вывод:
array(1) { ["data"]=> string(50) "7b226e616d65223a2254686f6d6173204f274c65617279227d" } array(1) { ["name"]=> string(14) "Thomas O'Leary" }
Некоторые используют htmlentities($data, ENT_QUOTES);
or base64_encode($data)
в качестве другого обходного пути.