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

    +151

    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
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    function addimagesave()
    	{
    		if (!$this->Login->isLogged())
            {
                $this->loginto();
                return;
            }
            else $this->Login->Update();
    		$error = '';
    		$recordExists = false;
    		$post_name = trim($this->input->post('name'));
    		if ($post_name != '') $insert['file_name'] = $post_name;
    		// now need to get from db if id_all in i_pics
    		$this->db->where('id_all',$this->input->post('id_all'));
    		$this->db->limit(1);
    		$query = $this->db->get('i_pics');
    		if ($query->num_rows() == 1)
    		{
    			$row = $query->row();
    			$recordExists = true;
    			$file_name = $row->file_name;
    			$id_pics = $row->id_pics;
    		}
    		if (isset($_FILES['upload']) && ($_FILES['upload']['error'] == 0)) // is file loaded?
    		{
    			$ext = getExtensionOnly($_FILES['upload']['name']);
    			if ($post_name != '') $_FILES['upload']['name'] = $post_name.'.'.$ext;
    			else $post_name = delExtensionWithDot($_FILES['upload']['name']);
    			$_FILES['upload']['name'] = translitIt(delExtensionWithDot($_FILES['upload']['name'])).'.'.$ext;
    			$config['upload_path'] = './pics/';
    			$config['allowed_types'] = 'gif|jpg|png|bmp';
    			$this->load->library('upload', $config);
    			if ($this->upload->do_upload('upload'))
    			{
    				$this->General->setEmes(array('roster'=>"Картинку загружено."), true);
    				$data = $this->upload->data();
    				$insert['file_name'] = $data['file_name'];
    				// resize now
    				$config1['image_library'] = 'gd2'; // выбираем библиотеку
    				$config1['source_image'] = 'pics/'.$data['file_name'];
    				$config1['create_thumb'] = TRUE; // ставим флаг создания эскиза
    				$config1['maintain_ratio'] = true; // сохранять пропорции
    				$config1['width'] = 250; // и задаем размеры
    				$config1['height'] = 180;
    				// pre crack image for resizing! )))
    				$this->load->model('Image');
    				$this->Image->smartsigninto('pics/'.$data['file_name'], 250, 180);
    				$this->load->library('image_lib', $config1); // загружаем библиотеку
    				$this->image_lib->resize(); // и вызываем функцию
    				// now rename and owerwrite original image
    				$ext = getExtensionOnly($data['file_name']);
    				$fol = "pics/";
    				if (is_file($fol.$data['raw_name'].'_thumb.'.$ext))
    				rename($fol.$data['raw_name'].'_thumb.'.$ext, $fol.$data['file_name']);
    				else $this->General->setEmes(array('roster'=>"Файл *_thumb не был создан!"));
    				// now set new file size
    				$insert['size'] = round(filesize($fol.$data['file_name'])/1024 , 2);
    			}
    			else $this->General->setEmes(array('roster'=>$this->upload->display_errors()));
    		}
    		else // we need to try to rename assigned file if name is not empty and file exists
    		{
    			if ($recordExists && is_file('pics/'.$file_name) && ($post_name != ''))
    			{
    				$ext = getExtensionOnly($file_name);
    				$fol = "pics/";
    				$newName = translitIt($post_name).'.'.$ext;
    				if (is_file('pics/'.$newName))
    				{
    					$this->General->setEmes(array('roster'=>"Имя уже существует"), true);
    					$insert['file_name'] = $file_name;
    				}
    				else
    				{
    					rename($fol.$file_name, $fol.$newName);
    					$insert['file_name'] = $newName;
    				}
    			}
    		}
    		// prepare data to be ins or upd
    		$insert['lang'] = 'ru';
    		$insert['title'] = $this->input->post('title');
    		$insert['alt'] = $this->input->post('alt');
    		$insert['id_all'] = $this->input->post('id_all');
    		if ($recordExists)
    		{
    			$this->db->where('id_pics',$id_pics);
    			$this->db->update('i_pics', $insert);
    			$this->General->setEmes(array('roster'=>"Данные обновлены"), true);
    		}
    		else $this->db->insert('i_pics', $insert);
    		$this->redirect('roster/'.$this->input->post('type'));
    	}

    Функция - контроллер сохранения, resize на лету картинки для новости или прочей байды. Есть все проверки. Любая картинка которая приходит, становится размером 250, 180 , причем без растяжения. Это задача типа вписать прямоугольник в прямоугольник, которую я сейчас ночью выполнил - даже если картинка меньше оно впишет. I must be proud about this functionality! Заметим, что в интернете все и умеют что вырезать квадраты из картинки, а произвольный размер - НЕТ такого. Код выложен чтобы вы посмотрели, нравятся ли вам имена переменных, логическое мышление, форматирование, коментарии (на русском - то не мои коментарии). Код CodeIgniter powered.

    Запостил: increazon, 25 Июня 2010

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

    • > Заметим, что в интернете все и умеют что вырезать квадраты из картинки, а произвольный размер - НЕТ такого.
      Я, может, не до конца понимаю, какую именно задачу Вы решили, но как-то не верится, что Вы не изобрели велосипед.
      > Код выложен чтобы вы посмотрели, нравятся ли вам
      Что повторяй, что нет, всё одно ради этого будут выкладывать >_< Страйкер, чем чёрт не шутит, может, и правда пора форум запиливать?
      Ответить
    • Поздравляю, ты не только изобрел принципиально новый прямоугольник, но и смог вписать его внутрь другого. You must be proud about this functionality!

      А твой код на уровне настоящего гуру! Да что там говорить, Макконнелл и Фаулер нервно курят в сторонке.

      Но не все так хорошо, как хотелось бы... Почему ты используешь этот CodeIgniter? Он же для быдлокодеров, а твои знания и навыки позволяют написать свой фреймворк!
      Ответить
    • очередной фэйл от инкризона ?
      Ответить
      • ну а как ты хотел - достойный ученик ёбкила
        свеженький фейспальм от ёбкилла (http://webkill.org/seo_money): "Ввидение в SEO манимейкинг -= Биржи ссылок =-" - о как завернул, пиздливчик
        Ответить
    • самое говно в
      // now need to get from db if id_all in i_pics

      код должен обьяснять сам себя

      а не
      for(int i=0;i<10;i++){} //тут цикл від 0 до 9
      Ответить
      • А как тебе это?
        $this->upload->do_upload('upload')
        Ответить
        • >>$this->General->setEmes(array('roster'=>"Данные обновлены"), true);
          Вот это круто.
          Ответить
        • Ну ты шутник, это родной код CodeIgniter, на, чти http://code-igniter.ru/user_guide/libraries/file_uploading.html и все претензии к ним.
          Ответить
          • >чти
            facepalm.ftn
            http://dic.academic.ru/dic.nsf/ogegova/267574
            Ответить
            • нучился google пользоваться? Или недопусти Яндексом?
              Ответить
              • какой банальный баттхерт =\
                ну ниче деточка когда-нибудь и ты гугл осилишь
                Ответить
    • Что мне не нравится
      1) спагетти-код: между ифом и элсом десятки строк! Делаем рефакторинг "выделение метода", пока код не становится типа такого:
      if (isSomeCondition()) {
       doSomething1();
       doSomething2();
      } else {
       doSomething3();
      }

      2) что такое $config1? Где $config42? Кто так переменные называет? И вообще -- половина в кемел-стайле, половина с прочерками, что-то с большой буквы, что-то с маленькой... Нейминг конвеншен нужен. Выбери любой, только один какой нить! и юзай его.
      А еще в PHP советую юзать венгерскую нотацию в представлении Спольски ("Как заставить неправильный код выглядеть неправильно") -- сильно облегчает понимание, и лечит некоторые болезни отсутствия статической типизации.
      $strName = $arrNames[$nIndex]; //  как-то так

      3) Как говорится "или крестик сними или трусы надень": или у тебя "$this->input->post" или у тебя "$config1['height']". Я понимаю, что в PHP принято творить кашу из процедурного и ООП подходов (язык так устроен), но все таки лучше остановится на чем-нить одном. Если уж "$this->input" то "$config->getHeight()"
      И если уж "$config1['height']" то хотя бы 'height' в константу.
      4) И зачем в одной функции (даже не классе, а функции!!) работа с базой, логика переворачивания и редирект? Что бы это все оттестировать было нереально? Как вообще к этому юнит-тест писать -- я не понимаю.

      В общем тут еще много претензий, но этих наверное хватит....
      Ответить
      • Спасибо за глубокий анализ. Дело в том что редирект стоит в каждой функции сохранения результатов, чтобы ЮРЛ был понятен, ведь сама функция сохранения не выводит ничего. А что такое логика переворачивания и где она здесь?
        Ответить
        • >>Дело в том что редирект стоит в каждой функции сохранения результатов, чтобы ЮРЛ был понятен, ведь сама функция сохранения не выводит ничего

          Это и плохо. Одна функция -- одно действие. Чем меньше функция знает об окружающем мире -- тем лучше.

          >>А что такое логика переворачивания и где она здесь?
          Это метафора) Я имел ввиду всякую логику, в твоем случае -- вырезание, или что ты там делаешь.

          В общем желаю тебе почитать Фаулера про "код с душком")
          Ответить
      • Да, анон, спасибо за глубокий анализ, теперь страждущих комментариев на собственные высеры понабежит ещё больше...
        Ответить
        • больше не буду
          Ответить
        • Думаю сайт для этого и создан, чтобы было больше посетителей. Больше кода - больше денег. Всё впереди, в вконтакте рекламы тоже не было поначалу...
          Ответить
          • > Всё впереди, в вконтакте рекламы тоже не было поначалу...

            Хаха, я ещё помню как дуров говорил "обещаю, вконтакте рекламы не будет никогда" )
            Ответить
          • А у меня есть предположение, что на этом сайте Страйкер просто MZZ обкатывает =) Вообще вряд ли, тематика слишком узкая, достаточно большую аудиторию не собрать, да и всё прекрасно понимающее большинство вряд ли станет активно кликать по баннерам.
            Ответить
            • > да и всё прекрасно понимающее большинство вряд ли станет активно кликать по баннерам

              если на баннере написать "где здесь с++?" и сделать галочку и крестик как для минусования, то будет говно-эффект)
              Ответить
            • показать все, что скрытона сапу пусть ставит. Нука и я подзаработаю: http://www.sape.ru/r.ARVGBkfZoO.php
              Ответить
            • Что такое MZZ?
              Еще один принципиально новый фреймворк на php?)
              Ответить
              • как видишь да. Расшифровка Mother Zoom Zoo (источник http://bit.ly/d9hXoD). Это уже говорит что это цирк а не фреймворк!
                Ответить
                • твои скрытые ссылки на твой гомноакк для рефа светятся за километр. Можешь не разбрасываться.
                  Ответить
                  • сам заходил. проверял. там обычный сайт о Делфи с этой новостью. Неверишь - проверь. В любом случае в рефф. можно не регистрироваться. Пугливый какой.
                    Ответить
                • на PHP любой фреймворк это цикр
                  Ответить
                  • На PHP нужно просто уметь программировать, что-бы цирк не получить.
                    Ответить
    • Кто-то изобрёл прямоугольник. Денис Попов застрелился.
      Ответить
    • форматирование ничего общего не имеет из http://codeigniter.com/user_guide/general/styleguide.html
      Ответить
    • показать все, что скрытоУ вас течёт крыша! Вам уже ничего не поможет. Крышую, недорого. Тел: 555-55-55. Ночью дешевле!
      Ответить

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