1. PHP / Говнокод #4393

    +162

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    function brows($str)
     {
    	if(strpos($str,'Googlebot')!==false)
    	{
    		return 'Googlebot';
    	}
    	elseif(strpos($str,'Yandex')!==false)
    	{
    		return 'Yandex';
    	}
    	elseif(strpos($str,'Opera')!==false)
    	{
    		return 'Opera';
    	}
    	elseif(strpos($str,'Firefox')!==false)
    	{
    		return 'Firefox';
    	}
    	elseif(strpos($str,'MSIE')!==false)
    	{
    		return 'MSIE';
    	}
    	elseif(strpos($str,'Chrome')!==false)
    	{
    		return 'Chrome';
    	}
    	elseif(strpos($str,'Yahoo')!==false)
    	{
    		return 'Yahoo';
    	}
    	else
    	{
    		return mysql_real_escape_string($str);	
    	}	
     }

    мне кажется тут явно что-то не чисто :D

    Запостил: GoodTalkBot, 19 Октября 2010

    Комментарии (21) RSS

    • Кулхацкеры детекдет!
      Ответить
    • Ну экранирование $str лучше бы сделать вне этой функции.

      А так ну куча if можно конечно разными способами переписать, например сделать проверку в цикле занеся, перед этим сравниваемые строчки в массив, но если например хром будет вылавливаться не по строке Crome а по строке Chromius, то придется хранить в массиве для каждого браузера список проверочных функции и усложнять цикл
      Так что особого говна я тут не углядел.
      Ответить
      • > Так что особого говна я тут не углядел.
        > Crome а по строке Chromius
        да собственно - не удивительно, угу. бровзер Кроме, угугу.
        Ответить
        • Маленько не уловил суть вашего комментария. Нельзя ли поподробнее
          Ответить
          • bugmenot просто от выходных ещё никак не отойдёт... :)
            Ответить
          • да боже ж мой chrome, chromium, mendeleeff
            Ответить
            • Действительно, как же я мог опечататься, срочно пойду заучивать название браузеров
              Ответить
              • ага, опечатка
                *по-джентльменски притворился, что фэйл случаен*
                Ответить
                • Все, уели, признаю себя невежей и отправляюсь доучивать название браузеров
                  Ответить
      • Да не надо список проверочных функций.
        просто массив ключ => значение, проверять по ключу возвращать значение.
        Ответить
        • Ну чисто теоретически в функцию может поступать не чистая строка,
          например не MSIE , а MSIE-6.x , тут ее придется скорее всего сравнивать по регулярке, или проводить более сложные манипуляции
          Ответить
      • function brows($str)
        {
        $arr = array('Googlebot', 'Yandex', 'Opera', 'Firefox', 'MSIE', 'Chromius'=>'Chrome', 'Yahoo');

        foreach($arr as $k => $v)
        {
        if(strpos($str, is_int($k) ? $arr[$k] : $k) !== false)
        return $arr[$k];
        }

        return mysql_real_escape_string($str);
        }
        Ответить
    • С утра сегодня придумал что эту функцию можно написать так
      function brows($str) {
       return mysql_real_escape_string($str);
      }
      Ответить
      • ООП головного мозга от нечего делать врывается в тред.
        class Request_BrowserDetector
        {
          public static function singleton()
          {
            if (null === self::$_instance)
            {
              self::$_instance = new self;
            }
            
            return self::$_instance;
          }
          
          protected static $_instance = null;
        
          public function __construct()
          {
            $this->_sigs = Application::singleton()->cfg('request.browser.signatures');
          }
          
          public function detect($str)
          {
            if (isset($this->_cache[$str]))
            {
              $out = $this->_cache[$str];
            }
            else
            {
              $notFound = true;
              
              foreach ($this->_sigs as $k => $v)
              {
                if (false !== strpos($str, $k))
                {
                  $out = $v;
                  $notFound = false;
                  break;
                }
              }
              
              if ($notFound)
              {
                $out = $this->_escape($str);
              }
              
              $this->_cache[$str] = $out;
            }
            
            return $out;
          }
          
          protected function _escape($str)
          {
            return mysql_real_escape_string($str);
          }
          
          protected $_sigs, $_cache = array();
        }
        Ответить
        • Это надо распечатать, измельчить листы, забить в папиросу и курить снос башки обеспечен.
          Ответить
    • а я уверен, что функции mysql_real_escape_string место совсем не здесь.
      Ответить

    Добавить комментарий