Попытка получить свойство не объекта

Этот скрипт отлично работает. Я называю это в своих сценариях. Но если пользователь, который НЕ запрещен, попадает на сайт, он получает:

Notice: Trying to get property of non-object in index.php on line 20 

Функция:

 // Check if conecting user is banned. If ban has expired delete row. function check_bans() { // IP address $user_ip = $_SERVER['REMOTE_ADDR']; $query = mysql_query("SELECT ip, expire FROM bans WHERE ip = '$user_ip'"); $row = mysql_fetch_object($query); $expire = $row->expire ? date('M d YH:i', $row->expire) : 'Never'; // Did we find a match? if (mysql_num_rows($query)) { // Has this ban expired? Then delete and let user inside. if ($row->expire != '' && $row->expire <= time()) mysql_query("DELETE FROM bans WHERE ip = '$user_ip'") or die (mysql_error()); else die("<h1 align=\"center\" style=\"color:maroon\">You have been IP banished. Ban will be lifted: $expire</h1>"); } } 

Поскольку, если пользователь не был запрещен, запрос дает нулевые результаты, а присваивание $row присваивается falseне объект). Таким образом, эта ошибка возникает, потому что вы пытаетесь вызвать метод на логическом уровне. Пытаться:

 function check_bans() { // IP address $user_ip = $_SERVER['REMOTE_ADDR']; $query = mysql_query("SELECT ip, expire FROM bans WHERE ip = '$user_ip'"); $row = mysql_fetch_object($query); if($row) { $expire = $row->expire ? date('M d YH:i', $row->expire) : 'Never'; // Has this ban expired? Then delete and let user inside. if ($row->expire != '' && $row->expire <= time()) mysql_query("DELETE FROM bans WHERE ip = '$user_ip'") or die (mysql_error()); else die("<h1 align=\"center\" style=\"color:maroon\">You have been IP banished. Ban will be lifted: $expire</h1>"); } } 

Если нет соответствующей строки, то $row будет FALSE. Вы должны добавить if ($row) вокруг всего после mysql_fetch_object .