HTML中包含的PHP代码赢得了';t更新


PHP code included in HTML won't update

我目前有一个PHP文件,它会搜索我的MySQL数据库,看看是否有用户登录。如果他们登录了,它会回复"欢迎‘用户名’。注销",如果他们没有登录,它会回应"登录。注册"

如果我直接查看这个PHP文件,它会回显正确的文本,这取决于我是否登录。但是,如果我使用include将其放入HTML文件,它只会回显已注销的文本,而不管我是否登录了。

PHP和HTML之间是否存在冲突,这可能会阻止它打印出正确的文本?打开PHP文件本身似乎很奇怪,但当它包含在HTML中时却不行。

HTML代码:

<?php include "loginreg/check.php"; ?>

它在一个子文件夹中的事实会有什么不同吗?还没有包括PHP代码,因为它本身正在工作,但如果你需要看的话,我已经得到了

干杯

PHP代码:

// Gets IP address
$ip = visitorIP();
// Connect to database
mysql_connect(localhost, $username, $password);
@mysql_select_db($database) or die('Unable to select database');
$query  = "SELECT * FROM loggedin WHERE userip='$ip'";
$result = mysql_num_rows(mysql_query($query));
if ($result == '0') {
    mysql_close();
    loggedOut();
    return;
}
if (isset($_COOKIE['sid'])) {
    $sessionid = $_COOKIE['sid'];
}
$result = mysql_query($query);
while ($row    = mysql_fetch_assoc($result)) {
    if ($row['sessionid'] == $sessionid) {
        mysql_close();
        loggedIn($row['id']);
    } else {
        mysql_close();
        loggedOut();
    }
}
function visitorIP() {
    if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $TheIp = $_SERVER['HTTP_X_FORWARDED_FOR'];
    } else {
        $TheIp = $_SERVER['REMOTE_ADDR'];
    }
    return trim($TheIp);
}
function loggedIn($id) {
    global $username, $password, $database;
    mysql_connect(localhost, $username, $password);
    @mysql_select_db($database) or die('Unable to select database');
    $query  = "SELECT * FROM users WHERE id='$id'";
    $result = mysql_query($query);
    while ($row = mysql_fetch_assoc($result)) {
        $fname = $row['fname'];
        $sname = $row['sname'];
    }
    echo "<div class='"fltrt'">Welcome, " . $fname . ". <a href='"http://redsquirrelsoftware.co.uk/loginreg/logout.php'">Logout</a></div>";
}
function loggedOut() {
    echo "<div class='"fltrt'"><a href='"http://redsquirrelsoftware.co.uk/loginreg/login.html'">Login</a> <a href='"http://redsquirrelsoftware.co.uk/loginreg/register.html'">Register</a></div>";
}

在没有看到两个脚本的代码的情况下,这只是一个猜测,但可能的问题是,在包含loginreg/check.php脚本之前,您正在输出html(任何…)。

这将使包含文件中的任何session_start()语句都变得无用,因为标头已经发送。不能进入会话将导致您所描述的错误。

编辑:对于cookie,同样的原则也适用,它们需要在发送标头之前进行设置,因此在向浏览器输出任何内容之前进行设置。

您的问题是在子目录中设置cookie。使用setcookiepath参数来确保您在网站的根文件夹中设置cookie:

// Sets the cookie for the root of the domain:
setcookie("username", "foo", time() + 60 * 60, "/");

如果我错了,请纠正我,但你是否试图在HTML文件中使用PHP包?如果是这样,那就永远不会起作用(除非你有一些自定义的服务器配置,可以解析HTML文件中的PHP代码)。

PHP代码是为PHP文件编写的。HTML代码可以在HTML和PHP文件中工作。您不能在HTML文件中执行PHP包含。