2013-03-02 121 views
0

谁能告诉我为什么这个简单的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> 
+0

你尝试在phpmyadmin等? – kennypu 2013-03-02 03:27:19

+0

我做到了。密码和用户名在表格中,但是此代码不检索它。 – 2013-03-02 03:28:45

+0

你确定这些值在'$ _POST'数组中吗? – prodigitalson 2013-03-02 03:29:10

回答

4

尝试LIMIT 1 SELECT,以确保你只有1行。

+0

工作正常!谢谢! – 2013-03-02 03:39:06

+0

原来我有重复的条目。 – 2013-03-02 03:40:18

+0

if($ count == 1)//检查给定用户名和密码的单个记录。 您的数据库数据可能包含重复的用户名或密码,该用户名或密码会返回大于1的结果。 尝试过滤并使用户名唯一,以便不重复帐户并加密您的密码。 :) – Snippet 2013-03-02 03:43:26

1

有一些“坏主意”,在你的代码:

  1. 请勿用于新项目mysql_ *。这已经过时了。切换到mysqli_ * http://php.net/manual/en/book.mysqli.php
  2. 通过用户名和密码选择并不总是一个好主意。在大多数情况下,如果密码正确,最好搜索用户名并检查。随着准备的陈述,你会得到像这样的东西

    SELECT * FROM accounts WHERE username =?

    在下一步中,您可以检查,如果您的密码与数据库中的密码相同, G。用if语句$ _POST ['password'] == $ dataFromDB ['password']。

  3. 当前您正在以纯文本格式保存密码。这是一个非常糟糕的主意。看看bcrypt。请参阅How do you use bcrypt for hashing passwords in PHP?
  4. session_register已过期。使用类似

    $ _SESSION [ '用户名'] = $ dataFromDB [ '用户名']

依我之见,问题是在(不存在)的限制。无论如何,希望这些提示能帮助你。

+0

感谢您提供这方面的信息! – 2013-03-02 03:44:38