2011-07-23 68 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