【问题标题】:Setting $_POST variables设置 $_POST 变量
【发布时间】:2013-06-23 18:49:52
【问题描述】:

我有一个使用 POST 的表单和一个变量。 如何在 $_POST 中设置该变量,以便在提交表单后仍然可以获取该变量?

我试过了

$_POST['variable'] = $variable;

它最终是空的。

【问题讨论】:

  • 请在此处发布您的表单代码。您的意思是要预填充表单值?
  • 你可以把它放在一个隐藏的输入中 - <input type="hidden" name="variable" value="<?php echo $_POST['variable'] ?>" /> 然后它将在表单帖子中可用 - $variable = $_POST['variable']

标签: php forms variables post


【解决方案1】:

您应该将该变量作为隐藏字段放在表单中,或者使用会话变量。

隐藏字段

<form method="POST" action="someactionpage.php">
    <input type="hidden" name="my_var" value="<?php echo $myvar; ?>" />
    <!-- ... -->
</form>

并在提交表单时在 someactionpage.php 中使用$_POST['my_var'] 获取它。

会话变量

只需将其存储在 $_SESSION 变量中

<?php
    session_start (); // Just once at the beginning of your code
    // ...
    $_SESSION['my_var'] = $myvar;
?>

并在另一个页面上检索它

<?php
    session_start (); // Same than before
    // ...
    echo $_SESSION['my_var'];
?>

附加信息

正如一些答案和 cmets 所指出的,您应该始终检查变量是否存在,因为您无法保证这一点。只需使用isset function

if (isset ($_SESSION['my_var']))
    // Do stuff with $_SESSION['my_var']

if (isset ($_POST['my_var']))
    // Do stuff with $_POST['my_var']

正如 cmets 中的 Kolink 所指出的,用户可以轻松查看和更改字段值(通过 POST 发送)。所以总是更喜欢会话变量,除非它真的是非关键信息。

【讨论】:

  • 请注意,$_SESSION 优于 $_POST,因为用户可以更改隐藏的输入。
【解决方案2】:

PHP 是一种服务器端语言!您不能设置变量并在另一个实例上使用它。这意味着,PHP 会在您处理重新加载后重置所有内容。 要设置在重新加载后定义的变量,您必须使用当前会话。 见:http://de1.php.net/manual/en/book.session.php

<?php
session_start();
$_SESSION['variable'] = 'my content';

【讨论】:

    【解决方案3】:

    您可以在提交之前或之后设置 $_POST['my_var'](任何名称):

        <input type="text" name="my_var" value="<?= $myvar ?>" />
    

    (注意,字段类型不必像之前发布的那样“隐藏”) 例如,如果您的代码处理来自两种不同类型屏幕的表单,并且必须在提交后更改其中一个表单变量,则只需在提交后代码中执行此操作:

        $_POST['t_mytext'] = "changed value (or whatever)";
    

    【讨论】:

      【解决方案4】:

      您可以使用 $_POST['variable'] = $foo 来设置 post 变量。 $_POST['variable'] 将继续设置,直到 php 脚本完成执行,或者直到您使用:unset($_POST['variable'])。如果您试图在会话之间保留变量(听起来很像),您应该使用会话。

      在会话 1 中:

      session_start();
      $_SESSION['variable'] = 'foo';
      

      在对服务器的另一个调用中检索:

      session_start();
      $variable = $_SESSION['variable'];
      

      【讨论】:

      • 第二个应该是$variable = isset($_SESSION["variable"]) ? $_SESSION["variable"] : "default";,因为绝对不能保证它就在那里。但绝对是问题的正确答案,除非有人不想使用 cookie 或有趣的 URL。隐藏的输入元素是要走的路。
      【解决方案5】:

      $_POST 变量从上一页发送到您当前所在的页面。

      这意味着您实际上不应该设置 POST 变量,而应该只检索其内容。

      如果你想在下次提交表单时设置一个 post 变量,你可以这样做:

      <input type="hidden" name="variable" value="<?php echo $_POST['variable']" />
      

      这意味着您提交的页面将能够通过这种方式访问​​您的变量:

      $variable = $_POST['variable'];
      

      如果您希望某个变量保留给某个用户,您应该查看会话。

      【讨论】:

      • 如果你愿意,可以设置一个 post 变量
      • 哦,真的吗?那我换个答案吧。
      【解决方案6】:

      试试这个:

      $variable = isset($_POST['variable']) ? $_POST['variable'] : '';
      

      【讨论】:

      • 我怀疑这根本不是 OP 所要求的。]
      • 我敢肯定这不是@CodyThompson 所说的。
      • 哦,我以为他的意思是,$variable 不是从请求中设置的。
      猜你喜欢
      • 2020-04-07
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      • 2016-06-29
      • 1970-01-01
      • 2013-12-05
      • 1970-01-01
      • 2011-08-16
      相关资源
      最近更新 更多