0

我最近正在尝试制作一个小报表管理系统。一切都很顺利,直到我遇到了这个奇怪的问题。由于代码包含大量 html,我将只包含重要部分。

基本上这是一个登录页面。我将信息存储在 SESSION 变量中。

当用户名和通行证不匹配时,错误消息将提供给以下函数以进行进一步处理。

编辑:我项目中的每个页面都包含一个带有以下内容的 config.php

// Start of config.php
session_start();
error_reporting(E_ERROR);

// ********************* Database Config **********************//
$dbHost = "localhost";          // MySQL host
$dbUser = "";   // MySQL username
$dbPass = "";   // MySQL password
$dbDatabase = "";  // MySQL main database name

login.php 的一部分如下所示。

//START OF PHP CODE//
include("config.php");

    function gotError($msg)
    {
        $_SESSION['err'] = $msg;
        header("Location: login.php");
        die();
    }

//CODE FOR EVALUATION OF DATA//

// END OF THE PHP CODE & BELOW THE HTML WILL START //

并且在同一页面上,在起始php代码下方,是页面的html代码。在 html 之间,有一些 php 代码用于使用上面的数据集。

----------- SOME HTML CODE HERE----
         <?php

         if(isset($_SESSION['err']))
         {
         $html.= "<script type='text/javascript'>";
         $html.= '$.alert("'.$_SESSION['err'].'");';
         $html.= "</script>";
         print $html;
         }
        ?>
----------------- SOME HTML CODE HERE--------

现在出现了奇怪的行为。页面将登录数据发布到自身,如果发生错误,则在会话变量 { $_SESSION['err'] } 中设置错误,然后再次重定向到自身,如果出现 jquery 消息框$_SESSION[ 'err' ] 不为空。

上面的代码不能以原始形式工作,但是,如果我喜欢下面显示的代码,代码就可以工作。我的意思是整个代码,包括以前没有工作的条件组件。一旦我删除该特定行,条件评估就不起作用。

     <?php
     print($_SESSION['err']);

     if(isset($_SESSION['err']))
     {
     $html.= "<script type='text/javascript'>";
     $html.= '$.alert("'.$_SESSION['err'].'");';
     $html.= "</script>";
     print $html;
     }
    ?>

有人知道吗?我正在使用 PHP 版本 5.3.8。

谢谢你。

4

2 回答 2

0

我解决了这个问题。结果表明,将 HTML 之间的 php 脚本的位置从头更改为正文就可以了。

于 2012-07-15T07:53:29.147 回答
0

你打电话session_start()是为了真正启用会话吗?没有它,你只会浪费你的时间。除非您启动会话,否则 php不会保存您写入的任何数据$_SESSION,也不会加载以前保存在其他地方的任何数据。

于 2012-07-14T15:39:31.820 回答