我的問題是,當我嘗試登錄時,我的腳本跳到我的循環的其他部分。 我試圖把printf語句進行調試,並發現我的密碼哈希值與數據庫中的值一致。登錄系統不能登錄
<?php
//include_once './bin/configDb.php';
//MySQL connection variables
$dbhost = 'localhost';
$dbname = 'ideabank';
$dbuser = 'xxx';
$dbpass = 'xxx';
$table = 'members';
// Connect to server and select databse.
//include_once './bin/connectDb.php';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
mysql_select_db($dbname, $conn);
// username and password sent from form, cleanout, esacpe string against sqlinj.
$username = mysql_real_escape_string($_POST['username']);
$password = hash('sha512', $_POST['password']);
printf("$username \n");
printf("$password \n");
$sql = "SELECT * FROM $table WHERE username = '$username' AND password = '$password'
";
$result=mysql_query($sql);
//$result = mysql_query("SELECT * FROM $table WHERE username = '$username' AND password = '$password'
//");
// Replace counting function based on database you are using.
$count=mysql_num_rows($result);
// If result matched $username and $password, table row must be 1 row
if($count==1){
// Register $username, $password and redirect to file "login_success.php"
session_register("username");
session_register("password");
header("location:login_success.php");
}
else {
echo "Wrong Username or Password";
}
exit()
?>
我的MySQL數據庫是這樣的,
CREATE TABLE IF NOT EXISTS `members` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(30) NOT NULL,
`password` varchar(256) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
我加入這個以獲得更多的錯誤信息
var_dump($count);
而且也與我的查詢字符串試驗
$sql = "SELECT * FROM $table WHERE username = '$username'";
哪給了我是價值
$ SQLINT(0)
所以我的查詢不返回任何東西。
所以我通過刪除$表變量的確切的表名稱已更改SQL查詢「成員」
它給了我一個新的錯誤:
$sql Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in
/var/www/ideabank/checklogin.php on line 35 Call Stack: 0.0002 657184 1. {main}() /var/www/ideabank/checklogin.php:0 0.0006 660584 2. mysql_num_rows() /var/www/ideabank /checklogin.php:35 NULL
和35行是我的,如果( $計數== 1)
所以我測試一個簡單的查詢對數據庫
SELECT * From members
其結果是,顯示行0 - 5(6總計,查詢花費0.0004秒)
好了,我再次改變該查詢那些
$sql = "SELECT * FROM members WHERE password = '$password'";
結果:
$ SQLINT(2)
這是正確的,因爲我有兩個帳戶具有相同的密碼。
所以我做了另一個查詢
$sql = "SELECT * FROM members WHERE username = '$username'";
這將使意義,因爲用戶名是唯一
結果:
$ SQL警告:mysql_num_rows()預計參數1是資源,布爾給定在/var/www/ideabank/checklogin.php在線35調用堆棧:0.0002 653256 1. {main}()/var/www/ideabank/checklogin.php:0 0.0007 656528 2. mysql_num_rows()/ var/www/ideabank/checklogin.php:35 NULL
由於warnng emplies在第35行有一個錯誤,返回NULL!
創建警告的那一行是我的計數器,它確保只顯示一條記錄。
我最初的想法是,
如果結果匹配$的用戶名& $密碼,然後行必須== 1
但它拋出同樣的SQL錯誤
現在我試圖改變櫃檯和使用mysql_num_rows代替
if (
mysql_num_rows($result))
{
session_start();
...
eller
if (
mysql_num_rows($result) == 1)
{
session_start();
...
但它仍然拋出了SQL警告。
哈哈哈,我是一個多麼愚蠢。感謝你們所有人的美麗。 我的varchar設置爲128,這是一個愚蠢的錯誤:) 親愛的CFEAK&MARC B隨意添加更多的SQL注入,xss meassurements,所以我可以得到那部分直:) –