2016-07-22 18 views
0

が動作していない: 私は私のウェブサイトのログインを作成しようとしていますが、これは、ログインのPHPで

<html> 
 

 
<head> 
 
    <meta charset="UTF-8" /> 
 
    <title>Simple Login</title> 
 
</head> 
 

 
<body> 
 
    <h1 style="text-align:center;">Simple Login</h1> 
 
    <div id="wrapper"> 
 
    <form style="text-align:center;" action="process.php" method="post"> 
 
     Username: 
 
     <input type="text" name="user" /> 
 
     <br />Password: 
 
     <input type="password" name="pass" /> 
 
     <br /> 
 
     <input type="submit" name="submit" value="Login" /> 
 
    </div> 
 
    </form> 
 
</body> 
 
<html>

誰かが教えてもらえ:

<?php 

// Get user input values 
$username = $_POST['user']; 
$password = $_POST['pass']; 

// Protect againts sql injection 
$username = stripslashes($username); 
$password = stripslashes($password); 
$username = mysql_real_escape_string($username); 
$password = mysql_real_escape_string($password); 

//connect to the database and selsct database 
mysql_connect("localhost", "root", "//im hiding the password"); 
mysql_select_db("test"); 

//Query the database for user 
$result = mysql_query("SELECT * FROM users WHERE username = '" . $username . "' && password = '" . $password . "'") or die("Failed to query database " . mysql_error()); 
$row = mysql_fetch_array($result); 
if ($row['username'] == $username && $row['password'] == $password) { 
    echo "Login Successful Welcome: " . $row['username']; 
} else { 
    echo "Invalid Username or Password"; 
} 

これはhtmlです私はなぜユーザー名とパスワードが正しい場合、PHPがデータベースをチェックしないのでしょうか?ああ、あなたがユーザー名とパスワードのボックスに何も入れていないと、それはあなたをログインさせます!

+0

あなたのコードは冗長です。クエリ自体でユーザー/パスの一致が既にチェックされているので、phpでもそれを行うには文字通りゼロ点があります。クエリは既に値に一致する行を返すか、まったく結果を返しません。パスワードを平文でデータベースに保存することは、セキュリティ上の巨大な脆弱性であり、問​​題を尋ねるだけです。 –

+0

@RamRaider:無意味です。 '&&'と 'and'は機能的に同一です。 –

+0

が削除されました。 – RamRaider

答えて

2

この:

$password = mysql_real_escape_string($password); 
//connect to the database and selsct database 
mysql_connect("localhost", "root", "//im hiding the password"); 

mysql_real_escape_string()は、DBへのアクティブな接続が必要ですが、あなたは後までその接続を行いません。したがって、m_r_e_s()は、失敗した場合はブール値FALSEを返します。あなたのクエリが文字通り

になってmysql_*()機能が廃止され、現在はPHPから削除されていることに注意されますので、文字列コンテキストではfalseのブールは、長さゼロの文字列です。何らかの理由でどこでも、NOTを使用してください。

+0

mysql_fetch_arrayが呼び出されると、 'false'を返すので、' $ row ['username'] == $ username'というように、 '$ password = mysql_real_escape_string(stripslashes($ password) 'true'と同じ' false == false'と同じです。パスワード比較をしているので、うれしいです。 – Will

関連する問題

 関連する問題