注意比較:PHP - 哈希使用數據庫無法正常工作
- 我還是相當新的PHP
- 此登錄表單似乎完全正常工作,如果我不散列密碼。
- 我試過md5,sha256,現在我已經把它留在sha1。這些都不起作用。
- 我第一次使用
echo sha1("password");
來找出我的密碼的散列值是什麼,然後我複製這個散列值並用phpMyAdmin手動粘貼它。我不確定這是否是問題所在。
反正這裏是代碼:
<?php
session_start();
require("config.php");
if(isset($_POST['submit'])) {
$username = mysql_real_escape_string($_POST['username']);
$password = sha1(mysql_real_escape_string($_POST['password']));
$loginsql = "SELECT * FROM login WHERE username = '" . $username .
"' AND password = '" . $password . "'";
$loginresult = mysql_query($loginsql);
$loginnumrows = mysql_num_rows($loginresult);
if($loginnumrows == 1) {
$loginrow = mysql_fetch_assoc($loginresult);
session_register("USERNAME");
session_register("USERID");
$_SESSION['USERNAME'] = $loginrow['username'];
$_SESSION['USERID'] = $loginrow['id'];
header("Location: " . $config_basedir . "controlpanel.php");
}
else{
echo "<p>Incorrect Login, please try again!</p>";
}
}
else{
}
?>
我真的不太知道在哪裏這個去。我確定我的代碼可能更高效,但正如我在筆記中提到的那樣,當我不散列密碼時它確實有效。謝謝你的閱讀。
如何在您的數據庫中設置'password'? – 2012-02-14 22:02:35
在數據發送到數據庫之前,您不應該使用'mysql_real_escape_string'。具體來說,'sha1(mysql_real_escape_string($ _ POST ['password']));'應該是'mysql_real_escape_string(sha1($ _ POST ['password']));'。我們也無法看到*存儲的密碼是如何散列的,所以我們無法真正幫助你。嘗試選擇記錄和'var_dump'你的密碼。將它與發佈到服務器的值進行比較。這些是您應該學會遵循的基本調試步驟。 – meagar 2012-02-14 22:03:01
你試過'$ password = sha1($ _ POST ['password']);'?這裏不需要mysql_real_escape_string。 – aletzo 2012-02-14 22:03:23