-3

ログインシステムを作成しています。これが私のスクリプトです。何が悪いのかわかりません。クエリかもしれません。

<?php
$username = $_POST['Username'];
$password = $_POST['password'];
//connect to database
$username = stripslashes($username);
$username = mysql_real_escape_string($username);
$Dbhost = 'localhost' ;
$dbname = 'users';
$dbuser = 'root';
$dbpass = '';
mysql_connect ($Dbhost , $dbuser , $dbpass);

//query

$query = "SELECT Password
FROM UsPa
WHERE Username = '$username';";

if (mysql_query($query) == $password){
header('Location: page1.html');
}
else{
header('Location: login.html');
}
?>

page1.html には移動しません。私はそれを理解しようとしています。提案、コメント、または懸念はありますか?

4

3 に答える 3

1
if (mysql_query($query) == $password){

この行は機能しません。mysql_query() は に匹敵する型を返しません$password

次のことを行う必要があります。

$result = mysql_query($query);
$data = mysql_fetch_assoc($result);
$user_password = $data['Password'];

if ($user_password == $password) {
...

そのことを念頭に置いて、学習しているだけであっても、mysql を使用するべきではありません。非推奨です。最低限、mysqli を使用して学習します。

于 2013-10-19T23:56:32.223 に答える
-1

編集: mysql_query 結果リソースをユーザーのパスワード文字列と比較しています。次のように fetch_assoc() を追加してみてください:

$username = $_POST['Username'];
$password = $_POST['password'];
//connect to database
$username = stripslashes($username);
$username = mysql_real_escape_string($username);
$Dbhost = 'localhost' ;
$dbname = 'users';
$dbuser = 'root';
$dbpass = '';
mysql_connect ($Dbhost , $dbuser , $dbpass);

//query
$query = "SELECT Password
FROM UsPa
WHERE Username = '$username';";

$result = mysql_query($query);
$row = mysql_fetch_assoc($result);

if ($row['Password'] === $password){
    header('Location: page1.html');
}else{
    header('Location: login.html');
}

非推奨の mysql php 関数の代わりに mysqli を使用します。また、準備済みステートメントを使用することをお勧めします。入力をサニタイズするためにストリップスラッシュやエスケープは必要ありません。これらのリソースを使用してみてください。 http://php.net/manual/en/book.mysqli.php

mysqli と準備されたステートメントを使用したコードは、次のようになります(テストされていません)

$username = $_POST['Username'];
$password = $_POST['password'];
$Dbhost = 'localhost' ;
$dbname = 'users';
$dbuser = 'root';
$dbpass = '';

$query = "SELECT Password
FROM UsPa
WHERE Username = '?";

$db = new mysqli($Dbhost, $dbuser, $dbpass, $dbname);
$stmt = $db->stmt_init();

$stmt->prepare($query))

$stmt->bind_param("s",$username);
$stmt->execute();
$stmt->bind_result($dbPw);
$stmt->fetch();

if ( $dbPw === $password ) {
    header('Location: page1.html');
} else{
    header('Location: login.html');
}

$stmt->close();
于 2013-10-19T23:56:50.287 に答える