2011-05-10 62 views
0

我从本地计算机托管网站(在Mac上使用MAMP Pro),并且需要将托管切换到另一台本地Mac。我已经复制了我的网站和MySQL表的所有文件,并检查了服务器和MySQL运行正常。一切似乎都没有问题,只是登录系统在我尝试登录时返回“无效用户”,即使我输入了正确的用户信息(我尝试了几个用户只是为了确定)。Log.php返回来自MySQL数据库的'无效用户'

处理该登录的log.php看起来是这样的:

<? 
session_name("MyLogin"); 
session_start(); 

if($_GET['action'] == "login") { 
$conn = mysql_connect("localhost","root","password"); // your MySQL connection data 
$db = mysql_select_db("nick"); //put your database name in here 
$name = $_POST['user']; 
$q_user = mysql_query("SELECT * FROM USERS WHERE login='$name'"); 

if(mysql_num_rows($q_user) == 1) { 

$query = mysql_query("SELECT * FROM USERS WHERE login='$name'"); 
$data = mysql_fetch_array($query); 
if($_POST['pwd'] == $data['password']) { 
$_SESSION["name"] = $name; 
header("Location: http://monthlymixup.com/may.php"); // success page. put the URL you want 
exit; 
} else { 
header("Location: login.php?login=failed&cause=".urlencode('Wrong Password')); 
exit; 
} 
} else { 
header("Location: login.php?login=failed&cause=".urlencode('Invalid User')); 
exit; 
} 
} 

// if the session is not registered 
if(session_is_registered("name") == false) { 
header("Location: login.php"); 
} 

?> 

我暂时在上面的代码中删除密码。

我想知道我可以采取什么措施来解决这个问题,并将不胜感激任何帮助。

感谢,

尼克

+0

这是不相关的,但绝对必须在$ name使用mysql_real_escape_string()之前在任何SQL查询中使用它!如果不这样做,通常会让黑客接管您的网站。有关更多信息,请参阅http://php.net/mysql_real_escape_string。 – 2011-05-10 23:34:29

回答

1

,当我遇到这个问题的一些常用技术。

  1. 输出生成的SQL并手动测试 - echo $query;
  2. 看看mysql_error()输出任何东西后,你运行你的查询。
  3. 对您的数据对象使用var_dump()print_r()以确保它们符合预期。
  4. 注释掉你的重定向和exit()行,这样你就可以确定脚本在哪里破坏。

修复或回复上面确定的任何内容。

+0

谢谢杰森。说到php,我有点慢,对此感到遗憾。到目前为止,我已经查看了我的mysql_error_log,当我尝试运行查询时什么也没有显示。我不知道在哪里包含echo $ query;我试图将它包含在log.php中,并且没有任何不同显示出来 – Nick 2011-05-10 23:21:50

+1

将'echo'选择*从用户名'登录名''$ name'“;'紧接在'$ name'赋值之后。确保这个SQL运行。 – 2011-05-10 23:38:14

+0

这会返回SELECT * FROM USERS WHERE login ='' – Nick 2011-05-11 08:13:16

0

你的代码做一个查询来查找与给定用户名的用户,然后检查是否与该用户名的行数正好是1

,你可以看到“无效的用户”错误的唯一方法是如果有0个用户使用该用户名或多个用户使用该用户名。

查看表格的内容并检查这些是哪种情况(我推荐使用http://sequelpro.com查看Mac上的数据库内容)。你也可以使用sequel pro来测试你的查询。

+0

谢谢。我有续集亲安装。我可以确认在数据库中有70个用户,而且没有重复的名称。我认为问题在于连接到数据库,但不知道如何测试它。我可以连接到数据库,在数据库表的内容的网页上构建一个表,使用完全相同的用户名,密码等。 – Nick 2011-05-11 08:23:17

+0

好吧,很酷。这对你而言并不是正确的答案。 – 2011-05-11 09:21:49