Доброго дня, уважаемые форумчане. Имеется код по определению Спойлер: поисковых роботов. PHP: /* Функция SpiderDetect - принимает $_SERVER['HTTP_USER_AGENT'] и возвращает имя кравлера поисковой системы или false. */ function SpiderDetect($USER_AGENT) { $engines = array( array('Aport', 'Aport robot'), array('Google', 'Google'), array('msnbot', 'MSN'), array('Rambler', 'Rambler'), array('Yahoo', 'Yahoo'), array('AbachoBOT', 'AbachoBOT'), array('accoona', 'Accoona'), array('AcoiRobot', 'AcoiRobot'), array('ASPSeek', 'ASPSeek'), array('CrocCrawler', 'CrocCrawler'), array('Dumbot', 'Dumbot'), array('FAST-WebCrawler', 'FAST-WebCrawler'), array('GeonaBot', 'GeonaBot'), array('Gigabot', 'Gigabot'), array('Lycos', 'Lycos spider'), array('MSRBOT', 'MSRBOT'), array('Scooter', 'Altavista robot'), array('AltaVista', 'Altavista robot'), array('WebAlta', 'WebAlta'), array('IDBot', 'ID-Search Bot'), array('eStyle', 'eStyle Bot'), array('Mail.Ru', 'Mail.Ru Bot'), array('Scrubby', 'Scrubby robot'), array('Yandex', 'Yandex'), array('YaDirectBot', 'Yandex Direct') ); foreach ($engines as $engine) { if (strstr($USER_AGENT, $engine[0])) { return($engine[1]); } } return (false); } // Пример использования: $detect = SpiderDetect($_SERVER['HTTP_USER_AGENT']); if ($detect) { // Это бот, его имя - в перменной $detect. } else { // Это посетитель. } 1)Задача заключается в следующем, а именно: как сделать так, чтобы в переменной, к примеру $bots, подсчитывалось количество переменной $detect. Переменная заносится в БД по INSERT INTO users_online (visitor,lastvisit,user,botname,urlpage) VALUES('$uo_ip', unix_timestamp(), '$nameus','$detect','$urlpage')"; Если есть возможность или решение как посчитать через базу, буду благодарен.
У тебя есть в базе данных записи, ты их сам туда добавляешь. Теперь тебе надо наоборот, достать оттуда данные. А именно количество строк, удовлетворяющий условию (например, условие: бот == гугл). Как сделать запрос с выборкой знаешь?
Вот этого как раз и не могу сделать. Нужно подсчитать общее количество (без названия) и запихнуть в $bots.
Давай так, я тебе подсказываю, но делаешь ты сам. Ты же научиться хочешь? Мы ведь в свойственном разделе. Весь код за тебя могут написать в разделе "Сделайте за меня" бесплатно, но это если кто-то захочет делать просто так, либо в разделе "Free-lance" за деньги. Но если всё-таки захочешь сделать сам, подсказками я нашпигую. Сделать очень несложно.
Простейший да, к примеру такай PHP: <? $uo_query = "SELECT botname FROM users_online WHERE botname = '$detect'"; $uo_result = mysql_query($uo_query); $allsqls++; $uo_query = "SELECT count(botname) FROM users_online WHERE botname = '$detect'"; $uo_result = mysql_query($uo_query); $uo_count = mysql_fetch_row($uo_result); echo $uo_count[0]; ?> или еще проще ? Вот тут я не могу понять почему считаются строки , а не названия ботов ?
Во, так ты уже всё написал. Ну, почти. Первым запросом ты делаешь что-то странное. Ищешь в строках ботнэйм, где ботнэйм == детект. Это в принципе странно) Пока не понимаю, чего ты хотел этим добиться. А вот твой второй блок кода как раз выводит количество записей в бд, где ботнэйм == детект. Т.е. в echo$uo_count[0]; у тебя число строк, которое подходит по условию. Разве тебе не это надо было?
Спасибо за внимание, я по ошибке заношу имя в БД вместе с теми, кто зашел онлайн. Вот в этом и ошибка. Разделю базы и должно получиться. По результатам, отпишусь т.к еще учусь и многого не понимаю.
Разделить базы не получается, если у Вас есть, уважаемые, какие нибудь предложения, как можно вытащить из этого INSERT INTO users_online (visitor,lastvisit,user,botname,urlpage) VALUES('$uo_ip', unix_timestamp(), '$nameus','$detect','$urlpage')"; результат botname без подсчета строк в Спойлер: users_online PHP: <? $uo_query = "SELECT botname FROM users_online WHERE botname = '$detect'"; $uo_result = mysql_query($uo_query); $allsqls++; $uo_query = "SELECT count(botname) FROM users_online WHERE botname = '$detect'"; $uo_result = mysql_query($uo_query); $uo_count = mysql_fetch_row($uo_result); echo $uo_count[0]; ?> Помогите советом.
Ну, я так и думал. Значит давай начнём сначала: я не понял твою задачу. Распиши конкретно,можешь даже нарисовать, как хочешь видеть результат. Я, видимо, подтупливаю и недогоняю.
Проблема в том, что в БД users_online идет запись и пользователей и ботов. Так вот простым подсчетом строчек определить сколько ботов на сайте не получится. Нужно другое решение. Есть мысли по этому поводу ?
Погоди, у тебя же в $detect имя бота. Значит в колонку botname добавляется имя бота. Значит у юзеров эта колонка должна быть пустой. Я не прав?
SELECT COUNT(*) `cnt` FROM `users_online` WHERE `botname` IS NOT NULL или как там у тебя спроектировано. `botname` != ''?
PHP: <? $uo_query = "SELECT count(botname) FROM users_online WHERE botname = '$detect'"; $uo_result = mysql_query($uo_query); $uo_count = mysql_fetch_row($uo_result); echo $uo_count[0]; ?> Вместо верхней строчки вставить вот эту и вот так: $uo_query = "SELECT COUNT(*) `cnt` FROM `users_online` WHERE `botname` IS NOT NULL `botname` != ''
Это было дано два варианта условия, из которых ты сам выберешь, так как я не знаю с архитектуры твоей базы.