【问题标题】:Using $_POST variable on different php pages在不同的 php 页面上使用 $_POST 变量
【发布时间】:2015-09-07 19:59:57
【问题描述】:

编辑:感谢所有有用的答案,我解决了。

我似乎真的找不到这个问题的答案,而且它可能真的很简单。

我只是为了好玩而创建了一个页面,您可以在其中猜出 1-10 的数字。第 1 个人输入一个秘密数字,第 2 个人会猜。但是,我在存储密码中的 $_POST 时遇到了很多问题。

TL;DR 我无法将 secretNumber 的信息存储到guessnumber_guessed.php 文件中。例如查看guessnumber_guessed。 if 语句的第一部分,如果 inputNumber 等于 secretNumber,它应该说正确。问题是,变量未定义,如何“传输信息”?

希望大家明白我的意思,非常感谢您的帮助

代码如下:

guessnumber_welcome:

<form method="post" action="guessnumber.php">
    <input type="text" name="secretNumber" placeholder="Type the secret number"> 
    <input type="submit" name="submit" value="Send">
</form>

guessnumber.php:

<form method="post" action="guessnumber_guessed.php">
        <input type="text" name="inputNumber" placeholder="Guess the secret number"> 
        <input type="submit" name="submit" value="Guess!">
    </form>
<?php
        $secretNumber = $_POST["secretNumber"]

    ?>

guessnumber_guessed.php:

<form method="post" action="">
    <input type="text" name="inputNumber" placeholder="Guess the secret number"> 
    <input type="submit" name="submit" value="Guess!">
</form>

<?php
$inputNumber = $_POST["inputNumber"];

if ($inputNumber == $secretNumber) {
    echo "<p id=\"correctAnsw\"> CORRECT! </p>";

}
    else if ($inputNumber == 2) {
    echo "<p id=\"wrongAnsw\">You're very close. Go up a little!</p>";

    }

    else if ($inputNumber==4) {
    echo "<p id=\"wrongAnsw\">You're very close. Go down a little!</p>";


    }

    else if ($inputNumber > 10) {
    echo "<p id=\"wrongAnsw\">The number is you guessed is too high. Stay within the borders!</p>";

    }

    else if ($inputNumber < 1) {
    echo "<p id=\"wrongAnsw\">The number is you guessed is too low. Stay within the borders!</p>";

    }

    else {
    echo "<p id=\"wrongAnsw\">This is not the number. Try a new one!</p>";

    }
?>

【问题讨论】:

  • 看看 $_SESSION 。你可以这样存储号码。这里看看这个链接php.net/manual/en/session.examples.basic.php#example-5241
  • 在您的情况下,您必须使用隐藏字段才能将 $_POST["secretNumber"] 从guessnumber.php 传送到guessnumber_guessed.php。另一种解决方案是:使用 session_vars。
  • 请注意,只有两个玩家使用相同的浏览器时,会话才会有所帮助。

标签: php html variables post input


【解决方案1】:

会议将无济于事。他们是面向用户的。如果第一个人使用页面输入数字,然后第二个人在同一会话中,在同一浏览器上输入数字,则可以使用会话机制。

如果您尝试制作一个多用户“游戏”并且两人使用不同的浏览器,则意味着您必须:

  1. 将两个人配对(可能是房间机制)
  2. 使用某种服务器存储或缓存(您甚至可以使用 memcached 进行内存存储)来匹配两个人和他们的答案。

【讨论】:

  • 是的,我实际上正在尝试做你提到的第一件事。两个人,同一个浏览器,同一个电脑。我是这个 xD 的新手。只是想弄清楚如何在我的代码 atm 中使用 $_session。
【解决方案2】:

我在尝试在两个脚本之间传递一些用于“两步”上传器的 url 字符串时遇到了类似的问题。 我认为有两种解决方案,具体取决于您希望拥有的安全级别:

  • guessnumber.php 中将 $_POST['secretNumber'] 值放入输入 type="hidden"

    <input type="hidden" value="<?php echo $_POST['secretNumber']; ?>">
    

    通过这种方式,值将通过 POST 传递给第二个脚本,并在 $_POST 数组中可用。

    这种方法,对于敏感数据来说是不安全的,因为任何人只要通过浏览器的devtool就可以访问到html源代码了!!

  • 第二种更安全的解决方案是使用 php 会话
    guessnumber.php 中启动 php 会话并以这种方式保存值:

    if ( !session_id() ) {
        session_start();
    }
    $_SESSION['secretNumber'] = $_POST['secretNumber'];
    

    然后在 guessnumber_guessed.php 中恢复会话并从那里获取值

    if ( !session_id() ) {
        session_start();
    }
    $secretNumber = $_SESSION['secretNumber'];
    

我强烈推荐第二种解决方案。
希望对你有帮助:)

【讨论】:

  • Session 只有在他们使用相同的浏览器时才会有所帮助。否则,这个数字应该以某种方式(数据库、文件或内存缓存)“保存”才能工作。
  • 是的,我的回答是考虑到两个人使用同一个浏览器来玩这个游戏。如果 OP 想要在之间建立一种通信套接字来指导用户或创建一个待发现的数字数据库,那么代码将比这个更复杂:)
猜你喜欢
  • 2018-12-26
  • 2012-04-08
  • 1970-01-01
  • 2018-10-20
  • 2014-10-24
  • 1970-01-01
  • 2018-11-21
  • 2011-08-17
  • 2013-06-15
相关资源
最近更新 更多