【问题标题】:Setting POST variable without using form不使用表单设置 POST 变量
【发布时间】:2011-03-25 23:40:32
【问题描述】:

有没有办法设置$_POST['var'] 而不使用表单相关字段(没有类型='hidden')并且只使用 PHP。 类似的东西

$_POST['name'] = "Denniss";

有没有办法做到这一点?

编辑: 有人要求我对此进行详细说明。例如,我有一个带有表单的页面,表单看起来像这样

<form method='post' action='next.php'>
<input type='text' name='text' value='' />
<input type='submit' name='submit' value='Submit'/>
</form>

单击提交按钮后,我想重定向到 next.php。有没有办法将 $_POST['text'] 变量设置为另一个值?如何使这个持久化,以便当我点击另一个提交按钮(例如)时,$_POST['text'] 将成为我在 next.php 上设置的内容,而不使用隐藏字段。

如果还不清楚,请告诉我,感谢您的帮助。

【问题讨论】:

  • 您是指在服务器代码中还是在用户访问某个页面时从客户端?
  • 您能详细说明您要做什么吗? cURL 可能是一种选择,会话可能是另一种选择。太模糊了,无法给出准确的答案。
  • 什么?为什么你不想使用隐藏字段?这就是他们的目的。
  • 并不是我不想使用它们。我只是想知道是否有办法在不使用隐藏字段的情况下做到这一点。
  • 如果不使用会话或 cookie,您将无法在页面访问之间保留数据。当访问页面 b.php 时,您在页面 a.php 中设置的每个变量都将丢失。看起来你想用某种方式做某事,虽然这种方式不适合这个问题。

标签: php html post


【解决方案1】:

是的,只需将其设置为另一个值:

$_POST['text'] = 'another value';

这将覆盖与数组的text 键对应的先前值。 $_POST 是超全局关联数组,您可以像普通 PHP 数组一样更改值。

注意:此更改仅在同一 PHP 执行范围内可见。执行完成并加载页面后,$_POST 数组将被清除。新的表单提交将生成一个新的$_POST 数组。

如果您想在表单提交中保留该值,您需要将其作为input 标记的value 属性放入表单中,或者从数据存储中检索它。

【讨论】:

  • 当我点击另一个提交按钮而不将其设置为隐藏字段时,它会保留吗?
  • @denniss:当您提交表单时,如果字段名为text,它将再次覆盖。如果您想保留某个值,为什么不使用会话。
  • 虽然这回答了字面上的问题,但它完全忽略了这样做毫无意义的重点。是的,您可以覆盖$_POST 中的值。伟大的。这就像你做$foo = $_POST; $foo['bar'] = 'baz'; 一样,你正在改变一个变量,不多也不少。这并不意味着您正在更改 HTTP POST 数据,或者这将一直持续到下一页,或者问题开始时有任何意义。 -1
  • @deceze:这有合法的用途——例如,在单元测试中设置$_POST 变量。 +1
  • 设置一个 $_POST 值对于在代码后面需要 $_POST 值时设置默认值也很有用。稍后在关联或包含的代码块中执行if (!isset($_POST["underwear_ordered_with_tuxedo"])){$_POST["underwear_ordered_with_tuxedo"] = "super_wedgie_thong";} 之类的操作,您将拥有order_from_catalog($_POST["underwear_ordered_with_tuxedo"]);share_the_order_on_facebook($_POST["underwear_ordered_with_tuxedo"]); 以及更多。
【解决方案2】:

如果你想将 $_POST['text'] 设置为另一个值,为什么不使用:

$_POST['text'] = $var;

在 next.php 上?

【讨论】:

  • @deceze 准确地给出了“为什么不使用”的答案(@Nathan Arthur 解释的低级单元测试可能例外)。不要“更改”$_POST,然后想知道为什么您的更改在下一个表单上下文中消失了。
【解决方案3】:

您可以使用 ajax 或发送 http 标头+内容,例如:

POST /xyz.php HTTP/1.1
Host: www.mysite.com
User-Agent: Mozilla/4.0
Content-Length: 27
Content-Type: application/x-www-form-urlencoded

userid=joe&password=guessme

【讨论】:

  • 你如何“回显”数据 userid=joe&password=guessme ?
  • parse_str(file_get_contents('php://input'));
  • 这很酷。似乎这可以用作 CURL 的替代方法来设置发布的值。我说的对吗?
【解决方案4】:

您可以使用 jQuery 来完成。示例:

<script src="https://code.jquery.com/jquery-1.11.2.min.js"></script>

<script>
    $.ajax({
        url : "next.php",
        type: "POST",
        data : "name=Denniss",
        success: function(data)
        {
            //data - response from server
            $('#response_div').html(data);
        }
    });
</script>

【讨论】:

  • 如果你足够热心,你可能会得到一个网页来用 jQuery 唱一首 Billy Joel 的歌曲,但这并不意味着它是最好或最优雅的方式。 jQuery 很棒,但不幸的是,它为世界提供了另外一百种滥用 JavaScript 的方法。编辑:最初的问题是“有没有办法在不使用表单相关字段(没有 type='hidden')并且只使用 PHP 的情况下设置 $_POST['var']”它没有问“是否还有另一种方法可以在 jQuery 中做一些可以通过其他方式做得更好的事情”
猜你喜欢
  • 2021-09-11
  • 2016-06-11
  • 1970-01-01
  • 2014-04-14
  • 1970-01-01
  • 1970-01-01
  • 2014-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多