2012-11-07 37 views
0

我一直在试图解决我自己,为我的生活不能修复这个问题..mysqli_num_rows = 0时,它应该是1

//If they are, retreive them from the Person table  
var_dump($_POST['username']); 
var_dump($_POST['password']); 
$select = $this-> doQuery("SELECT * FROM Person WHERE username = '{$_POST['username']}' AND password = '".md5($_POST['password'])."'"); 
var_dump($select); 

try {  
    if (mysqli_num_rows($select) > 0){ 
     var_dump(mysqli_num_rows($select)); 
     //fetching username and password from database 
     $fetch_array = mysqli_fetch_assoc($select); 
     var_dump($fetch_array);  
     //Building a session for the user 
     $_SESSION['username'] = $fetch_array['username']; 

     //var_dump($_SESSION['username']); 

     //Redirecting the user to the index page   
     header('Location:index.php'); 
     return true; 
    } 

上的用户名两个var_dumps和4日和5日线密码返回此:

string(8) "johnny03" 
string(9) "password3" 
object(mysqli_result)#3 (5) { ["current_field"]=> int(0) ["field_count"]=> int(8) ["lengths"]=> NULL ["num_rows"]=> int(0) ["type"]=> int(0) } 

,我的用户名和密码都输入的值都是有效的(他们是在正确的列下的数据库,相信我)。我有一种感觉,我的select查询出了问题,因为mysqli_num_rows($ select)上的var转储没有返回任何东西。所以说,我已经尝试了几乎所有可以考虑的查询变化它的工作,但仍然没有:[任何人都可以帮忙吗?

+0

用户名前缀和后缀大括号?这不是一个错字? – Daneo

+1

''var_dump(md5($ _ POST ['password']));'产生与密码列中的数据库中相同的密码?在这个查询中,你也很容易受到sql注入的影响。 – drew010

+0

+1 to @ drew10。如果您确定用户名是正确的,那么必须验证数据库中密码的加密 – janenz00

回答

1

第一:尝试从查询移除括号:

$select = $this-> doQuery("SELECT * FROM Person WHERE username = '{$_POST['username']}' AND password = '" . md5($_POST['password']) . "'"); 

编辑:牙套都还好,看评论的drew010。

如果这不是问题,因为由drew010指出,检查使用一个简单的回声你得到的散列(输出它,并将它与你的数据库。

如果这些似乎匹配,但有一块丢失,那么调整你的密码字段的能力,你的数据库。

您的密码领域最有可能的大小例如VARCHAR(20),这是太小了整个哈希以适合。调整数据库中的大小并存储正确的散列结果

而且,至少可以看到一些将腌制,MD5已被打破,因为现在虽然所以你应该由SHA-家族的哈希值替换它。

您可以通过使用online md5 hashing验证数据库中的散列以及通过使用strlen的

+0

变量的大括号可以,需要解析某些类型的变量。 [来源](http://php.net/manual/en/language.types.string.php#language.types.string.parsing)。 – drew010

+0

@ drew010从未使用过它们,所以不知道。欢呼 – Daneo

+0

@JoanneDeBiasa认为将此标记为回答,然后请:-)干杯! – Daneo

0

试试这个测量得到它的长度:

var_dump("SELECT * FROM Person WHERE username = '{$_POST['username']}' AND password = '".md5($_POST['password'])."'"); 

将倾倒出来的查询。任何明显的错误,你应该能够马上挑出。如果查询看起来不错,请尝试复制并将其粘贴到PHPMyAdmin(或类似的)中以测试查询。如果它也返回零行,那么用户/通行证可能不匹配?

相关问题