PHP/MySQL登录不工作
谁能告诉我为什么这个简单的PHP/MySQL登录代码总是显示“错误的用户名或密码”,即使我输入了正确的用户名/密码组合?我花了很多时间试图弄清楚这一点。PHP/MySQL登录不工作
<?php
// Database Connection
mysql_connect("IP", "charlesfries", "Password") or die(mysql_error());
mysql_select_db("charlesfriessdatabase") or die(mysql_error());
// Variables
$username = $_POST["username"];
$password = $_POST["password"];
$result = mysql_query("SELECT * FROM accounts WHERE username = '$username' and password = '$password'");
// Success
$count = mysql_num_rows($result);
if ($count == 1) // Checks for Single Record of Given Username & Password
{
session_register("username"); // Registers Username Key in Session
session_register("password"); // Registers Password Key in Session
header("location:http://charliefries.tk/");
}
// Failure
else
{
echo "Wrong Username or Password";
}
?>
此外,请不要告诉我我的代码是可注射的。我知道它是。
这里是我的表单代码:
<form action="signinprocess.php" method="post"> <!-- Sign In Process -->
Username: <input type="text" name="username" style="width:150">
<br />
Password: <input type="password" name="password" style="width:153">
<br />
<br />
<input type="submit" value="Sign In">
</form>
尝试LIMIT 1 SELECT,以确保你只有1行。
工作正常!谢谢! – 2013-03-02 03:39:06
原来我有重复的条目。 – 2013-03-02 03:40:18
if($ count == 1)//检查给定用户名和密码的单个记录。 您的数据库数据可能包含重复的用户名或密码,该用户名或密码会返回大于1的结果。 尝试过滤并使用户名唯一,以便不重复帐户并加密您的密码。 :) – Snippet 2013-03-02 03:43:26
有一些“坏主意”,在你的代码:
- 请勿用于新项目mysql_ *。这已经过时了。切换到mysqli_ * http://php.net/manual/en/book.mysqli.php
-
通过用户名和密码选择并不总是一个好主意。在大多数情况下,如果密码正确,最好搜索用户名并检查。随着准备的陈述,你会得到像这样的东西
SELECT * FROM
accounts
WHEREusername
=?在下一步中,您可以检查,如果您的密码与数据库中的密码相同, G。用if语句$ _POST ['password'] == $ dataFromDB ['password']。
- 当前您正在以纯文本格式保存密码。这是一个非常糟糕的主意。看看bcrypt。请参阅How do you use bcrypt for hashing passwords in PHP?
-
session_register已过期。使用类似
$ _SESSION [ '用户名'] = $ dataFromDB [ '用户名']
依我之见,问题是在(不存在)的限制。无论如何,希望这些提示能帮助你。
感谢您提供这方面的信息! – 2013-03-02 03:44:38
你尝试在phpmyadmin等? – kennypu 2013-03-02 03:27:19
我做到了。密码和用户名在表格中,但是此代码不检索它。 – 2013-03-02 03:28:45
你确定这些值在'$ _POST'数组中吗? – prodigitalson 2013-03-02 03:29:10