0

PHP と MYSQL を使用して非常に単純な CMS を作成しようとしています。私が抱えている問題は、ログインしようとするたびに、間違ったユーザー名を入力すると、私が望んでいたことが起こるということです. 間違った入力を示す画面に移動し、ログイン ページに戻るリンクがあります。ただし、正しいユーザー名と間違ったパスワードを入力すると、ページがリロードされ、正しいパスワードを入力すると、間違ったユーザー名を入力した場合と同じ画面が表示され、ユーザー名またはパスワードが間違っていることがわかります。データベースをチェックして、入力しているパスワードが正しいこと、およびユーザー名とパスワードの両方が正しいことを確認しましたが、機能していません。誰でもこれで私を助けることができますか? 前もって感謝します

必要な機能は次のとおりです。

function verifyUser($name, $pass)
{
// Escape strings
$username = mysql_real_escape_string($name);
$password - mysql_real_escape_string($pass);

$result = mysql_query("select * from users where username='$username' and       password-'$password' limit 1");

if (mysql_fetch_array($result))
{
    return true;
} else{
    return false;
}

}

function validateUser($name, $pass)
{
    $check = verifyUser($name, md5($pass));

    if($check)
    {
        $_SESSION['status'] = 'authorized';

        header('Location: http://localhost/cms/admin/index.php');

    } else{

        echo'Please enter a correct username and password <br />';
        echo "<a href='http://localhost/cms/admin/login.php'>Try Again?</a>";
        exit;
    }



}

login.php ファイルは次のとおりです。

require_once '../functions.php';

connect();

if($_POST['username'] && $_POST['password'])
{
$result = validateUser($_POST['username'], $_POST['password']);
}


?>

<form method="post" action="">
<p>
    <label for="name">Username: </label>
    <input type="text" name="username" />
</p>

<p>
    <label for="password">Password: </label>
    <input type="password" name="password" />
</p>

<p>
    <input type="submit" id="submit" value="Login" name="submit" />
</p>
</form>

私は 1 つの通知を受け取ります: Undefined index: username in C:\xampp\htdocs\cms\admin\login.php 行 14

4

4 に答える 4

1

ログイン試行が成功しdie();たら、行の後に追加してみてください。header('Location: ...');

未定義のインデックス エラーを修正するには、login.php で次のように変更します。

if( isset($_POST['username']) && isset($_POST['password']) )

さらに、クエリにエラーがあります。マイナス記号は等号にpassword-'$password'する必要があります (.

$result = mysql_query("select * from users where username='$username' and       password='$password' limit 1");

if ( mysql_num_rows( $result ) > 0 )
于 2012-08-13T04:55:02.517 に答える
0

正しいクエリを使用する

$result = mysql_query("select * from users where username='{$username}'
 AND password='{$password}' limit 1");
if($result){
return true;
}else{
return false;
}

また、

if(isset($_POST["username"]) && isset($_POST["password"])){
$check=verifyuser($_POST["username"],sha1($_POST["password"]));//sha1 is more secure than md5
}
于 2012-08-13T05:07:44.190 に答える
0

mysql_fetch_arrayを読んでください。

基本的に、ラインif (mysql_fetch_array($result))が問題です。if/else が期待するようなブール値の回答である必要はありません。代わりに、リソースまたはFALSE. したがって、$checkの値が与えられることはありませんtrue

さらに、しかし重要なことに、使用している関数は廃止されています。MySQLiまたはPDO_MySQLを読んでください。

于 2012-08-13T04:55:12.557 に答える
0

これは些細なことかもしれませんが、パスワード変数の後に「=」ではなく「-」が 2 回あることに注意してください。

    $password - mysql_real_escape_string($pass);

$result = mysql_query("select * from users where username='$username' and       password-'$password' limit 1");
于 2012-08-13T05:01:56.153 に答える