这个php登录代码有啥问题? [关闭]

Posted

技术标签:

【中文标题】这个php登录代码有啥问题? [关闭]【英文标题】:What's wrong with this php Login Code? [closed]这个php登录代码有什么问题? [关闭] 【发布时间】:2013-06-23 19:24:52 【问题描述】:

无论我做什么,我总是得到“错误的用户名或密码” 已经尝试了不同类型的解决方案,但没有任何帮助。

//header('Access-Control-Allow-Origin: *');

include('db.php');

// username and password sent from form
$myusername=$_POST['username'];
$mypassword=$_POST['password'];

// To protect mysql injection 
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT * FROM users WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row

$count=mysql_num_rows($result);

// If result matched $myusername and $mypassword, table row must be 1 row

if($count==1)


        echo '"type":"1",'.
            '"item": "Logged In"'.
            '';

else 
echo '"type": "0",'.
            '"item":"Wrong Username or Password"'.
            '';

有人可以帮忙吗? 提前谢谢你!

【问题讨论】:

我认为问题是你没有代码。 代码被隐藏,因为它的格式不正确 您没有与该查询完全匹配的 1 行。尝试回显查询并手动运行它。 你们都很有趣,谢谢你们的笑话。它没有让我输入代码,并且在尝试编辑时我已经为这个问题得到了 -5... 尝试回显查询,然后放入您的 SQL 客户端,查看是否有与查询匹配的行。但是,是否可能有多个匹配项,因此您的检查 $count==1 无效,因为您有 2 个或更多匹配项? 【参考方案1】:

stripslashes() 的一个使用示例是当 PHP 指令 magic_quotes_gpc 处于打开状态时(在 PHP 5.4 之前它默认处于打开状态),并且您没有将此数据插入需要转义的位置(例如数据库)。例如,如果您只是直接从 html 表单输出数据。

mysql_real_escape_string — 转义字符串中的特殊字符以用于 SQL 语句。

根据我的观点 mysql_real_escape_string,此函数也会从您的密码和用户名中转义特殊字符。每次在用户名或密码中发现任何特殊字符时,都会将其删除。并且总是给出行数为零...

【讨论】:

【参考方案2】:

这可能有多种原因。

    您的用户名或密码不正确(值得检查此类错误) 您的数据库连接有问题! (启用错误报告和调试) 您发布的数据有问题。当您在不知不觉中使用 GET 而不是 POST 时,有时会发生这种情况。 或者,您的密码或用户名包含已转义且未正确匹配的字符串!

编辑

给你一些其他的建议!始终使用 mysql 准备好的语句以获得最大的安全性,并且不推荐使用 mysql_ 的函数,而是使用 mysqli_ 替代方案。您对stripslashes 的使用表明您正在使用magic_quotes_,这再次被劝阻! :)

【讨论】:

是的,我没有使用 $_REQUEST,而是使用了 $_POST。谢谢你:) :) 祝你的代码好运! @RotemShukron - 如果这是解决方案,那么您还没有配置 PHP 来显示错误消息。这是您在更进一步之前需要解决的问题;没有错误消息的帮助是不可能编码的。这是brief explanation。【参考方案3】:

我建议您查看您使用的函数的相应手册页,并注意返回值。例如,如果您转到 mysql_query() 并滚动过去 «此扩展自 PHP 5.5.0 起已弃用,并将在未来删除» 警告,您将看到: p>

对于SELECT [...] 和其他返回结果集的语句, mysql_query() 成功返回资源,FALSE 出错。

与mysql_num_rows()类似:

成功时结果集中的行数或失败时FALSE 中的行数。

一切都表明其中一个正在返回FALSE

依靠结果集计数来确定是否有匹配项是一种有风险的技术(它是否可以工作取决于您的设置)。运行COUNT(*) 或者只是尝试获取第一行会更加坚如磐石。

一些随机结论:

不要忽略错误检查。 如果我是你,我不会浪费时间学习过时的扩展。 stripslashes() 建议在您的服务器中启用 magic_quotes。如果是这种情况,请在损坏的数据涌入之前将其禁用。

【讨论】:

以上是关于这个php登录代码有啥问题? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP 和 Curl 登录 Google,Cookie 已关闭?

这个控制器代码有啥作用? [关闭]

PHP:编写严格的代码有啥好处吗?

为啥 strpos 有用/使用,它在这个例子中有啥好处? [关闭]

这段代码有啥问题? [关闭]

有啥方法可以检查是不是有人使用 Javascript/PHP 关闭了浏览器? [关闭]