0

ここでは、簡単なログイン スクリプトを作成しました。3 つのファイルがあり、1 つは functions.php (ログイン関数を含む)、次にいくつかのユーザー関数を含む userdashboard.php と、ログインを処理する別のファイル users.php があります。

問題は、ログインするたびにログインが成功するが、エラーがスローされることです:- unnow variable username

ログインした人のユーザー名が表示されるはずですが、何が間違っていますか? コードは次のとおりです:-

関数.php

<?php
include 'dbconnector.php';
function checklogin($username,$password)
{
    include 'dbconnector.php';
    $userexists=false;
    $username=mysql_real_escape_string($username);
    $password=mysql_real_escape_string($password);
    $password=md5($password);
    $query="select * from f_users where username = '" . $username . "' and password = '" . $password . "'";
    $result=mysql_query($query,$db) or die (mysql_error($db));
    if(mysql_num_rows($result) > 0)
    {
        $userexists=true;
    }
    else
    {
        $userexists=false;
    }
    return $userexists;
}

ユーザーダッシュボード.php

<?php
include('dbconnector.php');
session_start();
if(isset($_SESSION['logged']) && $_SESSION['logged']=1)
{
    $_SESSION['username']=$username;
    echo "Hello " . $username;
}
else
{
    header('Location:login.php');
}
echo '<a href="logout.php">logout</a>';
?>

ログインが処理されるファイル。

include 'functions.php';
.
.
.
case 'login':
        $username=$_POST['username'];
        $password=$_POST['password'];
        $username=mysql_real_escape_string($username);
        $password=mysql_real_escape_string($password);
        $password=md5($password);
        if((!empty($username)) && (!empty($password)))
        {
            if(!checklogin($username,$password))
            {
                $_SESSION['logged']=1;
                $_SESSION['username']=$username;
                header('Location:userdashboard.php');
            }
            else
            {
                echo "Invalid combination of username and password";
                echo "redirecting to the login page";
                header('refresh:2;URL=login.php');
            }
        }
        else
        {
            echo "username or password fields cannot be empty, redirecting";
            header('refresh:2;URL=login.php');
        }
        break;

Houssni さん、修正ありがとうございます。ここで奇妙なエラーが発生しました。

ユーザー名とパスワードの有効な組み合わせを試しても、常に else 部分に移動し、エラーがスローされます。私はここで何をしているのですか?

$username=mysql_real_escape_string($username);
            $password=mysql_real_escape_string($password);
            $password=md5($password);
            $query="select * from f_users where username = '" . $username . "' and password = '" . $password . "'";
            $result=mysql_query($query,$db) or die (mysql_error($db));
            if(mysql_num_rows($result) > 0)
            {
                session_start();
                $_SESSION['logged']=1;
                $_SESSION['username']=$username;
                header('Location:userdashboard.php');
                exit();
            }
            else
            {
                echo mysql_num_rows($result);
                echo "Invalid combination of username and password";
                echo "redirecting to the login page";
                header('refresh:2;URL=login.php');
                exit();
            }
4

3 に答える 3

2

userdashboard.php に別のエラーがあります

変化する

if(isset($_SESSION['logged']) && $_SESSION['logged']=1)
{
$_SESSION['username']=$username;
echo "Hello " . $username;
}

if(isset($_SESSION['logged']) && $_SESSION['logged']==1)
{
  $_SESSION['username']=$username;
   echo "Hello " . $username;
}
于 2013-11-06T12:05:37.267 に答える
2

$usernameはパラメーターであるため、その関数スコープでのみ使用できます。ユーザー名を取得する$_POSTか、その関数で設定$_SESSIONします。またはuserdashboard.php、変数$usernameを再度割り当てて、その値を指定する必要があります。

そして、functions.phpこの関数内に別のインクルードがあります。この関数を呼び出すと、このファイルが 2 回インクルードされます。

そして、あなたが呼び出す場所の最後にあなたを呼び出す必要header("Location: ")がありますexit()。そうしないと、そのページのPHPコードが実行され続けるからです。

于 2013-11-06T12:03:24.630 に答える