【问题标题】:Proper way to pass an array through post?通过帖子传递数组的正确方法?
【发布时间】:2012-10-01 19:07:46
【问题描述】:

我有两页:

  • Graph.php
  • List.php

图表页面完全按照它的名字命名,图表数据。如果没有发布/获取数据,它会显示给定表中的所有数据。

列表页面是一个巨大的表格,其中加载了大约 500-600 行数据。在表格中,您可以使用 JavaScript 对行进行排序和过滤。该表大约有 14 列宽。

在列表页面中对行进行排序后,您可以按“图表”按钮,该按钮将获取可见行并在图表页面上绘制它们。

我遇到的麻烦是将这些 ID 传递到图形页面。我开始了:

<?php
if(isset($_POST['data']))
{
    echo "FOUND SERIALIZED ARRAY<br>";
    $afterSerializeArray = unserialize($_POST['data']);
    print_r($afterSerializeArray);
}
    $beforeSerializeArray = array();
    $beforeSerializeArray[] = 1;
    $beforeSerializeArray[] = 2;
    $beforeSerializeArray[] = 3;
    $serializeArray = serialize($beforeSerializeArray);
?>
<form action="" method="post">
<input type="hidden" name="data" value="<?php echo $serializeArray; ?>"/>
<input type="submit" value="Serialize"/>
</form>

我编写了小 sn-p 来获取可见行的 ID 并将它们加载到数组中,将其序列化并将其泵入变量以将其发布到图表中。

我应该使用 GET 吗?我应该以不同的方式来做这件事吗?

我希望在与图表不同的页面上进行过滤和排序的原因是因为用户有很多列和选项来过滤和排序。

【问题讨论】:

  • 不要使用 GET。大多数浏览器通常将其限制为最大长度,如果您的序列化数据被浏览器(和/或网络服务器)静默截断,您将一无所获。使用邮政。它(基本上)长度不受限制。
  • 我不会发布从第一页到第二页的所有数据,我会发布一些方法来识别数据并在第 2 页重新选择以进行显示。
  • 就像@MarcB 所说,不要使用GET。您可以制作 ajax 图表,在您的任何操作时刷新。
  • @glavić Ajax 图形是否仍然需要向其传递数据 - 所以使用带有长序列化数组的 post 是安全的吗?
  • 它是安全的,为什么不呢?我会像@Dagon 告诉你的那样做。

标签: php arrays post serialization


【解决方案1】:

您应该将这些 id 与任何特殊字符(例如“,”)连接起来,而不是尝试通过 post 发送数组。这样,您将在 $_POST['data'] 中以逗号分隔值的形式获取所有 ID。现在你可以使用 PHP 的explode 函数来获取数组中的所有值,并根据需要使用它们。

此代码示例可能会对您有所帮助

<?php
if(isset($_POST['data']))
{
    echo "FOUND Ids<br>";
    $IdArray = explode(',',$_POST['data']);
    print_r($IdArray );
}
    $idarray = array('1','2','3');
    $ids = implode(',',$idarray);
    ?>
<form action="" method="post">
<input type="hidden" name="data" value="<?php echo $ids;?>"/>
<input type="submit" value="Serialize"/>
</form>

【讨论】:

  • 你能把你的答案扩大一点吗?为什么以字符串而不是数组的形式发送数据更好?仅仅是因为它让访问变得更容易了吗?
猜你喜欢
  • 2014-10-02
  • 2012-11-12
  • 1970-01-01
  • 2011-05-14
  • 2022-12-30
  • 1970-01-01
  • 2017-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多