Как ОПУБЛИКОВАТЬ несколько страниц одних и тех же данных

#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) в качестве другого обходного пути.