За последние 24 часа нас посетили 21987 программистов и 1623 робота. Сейчас ищут 2113 программистов ...

Нужна помощь в подсчете массива.

Тема в разделе "Сделайте за меня", создана пользователем Sinfulman, 12 авг 2016.

  1. Sinfulman

    Sinfulman Новичок

    С нами с:
    12 авг 2016
    Сообщения:
    17
    Симпатии:
    1
    Доброго дня, уважаемые форумчане. Имеется код по определению
    PHP:
    1. /*
    2. Функция SpiderDetect - принимает $_SERVER['HTTP_USER_AGENT'] и возвращает имя кравлера поисковой системы или false.
    3. */
    4.  
    5. function SpiderDetect($USER_AGENT)
    6. {
    7. $engines = array(
    8. array('Aport', 'Aport robot'),
    9. array('Google', 'Google'),
    10. array('msnbot', 'MSN'),
    11. array('Rambler', 'Rambler'),
    12. array('Yahoo', 'Yahoo'),
    13. array('AbachoBOT', 'AbachoBOT'),
    14. array('accoona', 'Accoona'),
    15. array('AcoiRobot', 'AcoiRobot'),
    16. array('ASPSeek', 'ASPSeek'),
    17. array('CrocCrawler', 'CrocCrawler'),
    18. array('Dumbot', 'Dumbot'),
    19. array('FAST-WebCrawler', 'FAST-WebCrawler'),
    20. array('GeonaBot', 'GeonaBot'),
    21. array('Gigabot', 'Gigabot'),
    22. array('Lycos', 'Lycos spider'),
    23. array('MSRBOT', 'MSRBOT'),
    24. array('Scooter', 'Altavista robot'),
    25. array('AltaVista', 'Altavista robot'),
    26. array('WebAlta', 'WebAlta'),
    27. array('IDBot', 'ID-Search Bot'),
    28. array('eStyle', 'eStyle Bot'),
    29. array('Mail.Ru', 'Mail.Ru Bot'),
    30. array('Scrubby', 'Scrubby robot'),
    31. array('Yandex', 'Yandex'),
    32. array('YaDirectBot', 'Yandex Direct')
    33. );
    34.  
    35. foreach ($engines as $engine)
    36. {
    37. if (strstr($USER_AGENT, $engine[0]))
    38. {
    39. return($engine[1]);
    40. }
    41. }
    42.  
    43. return (false);
    44. }
    45.  
    46. // Пример использования:
    47.  
    48. $detect = SpiderDetect($_SERVER['HTTP_USER_AGENT']);
    49. if ($detect)
    50. {
    51.                      // Это бот, его имя - в перменной $detect.
    52. }
    53. else
    54. {
    55. // Это посетитель.
    56. }
    1)Задача заключается в следующем, а именно: как сделать так, чтобы в переменной, к примеру $bots, подсчитывалось количество переменной $detect.
    Переменная заносится в БД по INSERT INTO users_online (visitor,lastvisit,user,botname,urlpage) VALUES('$uo_ip', unix_timestamp(), '$nameus','$detect','$urlpage')"; Если есть возможность или решение как посчитать через базу, буду благодарен.
     
    #1 Sinfulman, 12 авг 2016
    Последнее редактирование модератором: 12 авг 2016
  2. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    если я правильно понял, тебе нужна функция COUNT в sql
     
  3. Sinfulman

    Sinfulman Новичок

    С нами с:
    12 авг 2016
    Сообщения:
    17
    Симпатии:
    1
    Как ее прикрутить к данному скрипту ?
     
  4. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    У тебя есть в базе данных записи, ты их сам туда добавляешь. Теперь тебе надо наоборот, достать оттуда данные. А именно количество строк, удовлетворяющий условию (например, условие: бот == гугл).
    Как сделать запрос с выборкой знаешь?
     
  5. Sinfulman

    Sinfulman Новичок

    С нами с:
    12 авг 2016
    Сообщения:
    17
    Симпатии:
    1
    Вот этого как раз и не могу сделать. Нужно подсчитать общее количество (без названия) и запихнуть в $bots.
     
  6. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Давай так, я тебе подсказываю, но делаешь ты сам. Ты же научиться хочешь? Мы ведь в свойственном разделе.
    Весь код за тебя могут написать в разделе "Сделайте за меня" бесплатно, но это если кто-то захочет делать просто так, либо в разделе "Free-lance" за деньги.

    Но если всё-таки захочешь сделать сам, подсказками я нашпигую. Сделать очень несложно.
     
  7. Sinfulman

    Sinfulman Новичок

    С нами с:
    12 авг 2016
    Сообщения:
    17
    Симпатии:
    1
    К подсказкам готов. Это и имелось в виду, сам хочу научиться.
     
  8. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Отлично. С базами данных работал? Простейший запрос написать можешь?
     
  9. Sinfulman

    Sinfulman Новичок

    С нами с:
    12 авг 2016
    Сообщения:
    17
    Симпатии:
    1
    Простейший да, к примеру такай
    PHP:
    1. <?
    2.  
    3.  
    4. $uo_query = "SELECT botname FROM users_online WHERE botname = '$detect'";
    5. $uo_result = mysql_query($uo_query); $allsqls++;
    6.  
    7. $uo_query = "SELECT count(botname) FROM users_online WHERE botname = '$detect'";
    8. $uo_result = mysql_query($uo_query);
    9. $uo_count = mysql_fetch_row($uo_result);
    10.  
    11. echo $uo_count[0];
    12.  
    13. ?>
    или еще проще ?
    Вот тут я не могу понять почему считаются строки , а не названия ботов ?
     
  10. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Во, так ты уже всё написал.
    Ну, почти. Первым запросом ты делаешь что-то странное. Ищешь в строках ботнэйм, где ботнэйм == детект. Это в принципе странно) Пока не понимаю, чего ты хотел этим добиться.

    А вот твой второй блок кода как раз выводит количество записей в бд, где ботнэйм == детект. Т.е. в echo$uo_count[0]; у тебя число строк, которое подходит по условию. Разве тебе не это надо было?
     
  11. Sinfulman

    Sinfulman Новичок

    С нами с:
    12 авг 2016
    Сообщения:
    17
    Симпатии:
    1
    Так то оно так. Но считает строчку без имени в ней, то есть пустую.
     
  12. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Сейчас не понял твоего сообщения
     
  13. Sinfulman

    Sinfulman Новичок

    С нами с:
    12 авг 2016
    Сообщения:
    17
    Симпатии:
    1
    Спасибо за внимание, я по ошибке заношу имя в БД вместе с теми, кто зашел онлайн. Вот в этом и ошибка. Разделю базы и должно получиться. По результатам, отпишусь т.к еще учусь и многого не понимаю.
     
    mr.akv нравится это.
  14. Sinfulman

    Sinfulman Новичок

    С нами с:
    12 авг 2016
    Сообщения:
    17
    Симпатии:
    1
    Разделить базы не получается, если у Вас есть, уважаемые, какие нибудь предложения, как можно вытащить из этого INSERT INTO users_online (visitor,lastvisit,user,botname,urlpage) VALUES('$uo_ip', unix_timestamp(), '$nameus','$detect','$urlpage')"; результат botname без подсчета строк в
    PHP:
    1. <?
    2. $uo_query = "SELECT botname FROM users_online WHERE botname = '$detect'";
    3. $uo_result = mysql_query($uo_query); $allsqls++;
    4. $uo_query = "SELECT count(botname) FROM users_online WHERE botname = '$detect'";
    5. $uo_result = mysql_query($uo_query);
    6. $uo_count = mysql_fetch_row($uo_result);
    7. echo $uo_count[0];
    8. ?>
    Помогите советом.
     
  15. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Что у тебя храниться в $detect?
     
  16. Sinfulman

    Sinfulman Новичок

    С нами с:
    12 авг 2016
    Сообщения:
    17
    Симпатии:
    1
    Имя бота который зашел на сайт. "
    1. // Это бот, его имя - в переменной $detect."
     
  17. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Ну, я так и думал. Значит давай начнём сначала:
    я не понял твою задачу. Распиши конкретно,можешь даже нарисовать, как хочешь видеть результат. Я, видимо, подтупливаю и недогоняю.
     
  18. Sinfulman

    Sinfulman Новичок

    С нами с:
    12 авг 2016
    Сообщения:
    17
    Симпатии:
    1
    Проблема в том, что в БД users_online идет запись и пользователей и ботов. Так вот простым подсчетом строчек определить сколько ботов на сайте не получится. Нужно другое решение. Есть мысли по этому поводу ?
     
  19. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Погоди, у тебя же в $detect имя бота. Значит в колонку botname добавляется имя бота. Значит у юзеров эта колонка должна быть пустой. Я не прав?
     
  20. Sinfulman

    Sinfulman Новичок

    С нами с:
    12 авг 2016
    Сообщения:
    17
    Симпатии:
    1
    Да, она пустая (visitor,lastvisit,user,botname,urlpage)
     
  21. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Ну так выбери кол-во строк, в которых ботнейм ненулевое значение имеет.
     
  22. Sinfulman

    Sinfulman Новичок

    С нами с:
    12 авг 2016
    Сообщения:
    17
    Симпатии:
    1
    Как , пример пожалуйста.
     
  23. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    SELECT COUNT(*) `cnt` FROM `users_online` WHERE `botname` IS NOT NULL или как там у тебя спроектировано. `botname` != ''?
     
  24. Sinfulman

    Sinfulman Новичок

    С нами с:
    12 авг 2016
    Сообщения:
    17
    Симпатии:
    1
    PHP:
    1. <?
    2. $uo_query = "SELECT count(botname) FROM users_online WHERE botname = '$detect'";
    3. $uo_result = mysql_query($uo_query);
    4. $uo_count = mysql_fetch_row($uo_result);
    5. echo $uo_count[0];
    6. ?>
    Вместо верхней строчки вставить вот эту и вот так:
    $uo_query = "SELECT COUNT(*) `cnt` FROM `users_online` WHERE `botname` IS NOT NULL `botname` != ''
     
  25. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Это было дано два варианта условия, из которых ты сам выберешь, так как я не знаю с архитектуры твоей базы.