【问题标题】:issue in passing session value in php pages在 php 页面中传递会话值的问题
【发布时间】:2018-03-16 20:06:03
【问题描述】:

我有 quizaction.php 页面和 result.php 页面。我将变量从 quizaction.php 传递到 result.php。 这是我的 quizaction.php:

    <?php

      include 'db.php';
      session_start();
    ?>
    <html>
    <head><title>Quiz Feedback</title></head>
    <body bgcolor="#FFFFFF">
    <form name="result" action=result.php  method="POST"> 
      <?php
      $_SESSION['time_left'] = $_POST['formvar'];
      $_SESSION['time_taken'] = 60 - $_SESSION['time_left'];
      ?>
     <INPUT TYPE="SUBMIT" VALUE="Done" >
    </form>
    </body>
    </html>

而我的 result.php 是:

    <?php 
      session_start();
      include 'db.php';
      include 'quizaction.php';
    ?>
    <button onclick="myFunction()">Try it</button>

    <script type="text/javascript">
        function myFunction() {

          var topic1= "<?php echo $type[0]; ?>";
          var topic2= "<?php echo $type[1]; ?>";

          var score= "<?php echo ($score); ?>";
          alert("check");
          alert(score); 
          alert(topic1);
          alert(topic2);
       }
       </script>

但我无法从 quizaction.php 中检索分数值。 实际上,我也从其他页面获取 quizaction.php 中的数据。但在这里我不认为有任何问题。请帮帮我。即使是解释也会起作用

【问题讨论】:

  • 好像你在 quizaction.php 中遗漏了一些 php 标签?

标签: javascript php forms variables post


【解决方案1】:

这个脚本有很多问题:

1) 在result.php 页面中,在页面已经呈现了包含&lt;html&gt; 的开始和结束标记的quizaction.php 的内容之后,您将获得该html 输出。那不是主意。

2) 当包含一个到另一个时,您有两个session_start(),这将导致警告/错误。这并不理想。

3) 在result.php 中,您定义了$type$score,但在您的示例脚本中发布的任何一个页面中都没有。

我认为您的主要问题是组织性。你可能有一些事情是单独工作的,现在正试图把它们挤在一起,这不是最好的方法。你有太多的重复和重复意味着你引入了不一致和潜在的错误。今后,您将很难维持这一点。

如果可能,请使用某种框架。如果这不是您可以做的,请重新组织您的脚本。我会:

1) 制作一个包含您的数据库、会话和其他易于引用的项目的配置文件:

/config.php

<?php
define('DS',DIRECTORY_SEPARATOR);
define('ROOT_DIR',__DIR__);
define('FUNCTIONS',ROOT_DIR.DS.'functions');
# Start session
session_start();
# Include database
require_once('db.php');

2) 你必须定义$type$score,我不知道它来自哪里,所以你必须弄清楚它来自哪里。根据您发布的脚本,您只定义了 $_SESSION$_POST

/result.php

<button onclick="myFunction()">Try it</button>

<script type="text/javascript">
    function myFunction()
    {
        var topic1= "<?php echo $type[0] ?>";
        var topic2= "<?php echo $type[1] ?>";
        var score = "<?php echo $score ?>";

        alert("check");
        alert(score); 
        alert(topic1);
        alert(topic2);
    }
</script>

3) 将result.php 包含在测验页面中,而不是相反。

/quizaction.php

<?php
# Include the config at the top of the main pages
require_once(__DIR__.DIRECTORY_SEPARATOR.'config.php');
# Move non-view logic before view
# Check if something is set first
if(!empty($_POST['formvar'])) {
    $_SESSION['time_left']  = $_POST['formvar'];
    $_SESSION['time_taken'] = 60 - $_SESSION['time_left'];
}
?>
<html>
<head><title>Quiz Feedback</title></head>
<body bgcolor="#FFFFFF">
<!-- Use quotes here ------v----------v -->
<form name="result" action="result.php"  method="POST"> 
    <input type="submit" value="Done" >
</form>
<?php include(ROOT_DIR.DS.'result.php') ?>
</body>
</html>

【讨论】:

    【解决方案2】:

    将此添加到 results.php

    &lt;?PHP PRINT_R($_POST); // For Testing ?&gt;

    quizaction.php
    所有输入字段必须具有类似的名称

    &lt;INPUT TYPE=text VALUE='123' name='topic_1'&gt;

    使某些东西成为会话变量
    - 第一个会话开始
    - 第二个结果.php

    &lt;?PHP $_SESSION['topic_1'] = $_POST['topic_1']; ?&gt;

    这应该可以帮助您到达需要去的地方。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-06
      • 2021-10-01
      相关资源
      最近更新 更多