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

    +156

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    $query = "INSERT INTO news (title, img_url, subtitle, content, date, time, id) 
    	VALUES (\"" .
    	$_POST["title"] . "\", \"" .
    	$_POST["img_url"] . "\", \"" .
    	$_POST["subtitle"] . "\", \"" .
    	$_POST["content"] . "\", \"" .
    	date("Y-m-d") . "\", \"" .
    	time() . "\", " .
    	DEFAULT . ");";

    только начал php. уверень, есть решение поэлегантнее этого

    Запостил: artembegood, 05 Января 2015

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

    • Тролль?
      Я юзаю самодельную эмуляцию prepared statements поверх mysqli.
      Ответить
      • Вы пхпшиники реально тупые!! Ни в одном языке в мире уже лет 20 как не реализуют эскецпинг вручную
        Ответить
        • Так я и не реализую. Он есть. А вот нормальных плейсхолдеров нет.
          Ответить
          • Нормальных это каких?
            Ответить
            • Человека волнует, что он не может подставить имя таблицы и limit в запрос в виде параметров. Да потому что это не параметры, блядь!
              Ответить
              • Ну и самое обидное - массивы для field in (1,2,3).

                В теории то можно замутить всё это, но тут нужно парсить SQL, делать контекстно-зависимую экранировку и добавление кавычек (таблицы и поля заворачивать в ``, числа для лимитов оставлять без кавычек, массивы раскрывать в пачку плейсхолдеров и т.п.)... И всё это для каждой поддерживаемой СУБД... Не особо приятно, но реализуемо.
                Ответить
                • P.S. Только нужно ли это, если есть ORM'ы и построители запросов, в которых все это прекрасно параметризуется.
                  Ответить
                  • Не хочется таскать и понимать это многомегабайтное гумно.
                    Ответить
                    • >Не хочется понимать
                      Вы правильно выбрали язык.
                      Ответить
                      • все уже видели, но все равно не могу не оставить

                        http://www.youtube.com/watch?v=KVyGiE5Y2a8
                        Ответить
                      • )))))))))))))) лучший коммент
                        Ответить
                      • Да, правильно. Потому что для своих целей я прекрасно справился с написанием своего скромного ОРМ и я его понимаю. А читать мегабайты чужого кода (большая часть которого и не используется), чтобы понять, где грабли. Нет уж, увольте.
                        Ответить
                    • Действительно, зачем может быть нужна высокоуровневая абстракция? Я же могу вызвать mysql_query прямо в шаблоне.
                      Ответить
                      • Вопрос не в том нужна/не нужна, а своя или чужая.
                        Ответить
                        • Вот только не говори мне, что ты стараешься все писать сам
                          Ответить
                        • > своя или чужая
                          У пациента обнаружен синдром Not Invented Here. Требуется срочная госпитализация.
                          Ответить
                      • https://github.com/zencart/zc-v1-series/blob/v160/includes/templates/template_default/popup_attributes_qty_prices/tpl_main_page.php#L36
                        Ответить
                        • я одного не понимаю, нахуя им вообще гит и гитхаб?
                          Ответить
                        • ААААААААААААА

                          https://saucelabs.com/u/zencart
                          Ответить
                • В мсскл можно передать массив. А каловая база мускульной нинужна
                  Ответить
                  • это как же интересно?
                    Ответить
                    • Можно хмелем, можно темповой таблицей. И то и другое передают парамеиромм и парсят средством бд
                      Ответить
                      • А, с парсингом то и в постгресе запросто передается. А временной таблицей - вообще в любой СУБД.
                        Ответить
    • Решение поэлегантнее внести SQL-инъекцию? Конечно, есть! Сразу отправлять всё, что пришло в $_POST, как sql-запрос.

      В $_POST["title"] может прийти кавычка, и тогда запрос разорвёт на части.

      *****

      А если серьёзно, то рекомендую ознакомиться с подготовленными выражениями и со штатными функциями экранирования. Вот для старта:
      http://php.net/manual/ru/mysqli.quickstart.prepared-statements.php
      http://php.net/manual/ru/mysqli.real-escape-string.php
      (вместо mysqli может быть движок соответствующей СУБД или PDO)
      Ответить
      • Препеард стейтмент не используй @ пыхамакакой тупорылой с инъекциями будь
        Ответить
      • >Решение поэлегантнее внести SQL-инъекцию? Конечно, есть! Сразу отправлять всё, что пришло в $_POST, как sql-запрос.
        В $_POST - неэлегантно. Лучше в $_GET['query'].
        А совсем идеально - eval($_GET['cmd']).
        Ответить
    • На пхп не может быть элегантных решений, и тот факт что новичку сразу создал такое говно тому показатель
      Ответить
    • >DEFAULT
      Толсто. http://ideone.com/tCYy8B
      Ответить
    • ревень-уверень
      Ответить
    • > только начал php. уверень, есть решение поэлегантнее этого
      Конечно, есть немало языков, которые элегантнее PHP. Brainfuck, например.
      Ответить

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