我最近试图制作一个小报告管理系统。一切顺利,直到遇到这个奇怪的问题。由于代码包含大量的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--------
现在这里出现了奇怪的行为。该页面将登录数据发布到自身&amp;如果发生错误,则在会话变量{$ _SESSION ['err']}中设置错误,然后再次重定向到自身,如果$ _SESSION ['err']不为空,则会显示一个jquery消息框。
上面的代码不能以原始形式工作,但是,如果我喜欢下面显示的代码,代码可以正常工作。我的意思是整个代码包括先前没有工作的条件组件。一旦删除该特定行,条件评估就不起作用。
<?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版。
谢谢。
答案 0 :(得分:0)
您是否正在呼叫session_start()
以实际启用会话?没有它,你只会浪费你的时间。除非您开始会话,否则php将不保存您写入$_SESSION
的所有数据,而不会加载之前保存在其他位置的任何数据。
答案 1 :(得分:0)
我解决了这个问题。结果表明,在HTML之间改变PHP脚本在头到尾之间的位置就行了。