【问题标题】:How do I pass an object into a hidden form in php?如何将对象传递到 php 中的隐藏表单中?
【发布时间】:2014-12-31 21:04:59
【问题描述】:

我有一个名为 $todovalues 的对象和一个表单。我需要通过表单传递整个 todovalues 对象。

我的表单看起来像 -

<form action="" method="post">
<input class="todobuttons" type="submit" name="delete" value="delete">
<input class="todobuttons" type="submit" name="edit" value="edit">
<input type="hidden" name="post_item_info"
value="<?php echo serialize($todovalues); ?>">
</form>

我可以使用 echo $todovalues->text 之类的方式访问 $todovalues 中的值。

我尝试过使用序列化、json_encode 以及两者的混合。但是,当我尝试访问 post 值时,它始终为空。

有没有办法获取我的对象并将其添加到隐藏输入中,而无需为我想要的每个对象创建单独的隐藏输入?

json_encode($todovalues);
json_encode(serialize($todovalues));
serialize($todovalues);

以上都没有功能。是否没有简化的方法来传递整个对象而不先遍历对象?必须为对象中的每个项目创建隐藏输入似乎是浪费空间。

编辑 -

当我使用 json_encode() 时,我看到以下内容,所以我知道它应该存在 -

<input type="hidden" name="post_item_info" value="{" id_auto":"3","id":"1","id_list":"1","completed":"0","incident_notes":"apple"}"="">

【问题讨论】:

  • 我会使用json_encode()。当您查看页面的来源时,该值是否已填充?如果没有,还有另一个问题。
  • 您可能应该在您的对象中创建一个方法以将所有相关值作为数组返回,然后您可以使用 json_encode 进行处理。向我们展示类的结构也会有所帮助。请记住,静态成员不会序列化。
  • @JayBlanchard 更新了 json_encode 的内容
  • JSON 看起来有点不完整,但是当你发送它时它应该在$_POST 数组中。对$_POST 数组执行print_var_dump
  • @JayBlanchard 值内有双引号。所以它正在做的是在 { 之后立即关闭值。我想我需要转义双引号。

标签: php json object serialization


【解决方案1】:

可能,您尝试对对象进行编码。尝试编码一个数组:

json_encode((array) $todovalues);

UPD。 或者,它可能是因为您的 html 看起来像这样:

<input value="{"id":3....}"> (a lot of ")

你可以试试base64_encode()

【讨论】:

  • 刚刚看到。我改用单引号,但 base64 可能是一个更好的主意。
  • 我添加了 base64_encode,现在效果很好。非常感谢。
【解决方案2】:

由于我使用双引号创建输入,json_encode 被破坏。

系统锯-

value="{" stuffGoesHere "

我切换到单引号 -

value=' {"stuffGoesHere" '

现在完美运行。

【讨论】:

    猜你喜欢
    • 2021-05-30
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多