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

    +132.1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    if (!empty(($_POST['text'])) {
    	$text = $_POST['text'];
    } else {
    	unset($text);
    }

    Запостил: guest, 16 Февраля 2009

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

    • йайа:
      в чем говно? в unset() ?
      Ответить
    • гавно в самом наличии такого кода. Сейчас он проверяет $_POST['text'], потом появиться конструкция типа isset($text), затем еще 15 условных операторов для всяческих инсертов и апдейтов по типу
      $sql .= isset($text)?"='".$text."' "?"=NULL".
      Или хуже того - дальше в коде направо и налево будет юзатцо $text невзирая на то, что не так давно ему сделан unset.
      На самом деле гавно в том, что у пхп-кодеров принято писать в данном случае так:
      $text = $_POST['text'];
      Т.е. без лишних ифов и поебать на нотисы в логах и плодящиеся как тараканы инъекции. Именно из за таких приходиться каждому полю из базы делать трим, анэскейп, проверять на валидность, целостность и т.п.
      Извините, накипело ибо заебали уже "грамотные" пхп программисты..
      Ответить
    • страйкер:
      может быть выдрано из контекста, но мне кажется, что делать unset для несуществующей переменной стрёмно.

      [url]http://www.govnokod.com/575[/url]
      взято отсюда. не думаю, что эти переменные задефайнены в
      include("lock.php");
      include("blocks/bd.php");


      [quote=Говногость]Извините, накипело ибо заебали уже "грамотные" пхп программисты.. [/quote]
      Как я вас понимаю.
      p.s. сам я php программист
      Ответить
    • Скобки ))
      Ответить
    • [quote=Говногость]На самом деле гавно в том, что у пхп-кодеров принято писать в данном случае так:
      $text = $_POST['text'];[/quote]
      мм.. где ты видел таких говнокодеров? ниразу такого невидел, и не делал.
      Ответить
    • гы. Скобок внатуре перебор местами.
      [quote=Говногость]мм.. где ты видел таких говнокодеров? ниразу такого невидел, и не делал. [/quote]
      Я с ними работаю :). Вчерашний пример (выборочный копипаст):
      ....
      <?php
      	function create_agent($agent) {
      		$sql = "insert into agents(agent) values('".mysql_escape_string($agent)."');";
      		$db = Database::getInstance();
      		try { $db->query($sql); } catch (Exception $e) {};
      		return mysql_insert_id();
      
      	}
      	function update_agent($agent, $state) {
      		$sql = "update agents set state='".mysql_escape_string($state)."' where agent='".mysql_escape_string($agent)."' limit 1";
      		$db = Database::getInstance();
      		try { $db->query($sql); } catch (Exception $e) {};
      	}
      /*.....*/
      if ( isset($_POST['create']) ) {
      
      	$agent = create_agent($_POST['login']);
      	if ( ! $agent || trim($agent) != $_POST['login']) {
      		 /* ошибка запроса - скорее всего юзер ввел хуйню */
      		 echo "<error>Unable to create new agent </error>";
      	}
      }
      if (isset($_POST['update']) ) {
      		$agent = $_POST['agent'];
      		$state = $_POST['state'];
      	
      		if ( ! empty($state) ) update_agent($agent, $state);
      		
      		else echo "<error>Could not change state for agent: invalid state</error>";
      }
      ?>

      Стэйт для агента - текст из select-a. Селект с каким то глючным яваскриптовым поиском, поэтому периодически в стейт попадает пробел. Он не пустой, а потому успешно ложицо в базу. После таких скриптов мне приходицо "исправлять" "баги" след образом
      [code=c]
      @@ -1 +1,2 @@
      -select * from agents where `state` is NULL;
      +select * from agents where `state` rlike('\w+') or `state` is NULL;
      +
      [/code
      Ответить
    • dead_star:
      #6 порадовал конечно
      общая суть
      $agent = mysql_insert_id();
      if (!$agent || trim($agent) != $_POST['login']){

      а насчет пустых элиментов достаточно 28 строку заменить на
      if (isset($state) && (trim($state)!="")) update_agent($agent, $state);
      Ответить
    • xyuta
      Ответить

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