0

現在、MySQLデータベースを検索してユーザーがログインしているかどうかを確認するPHPファイルがあります。ユーザーがログインしている場合は「ようこそ'ユーザー名'。ログアウト」とエコーし、ログインしていない場合はエコーします。ログイン。登録してください。」

この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、Webサイトのルートフォルダに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 に答える