2011-07-23 117 views
1

我試圖做的是通過驗證cookie(稱爲「標識」)來檢查用戶的Id。

這就是我的代碼:

if(!$noCookie) { 

$sql = "SELECT * FROM `". TABLE_PREFIX ."_logged` WHERE `logged_cookie` = '". $usersCookie ."' LIMIT 1"; 
$query = mysql_query($sql) or die(mysql_error()); 
if (mysql_num_rows($query) <= 0) { 
    echo 'yes cookie'; 

    $row = mysql_fetch_array($query) or die(mysql_error()); 
    print_r($row); 

    while ($row=mysql_fetch_array($query)) { 
     echo $usersId = $row["logged_user_id"]; 
    } 
} else { 
    echo 'no cookie'; 
} 
} 

什麼happends是,如果用戶的Cookie是同一個喜歡在餐桌上, 它將返回用戶的ID。

因此,即使我試圖做,IF說「是餅乾」,但在它不做任何事情! 和它不給我一個錯誤。

+1

請閱讀'mysql_fetch_array'更好地瞭解該函數的作用是什麼手工錄入:http://php.net/manual/en/function.mysql-fetch-array.php - 並牢記:一旦取出一行,它會跳到下一行,或者如果沒有更多行,則返回false。 – hakre

回答

1

由於沒有行,所以沒有任何提取。

if (mysql_num_rows($query) <= 0) { 

這是> 0

1

mysql_num_rows($query)評估爲0或更低時,您僅運行mysql_fetch_array;即沒有行

也許你的意思是:

if (mysql_num_rows($query) > 0) { // <----- 
    echo 'yes cookie'; 

    $row = mysql_fetch_array($query) or die(mysql_error()); 
    // ... 
} 
else { 
    echo 'no cookie'; 
} 

另外請注意,你在兩個不同的地方,這通常是不對的運行mysql_fetch_array。您的while循環將不包含第一個結果行,因爲您在循環之前已經執行了一次mysql_fetch_array

1
if(!$noCookie) { 

$sql = "SELECT * FROM `". TABLE_PREFIX ."_logged` WHERE `logged_cookie` = '". $usersCookie ."' LIMIT 1"; 
$query = mysql_query($sql) or die(mysql_error()); 
if (mysql_num_rows($query) > 0) { 
    echo 'yes cookie'; 

    $row = mysql_fetch_array($query) or die(mysql_error()); 
    foreach ($row as $r) 
     echo $r["logged_user_id"]; 
} else { 
    echo 'no cookie'; 
} 
} 
+0

謝謝大家,我不知道它是<=。 – Elron