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

    +159

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    <?php
    //////////
    static function AddKeyDis($meta_key,$meta_dis=null){
    	   if(is_array($meta_key)){
                                   return self::$result=array("meta_key"=>$meta_key['meta_key'],"meta_dis"=>$meta_key['meta_dis']);
    	   }elseif($meta_dis!==null){
    	             return self::$result=array("meta_key"=>$meta_key,"meta_dis"=>$meta_dis);
    	   }
    	   return null;
       }
    //////////
    ?>

    эх =)

    Zho, 09 Февраля 2011

    Комментарии (12)
  2. PHP / Говнокод #5598

    +160

    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
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    <?php
    
    class UserSessionComponent extends Component {
    	//...
    	protected function loginByUserId($user_id, $is_autologin = false) {
    		$list = $this->_loadComponents($this->components, array('UserAuth'));
    		$userAuth = $list['UserAuth'];
    		$userAuth->startup($this->controller); # !!! WORKFLOW VIOLATION !!!
    		$method = $is_autologin ? 'autologin' : 'login';
    		if ($userAuth->$method($user_id)) {
    			return $this->controller->Session->read('User.data');
    		}
    	}
    	//...
    }
    
    class UserAuthComponent extends BaseMagicComponent {
    	protected $loginType = 'explicit';
    
    	//...
    
    	public function autologin($params = array()) {
    		$this->loginType = 'implicit';
    		return $this->_login($params);
    	}
    
    	public function login($params = array()) {
    		$this->loginType = 'explicit';
    		return $this->_login($params);
    	}
    
    	//...
    	protected function _login($params = array()) {
    		switch (true) {
    			case (is_array($params) && isset($params['user']) && isset($params['password'])):
    				$result = $this->loginByUserAndPassword($params['user'], $params['password']);
    				break;
    			case (is_numeric($params) && $params > 0):
    				$result = $this->loginUser($params);
    				break;
    			default:
    				if (empty($params)) {
    					$result = false;
    				} else {
    					$result = $this->loginUser($params);
    				}
    		}
    		// ...
    	}
    
    	// ...
    	public function loginUser($user) {
    		switch (true) {
    			case is_object($user):
    				if (isset($user->data)) {
    					$a_user = $user->data;
    				} else {
    					return false;
    				}
    				break;
    			case (is_numeric($user) && ($user > 0)):
    				if (!($a_user = $this->User->findById($user))) {
    					return false;
    				}
    				break;
    			case (is_array($user) && (isset($user['User']['id']))):
    				$a_user = $user;
    				break;
    			default:
    				return false;
    		}
    		// ...
    		CFL::using('log');
    		if (empty($GLOBALS['loginIsLogged'])) {
    			$loginLog = new cflLoginTrackingLogger();
    			if ($this->loginType == 'implicit') {
    				$loginLog->implicit_login(array('user_id' => $a_user['User']['id']));
    			} else {
    				$loginLog->explicit_login(array('user_id' => $a_user['User']['id']));
    			}
    			$GLOBALS['loginIsLogged'] = true;
    		}
    		// ...
    	}
    }

    Сорри за много-много кода, еле-еле вписался в лимит. Но пришлось запостить все. Логическая цепочка совершенно потрясающая (смотрим с самого верхнего метода и идем дальше к самому нижнему методу). Тут у нас кода просто по колено: сумасшедший пахлава-код, использование глобальной переменной флага, особое извращенное использование конструкции switch, фактическое дублирование этого самого switch в двух последних методах, нейминг переменных и методов...
    Казалось бы, как все это вообще могло быть написано? Но использование компонента с говорящим именем BaseMagic все ставит на свои места.

    quall, 09 Февраля 2011

    Комментарии (9)
  3. PHP / Говнокод #5597

    +161

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    // функция с именем is_url, передаваемые ей перем.: $url.  
    function is_url($url)
    {  
      // если ничего не ввели, иначе:  
      if($url == "") return 0;  
      // если не соответствует стандарту, возвращаем ошибку.  
      if(!(ereg("\.", $url) && ereg("http://", $url) && ereg("/", str_replace("http://" , "", $url)))) return 0;  
      else return 1;  
    }

    Проверка URL на валидность (http://www.snippy.ru/snippet/213/)

    zamknulo, 09 Февраля 2011

    Комментарии (7)
  4. PHP / Говнокод #5595

    +158

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    function changeType(what) {
                    if (what == "forward") {
                            if (document.forms[0].elements['forward_list'].disabled == true) {
                                    document.forms[0].elements['forward_list'].disabled = false;
                            } else {
                                    document.forms[0].elements['forward_list'].disabled = true;
                            }
                    }
            }

    Есть замечательная ispCP и форма для настройки форвардинга е-мэйлов. Тут описывается поведение чек-бокса для включения формы.

    Mr_Alone, 09 Февраля 2011

    Комментарии (15)
  5. PHP / Говнокод #5590

    +158

    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
    do
            {
                    do
                            {
                                    if ($myrow_cats["category_id"] == $myrow_oldtovar_1["id"])
                                            {
                                                    printf("<tr><td class='newcat_author'><input name='old_id_cat[]' type='checkbox' value='%s' checked >
                                                    %s</td></tr>",
                                                    $myrow_oldtovar_1["id"],$myrow_oldtovar_1["rubrikatitle"]);
                                            }
                                    else
                                            {
                                                    printf("<tr><td class='newcat_author'><input name='old_id_cat[]' type='checkbox' value='%s' >%s</td></tr>",
                                                    $myrow_oldtovar_1["id"],$myrow_oldtovar_1["rubrikatitle"]);
                                            }       
                            }
                    while($myrow_oldtovar_1 = mysql_fetch_array($result_oldtovar_1));
            }
    while ( $myrow_cats = mysql_fetch_array($result_cats) );

    qbasic, 08 Февраля 2011

    Комментарии (6)
  6. PHP / Говнокод #5586

    +161

    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
    36. 36
    37. 37
    # Добавление пользователя
    	if ($_GET['action'] == "add_user" OR $_POST['action'] == "add_user"){
    		#Проверяем достаточно ли прав на добавление пользователя
    		$pal = 15;
    		if (access_level() < $pal) {
    			echo "Извените, у вас недостаточно прав для данной операции<br>";
    			echo "Ваш уровень ".access_level()." а доступ возможен только с ".$pal."<br>";
    		}
    		else{
    		echo "Уровень доступа - $pal<br>";
    		echo "<form action=\"index.php\" method=\"post\">\n";
    		echo "<select name=type><option value=1>support<option value=2>installer</select><br>";
    		echo "Логин ( первая буква имени + фамилия (en))  <input type=\"text\" name=\"add_username\"><Br> passwd <input type=\"password\" name=\"add_passwd\"><Br>\n access_level <input type=text name=access_level><br>\n";
    		echo "Полное имя (Фамилия, Имя, [Отчество]) <input type=\"text\" name=\"add_full_name\"><br>";
    		echo "Телефон (только 10 цифр, без +7, 8 и т.п.) <input type=\"text\" name=\"add_phone\"><Br>";
    		echo "<input type=\"hidden\" name=\"action\" value=\"add_user\">\n";
    		echo "<input type=\"submit\" name=\"submit\" value=\"add\"><br>\n</form>";
    
    		$add_name=mysql_real_escape_string($_POST['add_username']);
    		$add_pass=mysql_real_escape_string($_POST['add_passwd']);
    		$add_full_name=mysql_real_escape_string($_POST['add_full_name']);
    		$add_phone=mysql_real_escape_string($_POST['add_phone']);
    		$add_access_level=mysql_real_escape_string($_POST['access_level']);
    		$add_pass = md5($add_pass);
    		if($_POST['type'] == "1"){
    			echo $add_name."-".$add_pass."-".$add_access_level."<br>";
    			$sql = 'INSERT INTO `switches`.`creators` (`id`, `name`, `passwd`, `access_level`, `descr`, `creator`, `create_date`) VALUES (\'\', \''.$add_name.'\', \''.$add_pass.'\', \''.$add_access_level.'\', \'\', \''.$_SESSION['user_id'].'\', NOW());';
    			mysql_query($sql,$dbutm);
    			echo "<br>Пользователь добавлен.<Br>";
    		}
    		elseif($_POST['type'] == "2"){
    			$sql = 'INSERT INTO `switches`.`installers` (`id`, `name`, `full_name`, `passwd`, `access_level`, `descr`, `creator`, `create_date`, `phone`) VALUES (\'\', \''.$add_name.'\', \''.$add_full_name.'\', \''.$add_pass.'\', \''.$add_access_level.'\', \'\', \''.$_SESSION['user_id'].'\', NOW(), \''.$add_phone.'\');';
    			mysql_query($sql,$dbutm);
    			echo "<br>Монтажник добавлен.<Br>";
    		}
    	}
    }

    Система биллинга. Начинаю нервничать...

    Gogogo, 08 Февраля 2011

    Комментарии (11)
  7. PHP / Говнокод #5585

    +160

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    if ($this->Session->check('_userJustRegistered')) {
    	switch (($tmpJR = $this->Session->read('_userJustRegistered'))) {
    		case 'confirmed':
    			$this->Session->delete('_userJustRegistered');
    			break;
    		case 'not_confirmed_first':
    			$this->Session->write('_userJustRegistered', 'not_confirmed');
    			break;
    	}
    }

    Кусочек многоступенчатой системы по определению статуса юзера.

    quall, 08 Февраля 2011

    Комментарии (12)
  8. PHP / Говнокод #5582

    +161

    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
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    // Функция для проверки входнях данных и присвоения входных данных переменым
    // $pattern задаёт регулярное выражение
    // $key ключ в массивах $_POST[] или $_GET[]
    // $firts и $second порядок их просмотра
    // $second не обязательный параметр
    // $die_if_not_match задаёт поведение при не соответствии входных данных регулярному выражению
    // $die_if_not_set задаёт поведение при отсутствии входных данных
    // по умолчания при не совпаденини или отсутствии входных данных функция не возвращаяет ничего
    function inchk($pattern, $key, $first, $second = '' ,$die_if_not_match = '0',$die_if_not_set = '0' ){
    	if(!$pattern){
    		die("Шаблон для inchk() не задан");
    	}elseif(!$key){
    		die("Ключ для inchk() не задан");
    	}
    	elseif(!$first){
    		die("Источник данных inchk() не задан");
    	}elseif($first and $second){
    		if($first == "post" or $first == "p"){
    			if($_POST[$key] != ''){
    				if(preg_match($pattern, $_POST[$key])){
    					return $_POST[$key];
    				}else{
    					if($die_if_not_match){ die('недопустимый формат $_POST[\''.$key.'\']'); }
    				}
    			}elseif($_GET[$key] != ''){
    				if(preg_match($pattern, $_GET[$key])){
    					return $_GET[$key];
    				}else{
    					if($die_if_not_match){ die('недопустимый формат $_GET[\''.$key.'\']'); }
    				}
    			}else{
    				if($die_if_not_set){ die('$_POST[\''.$key.'\'] или $_GET[\''.$key.'\'] не задан'); }
    			}
    		}
    		elseif($first == "get" or $first == "g"){
    			if($_GET[$key] != ''){
    				if(preg_match($pattern, $_GET[$key])){
    					return $_GET[$key];
    				}else{
    					if($die_if_not_match){ die('недопустимый формат $_GET[\''.$key.'\']'); }
    				}
    			}elseif($_POST[$key] != ''){
    				if(preg_match($pattern, $_POST[$key])){
    					return $_POST[$key];
    				}else{
    					if($die_if_not_match){ die('недопустимый формат $_POST[\''.$key.'\']'); }
    				}			
    			}else{
    				if($die_if_not_set){ die('$_GET[\''.$key.'\'] или $_POST[\''.$key.'\'] не задан'); }
    			}
    		}else{
    			die("Источник данных inchk() задан не верно");
    		}
    
    	}elseif($first == "get" or $first == "g"){
    		if($_GET[$key] != ''){
    			if(preg_match($pattern, $_GET[$key])){
    				return $_GET[$key];
    			}else{
    				if($die_if_not_match){ die('недопустимый формат $_GET[\''.$key.'\']'); }
    			}
    		}else{
    			if($die_if_not_set){ die('$_GET[\''.$key.'\'] не задан'); }		
    		}
    	}elseif($first == "post" or $first == "p"){
    		if($_POST[$key] != ''){
    			if(preg_match($pattern, $_POST[$key])){
    				return $_POST[$key];
    			}else{
    				if($die_if_not_match){ die('недопустимый формат $_POST[\''.$key.'\']'); }
    			}
    		}else{
    			if($die_if_not_set){ die('$_POST[\''.$key.'\'] не задан'); }		
    		}
    	}elseif($first){
    		die("Источник данных inchk() задан не верно");
    	}else{
    		die("Источник данных inchk() не задан");
    	}
    
    }

    OH, SH*T! Казалось бы, зачем?

    Gogogo, 08 Февраля 2011

    Комментарии (8)
  9. PHP / Говнокод #5578

    +157

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    public function getUserDeliveryList($deliverySettings) {
    	$obligatoryFieldsList = array('type', 'periods', 'freq');
    	foreach ($obligatoryFieldsList as $v){
    		if (!isset($deliverySettings[$v])){
    			return false;
    		} else {
    			$$v = $deliverySettings[$v];
    		}
    	}
    //	...
    }

    Обратил внимание после того, как в тексте метода обнаружил некоторое количество undefined (по мнению IDE) переменных.

    quall, 08 Февраля 2011

    Комментарии (8)
  10. PHP / Говнокод #5576

    +165

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    if ($arResult["CurrentStep"] == 1)
    	include($_SERVER["DOCUMENT_ROOT"].$templateFolder."/step1.php");
    elseif ($arResult["CurrentStep"] == 2)
    	include($_SERVER["DOCUMENT_ROOT"].$templateFolder."/step2.php");
    elseif ($arResult["CurrentStep"] == 3)
    	include($_SERVER["DOCUMENT_ROOT"].$templateFolder."/step3.php");
    elseif ($arResult["CurrentStep"] == 4)
    	include($_SERVER["DOCUMENT_ROOT"].$templateFolder."/step4.php");
    elseif ($arResult["CurrentStep"] == 5)
    	include($_SERVER["DOCUMENT_ROOT"].$templateFolder."/step5.php");
    elseif ($arResult["CurrentStep"] >= 6)
    	include($_SERVER["DOCUMENT_ROOT"].$templateFolder."/step6.php");

    Из проекта на битриксе.

    hdkeeper, 08 Февраля 2011

    Комментарии (4)