0

我目前有一个 PHP 文件,它将搜索我的 MySQL 数据库并查看用户是否已登录。如果他们已登录,它将回显“Welcome 'username'. Logout”,如果他们未登录,它将回显“登录。注册。”

如果我直接查看此 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>";
}
4

3 回答 3

2

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

session_start()由于标头已经发送,这将使您包含的文件中的任何语句都无用。无法参加会议会导致您描述的错误。

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

于 2012-08-27T16:52:05.417 回答
0

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

// Sets the cookie for the root of the domain:
setcookie("username", "foo", time() + 60 * 60, "/");
于 2012-08-27T17:13:45.557 回答
0

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

PHP 代码用于 PHP 文件。HTML 代码可以在 HTML 和 PHP 文件中工作。您不能在 HTML 文件中执行 PHP 包含。

于 2012-12-23T16:11:01.773 回答