Php 缺少密码检查
我正在使用下面的代码,它检查空字段并验证电子邮件,但即使密码正确,它也不会登录。密码已插入md5保护,下面是代码 PHP: 使用ini_set函数后,我看到了错误,我收到了此消息,但不确定它的含义:Php 缺少密码检查,php,mysql,database,md5,verification,Php,Mysql,Database,Md5,Verification,我正在使用下面的代码,它检查空字段并验证电子邮件,但即使密码正确,它也不会登录。密码已插入md5保护,下面是代码 PHP: 使用ini_set函数后,我看到了错误,我收到了此消息,但不确定它的含义: There are the lines where the errors are at: if ($pass != $info['password']) 这条线呢 if ($_POST['password'] !
There are the lines where the errors are at:
if ($pass != $info['password'])
这条线呢
if ($_POST['password'] != $info['password']) {
我能看到的一件事是,在发布的密码(非md5版本)上使用
stripslashes
,但在md5版本上使用它来存储密码
您实际上不需要在数据库中的密码上使用stripslashes
,因为任何密码都不应该以slashed开头
如果您更改,会发生什么情况:
$_POST['password'] = stripslashes($_POST['password']);
$info['password'] = stripslashes($info['password']);
$_POST['password'] = md5($_POST['password']);
致:
不久前,您用完全不同的代码问了一个类似的问题,所以我假设现在更多的是数据库问题
您的密码字段是否允许md5哈希包含32个字符?太短的密码字段将截断md5哈希,因此登录总是失败。您试图使用
$info['password']
访问数据库字段,但数据库字段实际上是password
大写字母p
您正在调用mysql\u escape\u string
将数据存储在数据库中,并且调用的stripsalas
会在提交的登录表单上进行删除。也许他们正在对密码做不同的事情。还有几件事需要考虑:
- 如果您需要输入一个密码将其存储在数据库中,则不需要调用
或stripslashes
。它已被转换为仅字母数字字符mysql\u escape\u string
已弃用李>mysql\u escape\u字符串
- 与其转义email字段,不如验证它的格式
插入新注册后,手动md5使用的密码,然后对照数据库中存储的密码检查该值。你可能会发现它们是不同的 我解决了这个问题,如果您注意到在查询中它显示SELECT*,而我尝试选择电子邮件、密码。谢谢。我做了改变,我仍然无法通过。嘿,是的,我正在使用另一个代码,所以在这里重新发布。密码maxlength设置为50。db中的密码字段设置为varchar(40)。信息['password']的用途是什么?这是你的密码。。。但在我看来,$info['password']是数据库中存储的密码的散列,用于比较against@AAA你能粘贴你用来在数据库中存储注册的代码吗?谢谢JMC。我进行了测试,回显了输入的密码和数据库中的密码,它们与md5匹配。我还在努力寻找它。无论如何,谢谢你。如果你能在这方面帮助我,我将不胜感激。我得出的结论是,问题可能与$info['password']有关,我重复了它,但没有显示任何内容……在屏幕上打印错误后,我收到以下消息:注意:未定义的索引:第103行/var/www/domain.com/htdocs/login.php中的密码注意:使用未定义的常量密码-第103行/var/www/domain.com/htdocs/login.php中假定的“密码”11@AAA数据库字段大写为“密码”您正在使用“$info['password']”访问它!我不知道为什么,但它仍然工作,而不必改变它。哈哈,疯狂的代码。那根本不应该有任何区别。真的。但我不知道它为什么起作用,我不记得还有什么改变。
if ($_POST['password'] != $info['password']) {
$_POST['password'] = stripslashes($_POST['password']);
$info['password'] = stripslashes($info['password']);
$_POST['password'] = md5($_POST['password']);
$_POST['password'] = md5($_POST['password']);
$_POST['password'] = stripslashes($_POST['password']);
$info['password'] = stripslashes($info['password']);