2013-01-14 39 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更好。它更快,更穩定。

相關問題