Php 来自登录表单的密码和数据库中的哈希密码

Php 来自登录表单的密码和数据库中的哈希密码,php,mysql,Php,Mysql,我尝试将登录表单中提交的密码与数据库中存储的加密密码进行比较,如下所示: $password=crypt($_POST['password']); //.... $query="SELECT * FROM mytable WHERE (name='$name' AND pass='$password' AND Activation IS NULL)"; $result=mysql_query($query) or die(mysql_error()); if(!$result){} else {

我尝试将登录表单中提交的密码与数据库中存储的加密密码进行比较,如下所示:

$password=crypt($_POST['password']);
//....
$query="SELECT * FROM mytable WHERE (name='$name' AND pass='$password' AND Activation IS NULL)";
$result=mysql_query($query) or die(mysql_error());
if(!$result){}
else
{
   $numRow=mysql_num_rows($result) or die ("ROW QUERY FAILS".mysql_error());
   if ($numRow != 0)
   {

   }
   else
   {
      //ERROR msg is called here
   }
}
调用错误消息时,我的sql语句是否不正确


编辑:我已经检查了所有sql_查询,它工作正常,只有第二个(嵌套的)else子句显示为错误,即我没有激活我的帐户或我的密码不正确。我检查了提交表单中的密码输出,在使用crypt函数加密后,它与数据库中的密码不同。这就是随机性的特征(定时和种子)?我不知道基础编码/解码,我工作在一个64位的机器,但我不认为这提供任何相关的,我可能需要考虑。不过我需要更多的提示来完成这项工作。再次感谢您的建议。

问题是您将在0行结果中死去。 检查此代码:

0 or die("ERROR");
这将具有与具有0行的结果集相同的行为


您应该将
或die
移动到
mysql\u查询
行。

可能您必须对密码进行编码-您好,您能解释一下mysql\u num\u rows()之后的
的用法吗?我很难理解它为什么在那里请不要这样做。我会让我的密码
成为某种东西';下拉表mytable--
并享受它。
$result=mysql\u query($query)或die(mysql\u error())
@Borealid当密码已经通过
crypt
运行时,您会怎么做
crypt
输出甚至不包含
”的。是的,我这样做了,但在该行代码中没有生成错误。如果使用mysql函数对密码进行编码,则查询应包含password()函数。也许是这样?没有理由使用
PASSWORD()
@user1151711,如果执行查询时未选择任何内容,也未获得任何输出,则表示表中的内容与您要查找的内容不匹配。你怎么能确定你试图获取的行是否存在?是的,如果你使用crypt,没有理由使用密码(但不是在原来的帖子中,呵呵)。无论如何,Kristian说得有道理,如果用户和密码与登录不匹配,则else不应该是一个错误。(无论如何,请卸下num行中的模具。)