2013-01-14 70 views
0

我正在运行下面的代码,但它给我提供了以下错误。我读过几篇关于SO的文章,但仍然没有用。 我得到的错误是:mysql_fetch_assoc()PHP中的错误

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/xyz/public_html/13/beta/signup.php on line 49 
Warning: Cannot modify header information - headers already sent by (output started at /home/xyz/public_html/13/beta/signup.php:49) in /home/xyz/public_html/13/beta/signup.php on line 69 

PHP脚本:(我已标记线49 & 69

if(isset($_POST['submit'])&&$_POST['submit']=='Login') 
{ 
    $err = array(); 
    if(!$_POST['username'] || !$_POST['pass']) 
     $err[] = 'All the fields must be filled in!'; 

    if(!count($err)) 
    { 
     $_POST['username'] = mysql_real_escape_string($_POST['username']); 
     $_POST['pass'] = mysql_real_escape_string($_POST['pass']); 
     $_POST['remember'] = (int)$_POST['remember']; 

     $row = mysql_fetch_assoc(mysql_query("SELECT id,user,email,clg FROM users WHERE user='{$_POST['username']}' AND pass='".md5($_POST['pass'])."'"));-->line 49 

     if($row['user']) 
     { 

      $_SESSION['user']=$row['user']; 
      $_SESSION['id'] = $row['id']; 
      $_SESSION['clg'] = $row['clg']; 
      $_SESSION['email'] = $row['email']; 
      $_SESSION['remember'] = $_POST['remember']; 
      setcookie('tcookie',$_POST['remember']); 
      header("Location: index.php"); 
      exit; 
     } 
     else $err[]='Wrong username and/or password!'; 
    } 

    if($err) 
    $_SESSION['msg']['login-err'] = implode('<br />',$err); 

    header("Location: signup.php");-->line 69 
    exit; 
} 
+0

不要'md5()'已经通过'mysql_real_escape_string()'的东西。 – MrCode

回答

5

mysql_query函数返回一个错误,而不是结果。尝试:

$res = mysql_query("SELECT id,user,email,clg FROM users WHERE user='{$_POST['username']}' AND pass='".md5($_POST['pass'])."'"); 
if ($res === false) { 
    echo mysql_error(); 
    die; 
} 
$row = mysql_fetch_assoc($res); 

这将帮助您获取错误信息。

一旦错误消失,您可能会发现'headers already sent error'也会消失,这是由于某些内容已经打印到输出中(可能是错误消息)。


更新:对于你的“无数据库选择了”错误,你需要使用mysql_query()前使用mysql_select_db($databasename);。否则,mysql不知道你试图查询哪个数据库。另外,您可能想要考虑使用PDO,这是另一种访问MySQL数据库的方式,它更安全并且易于使用(IMO)。

+0

我得到一个'没有数据库选择'的错误。谢谢。 – xan

+0

您需要在使用mysql_query()之前添加'mysql_select_db($ databasename);'。 –

0

尝试冒号后删除协商一致69.

+1

标题名称和值之间的空格没有任何错误。 – MrCode

1

选择是否正确执行的mysql_connect,并有做的mysql_query前MySQL服务器的有效连接。 顺便说一句,Fabian Tamp是正确的关于PDO。另外mysqli扩展比mysql更好。它更快,更稳定。

相关问题