【问题标题】:Form won't forward $score to next page表单不会将 $score 转发到下一页
【发布时间】:2015-03-02 06:45:16
【问题描述】:

当用户参加测验时,他们的分数会记录在价值 $grade 中,该值会在测验的主页上显示为很好。但是,如果我更改表单操作以将用户转发到新页面 (grade.php),$grade 就会失去它的价值。

如何获取值并将其显示在下一页上? PreviousURL 和 user_token 的值显示...

<form action="grade.php" method="post" id="quiz">
  <input type="hidden" name="PreviousURL" id="url" />
  <input type="hidden" name="user_token" value="<?php echo $_SESSION['user_token']; ?>" />
  <input type="submit" value="Submit Quiz" />
</form>

所以我尝试了这个,但它不起作用......

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

【问题讨论】:

  • 在更改操作后,您现在用来在测验主页中获取 $grade 值的代码在grade.php 中使用相同的代码,然后回显 $grade 的值,我希望现在你得到这个,如果然后不给我看代码
  • 好提示。我刚刚从测验主页中删除了带有答案键和评分脚本的代码,并将其粘贴到用户转发到的页面(grade.php)上。有用! ;)
  • 这是登录而不是 tio 表单操作意味着当您在主页中执行操作时提交所有这些变量值它工作正常,因为您在主页中提交这些值并在成绩页面中打印但是当您在年级中执行此操作时,您可以提交但无法获取新值

标签: php forms session


【解决方案1】:

grade.php 上确保以

开头的文件
session_start();

根据您的问题,我假设您没有在grade.php 上开始会话。关于文件的信息不多

如果您不启动会话,$_SESSION 的值将被销毁

【讨论】:

  • 很抱歉给您带来了困惑。我只是在学习如何使用会话,我应该提到当我回答问题并单击提交按钮时我什至没有登录。我不明白为什么它甚至显示 user_token 的值;我认为您必须登录才能获得该值。
  • 我无法假设您的代码是如何工作的,因为我没有完整的代码。但是您可以随时初始化会话。这是我几周前在回合会议上写的一个问题的答案。它可能会帮助您了解会话
【解决方案2】:

您不应将表单值保存在 $_SESSION 中,因为表单值已经在 $_POST 超全局中。

你可以这样做

<form action="grade.php" method="post" id="quiz">
  <input type="hidden" name="PreviousURL" id="url" />
  <input type="hidden" name="user_token" value="<?php echo isset($_POST['user_token']) ? $_POST['user_token'] : '' ; ?>" />
  <input type="submit" value="Submit Quiz" />
</form>

所以基本上它会测试 user_token 字段中是否有值,否则它将应用该值,否则它将设置为 ''(无)。如果对三元运算符语法不熟悉请参考http://php.net/manual/en/language.operators.comparison.php

更新部分:

// Your form page goes like 
<?php session_start();
      print_r($_SESSION); // If there is a session your form should show the value of user_token

// Rest of the script + html


?>

// grade.php
<?php session_start();
// do a print_r to see if you are receving session variables by
print_r($_SESSION);

【讨论】:

  • Raheel,我按照你的建议编辑了我的代码,但现在它没有显示 user_token 的值,即使我已经登录... ["user_token"]=> string(0 )
  • 我想我把你的问题弄错了。你能把你问题的php部分放在一边吗?我猜您在表单发布之前已将您的 user_token 保存在会话中。所以在这种情况下,您需要做的就是将session_start() 放在grade.php 以及表单所在的页面上。确保将session_start 放在两页脚本的第一行。
  • 好的,我想我现在明白了。对困惑感到抱歉;我应该提到当我第一次测试测验时我没有登录。
猜你喜欢
  • 1970-01-01
  • 2018-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-17
  • 1970-01-01
相关资源
最近更新 更多