如何在PHP中通过POST在Web页面之间传递对象?

时间:2016-04-21 20:45:58

标签: php html object webpage

是否可以使用$ _POST通过HTML表单中的隐藏字段传递对象,并在表单链接到的页面上检索该对象?

在第一页上,我有一个类似下面的表格:

<?php
session_start();
require_once '../Model/player.php'; // To Enable Creation of a New Player Object

$playerName = filter_input(INPUT_POST, 'playerName');
$playerNumber = 1;

$player = new player($playerName, $playerNumber);

if (isset($player))
{
  echo '<p>Successfully created your player!</p><br>';
?>

<form class="viewStats" action="../View/displayPlayerStatsView.php" method="post">
  <input type="hidden" name="playerObject" value="<?php echo $player; ?>">
  <input type="submit" value="View Your Player's Stats">
</form>

<?php
  }
?>

在第二个(接收)页面上,我有类似下面代码的代码:

session_start();
require_once '../Model/player.php'; // To Use Player Object

$player = filter_input(INPUT_POST, 'playerObject'); // ERROR: Thinks the Player Object is a string.

我的错误似乎是检索&#39; playerObject&#39;的接收页面。来自$ _POST数组的行为类似于Object是一个字符串。

有人可以给我指导如何使用$ _POST数组将对象从一个页面传递到另一个页面吗?这甚至可能吗? 提前谢谢。

更新 根据序列化对象的建议,我现在遇到以下错误:

如果我将第一个(发送)页面上的代码更改为:

$playerSerial = serialize((object) $player);
<form class="viewStats" action="../View/displayPlayerStatsView.php" method="post">
      <input type="hidden" name="playerObject" value="<?php echo $playerSerial; ?>">
      <input type="submit" value="View Your Player's Stats">
</form>

并将第二个(接收)页面上的代码更改为:

$playerSerial = filter_input(INPUT_POST, 'playerObject');
print_r($playerSerial);
$player = unserialize($playerSerial);

然后我从print_r($playerSerial);获得的输出是O:6:,我知道这是不正确的,因为该对象具有包含玩家名称,数量,健康状况,力量等的属性。

require_once '../Model/player.php';代码存在于两个PHP文件中,并且在执行任何其他代码之前它位于两者的顶部。

2 个答案:

答案 0 :(得分:1)

你必须做一些补充和更正:

<?php 

//... your previous code

$player = serialize($player);
?>

<form class="viewStats" action="../View/displayPlayerStatsView.php" method="post">
  <input type="hidden" name="playerObject" value="<?php echo $player; ?>">
  <input type="submit" value="View Your Player's Stats">
</form>

使用serialize()函数创建一个字符串,该字符串可以传递给您可以反序列化()的其他页面,如下所示:

secondPage.php:

$player = $_POST['playerObject'];
$player = unserialize($player);

另外,你忘了在这里使用echo:

变化

value="<?php $player ?>"

value="<?php echo $player; ?>"

答案 1 :(得分:1)

让自己进入序列化:从对象创建一个字符串的过程,将来可以从字符串反序列化回到对象。

一些可能对您有用的文档:

PHP - How object serialize/unserialize works?

http://php.net/manual/ru/oop4.serialization.php

http://www.phpinternalsbook.com/classes_objects/serialization.html