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

    +142

    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
    <?php
    
    /* 
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
    session_start();
    require "db.php";
    $id = $_GET["id"];
    pagedel($id);
    header ("location: index.php");
    
    function pagedel($id){    // функция удаления страниц
        $sql = "DELETE FROM mesage WHERE id=$id";
        mysql_query($sql) or die (mysql_error());
    }
    
    ?>

    не работает фукция удаления строки

    Запостил: radiomonter, 11 Мая 2015

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

    • >>pagedel

      уехал в Израиль и пажидел
      Ответить
    • > $id = $_GET["id"];
      > $sql = "DELETE FROM mesage WHERE id=$id";
      *facepalm.jpg*

      inkanus-gray: Зато автор знает про подготовленные выражения, что для пехапешника редкость.
      Ответить
      • P.S. Да ещё и удаляет GET'ом. За модификацию базы в GET'ах в 99.9% случаев надо на кол сажать.
        Ответить
    • А соединение с базой вообще установлено?
      Ответить
    • mesage точно с одной s?
      Ответить
    • пишет ошибку с id походу не подхватывает его
      Ответить
      • > пишет ошибку с id
        Ну мы тут не телепаты, раз пишет ошибку - приведи её.
        Ответить
        • The requested URL /delete_form.php was not found on this server.
          адресс сайт/delete_form.php?id=
          Ответить
      • а это в ПХП тру способ инжектированния переменных в стоки?
        Ответить
        • Ага. Это труъ способ. Именно благодаря этому способу пых и получил свою репутацию.
          Ответить
          • Пойду, Хлопцы, Проблююсь
            Ответить
            • Надеюсь, это зелёный.

              По-моему, идеальный способ
              std::cout << "Я - " << name << ", мне " << age << " лет."; // говно, дурацкое разделение дурацким <<
              system.out.println("Я - " + name + ", мне " + age + " лет."); // говно, дурацкое разделение дурацким +
              printf("Я - %s, мне %d лет.", name, age); // уже лучше, но переменные разлучили со строкой
              echo("Я - $name, мне $age лет."); // идеально. (+) читаемость (+) простота написания
              Ответить
              • print("Я - {name}, мне {age} лет".format(name="Vasya", age=17))
                Ответить
              • user_info = {
                    "surname": "Бонд",
                    "name": "Джеймс",
                    "num": 7
                }
                print("{surname}. {surname} {name}. Агент {num:03d}.".format(**user_info))
                Ответить
                • Но зачем целых три раза писать то, что можно написать один раз?
                  Хотя, для языков, где другого нет, пойдёт. Скажем, для JS.
                  print("Я - {name}, мне {age} лет".format(name="Vasya", age=17)) // глобальные переменные и хардкорное replace(питух, window['питух']);
                  print("Я - {name}, мне {age} лет".format({name:"Vasya", age:17})) // просто JS

                  P.S. Правда, в JS можно в консоль выводить как в сишке с %питух.
                  Ответить
                  • Это в питоне так.

                    > три раза писать
                    Ну один раз, как правило, нахаляву - выборка из базы, какой-нибудь класс и т.п. Там же и вот так можно:
                    print("{u.surname}. {u.name} {u.surname}. Агент {u.id:03d}.".format(u = current_agent))
                    # где current_agent - объект с полями surname, name, id
                    P.S. И где ты три раза увидел, когда их там два?
                    Ответить
              • А вообще - сложность кококонкатенации строк порой приводит к годным и безопасным решениям вместо этой самой кококонкатенации:
                // решение курильщика
                $params = "name=$name&surname=$surname";
                
                // решение здорового человека
                $params = http_build_query(array(
                    "name" => $name,
                    "surname" => $surname
                ));
                Ответить
                • Четыре строки вместо одной, какой-то странный дибилдер, вызов туштринг...

                  > сложность кококонкатенации
                  Ну можно дибилдер засунуть в язык и транслировать все упомянутые там переменные в .add($питух), а не писать руками.
                  Ответить
                  • Ок, верну код с билдером на место:
                    QueryBuilder qb = new QueryBuilder();
                    qb.add("name", name);
                    qb.add("surname", surname);
                    String params = qb.toString();
                    > Четыре строки вместо одной
                    Зато оно как положено всё заэкранирует и этот код можно использовать в цикле или по условиям (вспомни, в какой ад превращается сборка строки из кусочков по условию, если не юзать join).
                    Ответить
                    • > Зато оно как положено всё заэкранирует
                      Я бы в этом случае запилил бы что-то вида
                      "name=`name`&surname=`surname`"

                      То есть чтобы просто переменные можно было вставить как $x, заэкранированные для HTML - как $*x, для URL или для БД - `x` и {x} и т.д.
                      Разновидностей экранирования, которые встречаются на сайте, кажется, не так много, чтобы все их не учесть, и писать более-менее читаемый код, а не "посмотри налево - %s, посмотри направо - какая-то фигня через запятую, может мы аргумент пропустили".
                      Ответить
                      • Чтобы нечитабельный пиздец превратился в ещё более нечитабельный пиздец? Ок, теперь собери эту хуйню по условию - name и surname добавляются только если они не пусты.
                        Ответить
                        • А вообще, я понял, что бы мне понравилось. Много разных значков для разных случаев. Или... Возможность переопределять скобочки и операторы!
                          "[name=`name`]&[surname=`surname`]"

                          Конечно, это может дойти до нечитаемой фигни и эффекта матана
                          http://1990e.com/wp-content/uploads/2014/11/41-4.jpg (и дойдёт)
                          Но знающий человек сразу легко поймёт, для него это будет предельно надлядно как 2+2=4. Вопрос только в ёмкости читающего (измеряется в количестве значков, смысл которых он может удержать в голове).
                          Ответить
                      • > писать более-менее читаемый код
                        Ну я же кинул питоний... Чем он нечитаем?
                        Ответить
                      • А особые ценители пыхи могут писать на питоне так:
                        surname = "Бонд"
                        name = "Джеймс"
                        num = 7
                        print("{surname}. {name} {surname}. Агент {num:03d}.".format(**locals()))
                        Теперь читабельно?
                        Ответить
                        • > питоний... Чем он нечитаем?
                          Читаем. Но сложнонаписуем.

                          > Ок, теперь собери эту хуйню по условию - name и surname добавляются только если они не пусты.
                          Мда, проблема. Ничего лучше фигни вида . ($name ? ... : ...) . в голову не приходит. Решение с билдероподобными сущностями тут универсальнее обрабатывает все случаи, да. Но лучше бы всё в строку загнать для наглядности.

                          > Теперь читабельно?
                          лишний хвост у строки... Но прежнего дублирования нет, почти что ПХП, мы с Конардо радуемся.
                          Ответить
                          • > лишний хвост у строки...
                            Пофиксил:
                            import inspect
                            def phpformat(fmt):
                                return fmt.format(**inspect.getouterframes(inspect.currentframe())[1][0].f_locals)
                            
                            surname = "Бонд"
                            name = "Джеймс"
                            num = 7
                            print(phpformat("{surname}. {name} {surname}. Агент {num:03d}."))
                            Теперь пыхобляди соснули пыхобояре довольны?
                            Ответить
                        • не удержался
                          http://www.youtube.com/watch?v=HcfHBgUTn7I
                          Ответить
                      • Для SQL запросов лучше сделать SQL литералы, как в шарпике.

                        Для html - экранировать весь вывод по-умолчанию. Хочешь посрать тегами из кода - юзай какое-нибудь отдельное raw_echo.

                        Для url - тут только url билдеры. Хотя бы как в jquery - $.get("http://hui.com/add.php", {name: "Vasya", length: 17})
                        Ответить
                • # решение здорового человека
                  requests.get(ulr, params={
                      'name': name,
                      'surname': surname,
                  })
                  Ответить
              • Мне наоборот кажется, что строка превращается в нечитабельные нечистоты.

                В том же руби мне читать гораздо проще за счет скобок фигурных
                puts  "Я - #{name}, мне #{age} лет."
                Ответить
                • Так в пхп то же самое. Ну если по идеологии.
                  Кажется, даже можно писать "Я - ${name}, мне ${age} лет."
                  Ответить
                  • Ну пых это же шаблонизатор. Если бы в нём нельзя было обращаться из строк к переменным - нахуй он нужен был бы...

                    > даже можно писать
                    Вроде даже ${user->name} и ${user['name']} должны канать. И {$name} тоже.
                    Ответить
                  • я не против идеологии. В пхп оно сделано нечитабельно. То есть у меня глаз не цепляется за переменные без скобок.

                    Хотя может привыкнуть нужно
                    Ответить
                    • > То есть у меня глаз не цепляется за переменные без скобок.
                      Пиши со скобками. Пых понимает и ${name} и {$name}.
                      Ответить
    • как подставить выборку именно того id
      Ответить
    • стоп сам ошибку нашол.Адресс файла указан неправильно.
      Ответить
    • Мне лень читать все ваши комментарии, в которых вы опять возвращаетесь к теме бойни языков - этакая программистская валгалла - поэтому спрошу, не читая: меня одного напряг вызов функции до объявления?:
      Ответить
      • > меня одного напряг вызов функции до объявления
        Не одного. Но во многих языках это допустимо.
        Ответить
        • Забавно, пых оказывается без проблем глотает такую херню. Понимаю, что тоже наверняка два прохода и вся хуйня, но был уверен, что он такого не умеет.
          Ответить
          • Открою страшную тайну: пых не интерпретирует файл по строчкам, как бат, а компилирует всё в байткод, а уже потом интерпретирует. Правда, доступа к байткоду у простых смертных нет, но всякие XCache и APC умеют этот байткод кэшировать, чтобы не вызывать компилятор на каждый запрос.

            Самое интересное, что пых при этом поддерживает стрёмные конструкции типа include $varname;

            Как он умудряется компилировать, если на этапе компиляции список всех включаемых файлов неизвестен?
            Ответить
            • Походу, на первом проходе компилируются только статические инклуды, лежащие вне условий, циклов и не зависящие от переменных. А остальные куски компилятся по требованию, уже во время исполнения (и не кешируются?).
              Ответить
            • Питон тоже все конпелирует, но... функции он конпелирует в рантайме
              Ответить
              • >> конпелирует
                вареции все учел?
                Ответить
                • Запомни: конпелирует и питух — смешно, вореции и кобенации — не смешно.
                  Ответить
                  • А разве минусы не за орфографическую ошибку в слове вореции?
                    Ответить
                    • Точно? А вдруг за отсутствие точек над «ё» и за строчную букву в начале предложения?
                      Ответить
                      • Расставим все точки над ё.

                        е + ̈ = е ̈
                        Ответить
                        • И пусть Тёма Лёбёдёв фалломорфирует!
                          Ответить
                          • И ̈ ̈п ̈у ̈с ̈т ̈ь ̈ ̈Т ̈ё ̈м ̈а ̈ ̈Л ̈ё ̈б ̈ё ̈д ̈ё ̈в ̈ ̈ф ̈а ̈л ̈л ̈о ̈м ̈о ̈р ̈ф ̈и ̈р ̈у ̈е ̈т ̈! ̈
                            Ответить
                          • Ӥ ̈п̈ӱс̈т̈ь̈ ̈Т̈ём̈ӓ ̈Л̈ёб̈ёд̈ёв̈ ̈ф̈ӓл̈л̈ӧм̈ӧр̈ф̈ӥр̈ӱёт̈!̈
                            Ответить
                        • Я тут подумал о том, как же несчастны носители некоторых европейских языков. Те же умляуты можно написать как ä, ö, ü, а можно как ä, ö, ü (во втором случае они будут занимать в два раза больше байтиков). С точки зрения некоторых компьютерных программ Röntgen и Röntgen будут совершенно разными словами.
                          Ответить
                          • Это и есть разные слова. Т.е. узнать, что это одно слово можно только заменив {}e на умляут и посмотрев слово в словаре. Soeben != söben
                            Ответить
                            • > Это и есть разные слова.
                              Не уверен, что прав, но может это недопонимание из-за старой оперы?
                              У меня ä, ö, ü и ä, ö, ü выглядят совершенно одинаково - как a, o, u с двумя точками, о чём и переживает inkanus-gray:
                              http://rghost.net/8rySqk5nX.view
                              Ответить
                              • У меня на гвфоруме в последнем лисе нету половины значков на панели бебекодов.
                                Ответить
                            • Про то, что в немецком можно писать ae, oe, ue вместо умляутов, я в курсе.

                              Речь здесь о другом: буквы с надстрочными и подстрочными символами в уникоде могут представляться двумя способами:
                              1. одним символом, у которого уже есть точки;
                              2. комбинацией двух символов: буквы без точек и собственно точек (которые графические движки накладывают на предыдущий символ).

                              Т. е. для сравнения строк, содержащих умляуты, нужно производить композицию или декомпозицию.
                              Ответить
                              • Емнип, из-за этого у юникода 2 канонических формы - в одной всё что можно записано одним кодепоинтом, а в другой - буквы отдельно, точки отдельно.
                                Ответить
                        • Квадратики
                          Ответить
                        • Физика элементарных частиц?

                          Где-то между Швейцарией и Францией под землёй изучается загадочная частица бормезон (известная как ё-мезон или Борманд-мезон), которой не хватало в Стандартной модели для полного счастья после открытия известного всем бозона Хиггса. Для изучения этой частицы уже потребовалось обработать 68Пб сырых данных и обнаружить 12 событий рождения бормезона. При столкновении протон-антипротонных пучков рождается высокоэнергетический электрон и две квантовые кварковые точки с зарядом +1/2 (природа кварковых точек неизвестна, учёные строят различные гипотезы, на данный момент их связывают с тёмной материей), которые вскоре сливаются и образуют бормезон. Иногда рождение сопровождается испусканием фотона.
                          Ответить
          • Придумал, что сделать, чтобы пых не заглядывал вперёд:
            $pagedel = function($id){    // функция удаления страниц
                $sql = "DELETE FROM mesage WHERE id=$id";
                mysql_query($sql) or die (mysql_error());
            };
            Ответить
            • if (1) {
                  function pagedel($id) {
                      // ...
                  }
              }
              Ответить
              • Гениально! Это работает! Теперь я не буду смеяться над if(1).
                Ответить
                • P.S. Это и без ифа работает. Достаточно фигурных скобок!
                  Ответить
                • О боже в какую же стенку Вы долбанулись?Неужели у вас в голове такая каша вариться.По ходу чтото курили.
                  Ответить
                  • >>Неужели у вас в голове такая каша вариться.
                    Грамотно пиши, кашевар.
                    Ответить

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