





Новый урок
Ну, коль скоро мы проникли в админку - посмотрим, что есть там. Первая ссылка в меню - "добавить урок". Ну добавить, так добавить. Сейчас я это и сделаю.
И так, новый урок:
Инициализация переменных.
Есть разные способы инициализации переменных - тернарным оператором, простым условием, с собачкой и даже в цикле. Но вот это:
admin/add_lessons.php
просто верх сюреализма. Замечательно, когда для иллюстрации к уроку есть материалы из серии "так делать нельзя".
Разберемся, что же тут не так. Логика очевидна, к тому же прямо прописана в комментарии:
/* Если существует в глобальном массиве $_POST['title'] опр. ячейка, то мы создаем простую переменную из неё.
Если переменная пустая, то уничтожаем переменную. */
Так а зачем создавать, если тут же уничтожаем? Гораздо логичнее не создавать, если не существует в глобальном массиве $_POST['title'] опр. ячейка или она пуста. Это избавит код от избыточности, сделает его читабельным, а сервер освободит от лишних телодвижений.
Хотябы так (всё почище):
Кроме того, есть замечательная функция empty(), которая сразу проверяет пустоту переменной. Прелесть её в том, что она не вызывает ошибку при обращении к несуществующей переменной. По этому (если предположить, что ни одна из переменных не будет равняться нулю), этот код можно еще сократить, используя empty() с инверсией:
Хотя этот подход тоже верным назвать нельзя. Ну ладно тут, коду три строчки. А если скрипт будет посерьёзнее? Каждый раз, где потребуется обращение к переменной, придется проверять её наличие. По этому лучше определить её сразу, чтобы потом не беспокоиться. Тут это не критично, исправлять смысла вроде нет. Кому интересно, в наших курсах это описано.
Дальше, та самая проверка:
Не могу смотреть на такие веревки без умиления. Сразу представляется старательный кодер, который сопя и пыхтя, высунув язык, самозабвенно выводит эти каракули, вместо того, чтобы заглянуть в мануал. А там черным по белому -
Что в вольном переводе звучит как
И если сделать из этого определенные орг-выводы, то этот канат можно переписать так:
Урок окончен. По инициализации.
А по коду это далеко не все, причем это были семечки. Настоящие ляпы только начинаются.
Я опущу тот момент, что в базу вносится гипертекст (опираясь на это заявление: Введите полный текст урока с тэгами)
Это отдельная тема, тема безопасности. Фиг с ним, тут есть еще на что обратить внимание.
Шедеврально. Наверняка многие, кто собрал свой сайт по этим урокам, сталкивались с такой непонятной проблемой: почему то админка упрямо не хочет воспринимать текст, в котором присутствуют апострофы. Ради интереса попробуйте запостить такой текст урока:
при выключенных магических кавычках. Получите без объявления войны радостное сообщение с восклицательным знаком:
Ваш урок не добален!
Это зачатки SQL-инъекции. И можете сто раз повторить, что это админка и бояться некого, однако текст то не прошел. А это ляп.
Никогда, ни при каких обстоятельствах, нельзя совать в запрос неподготовленные данные. Как минимум это должно выглядеть так:
А в идеале нужно озаботиться этими самыми магическими кавычками и разграничить типы переменных. Тут на этом подробно останавливаться смысла нет. А вот на следующей строчке есть.
Во первых, с какого перепуга булево значение true превратилось в строку? Благо PHP прощает такую вольность, но до добра эта привычка не доведет.
Должно быть так:
А можно проще:
Дальше. По накатанной тропинке идем в мануал, ищем функцию mysql_query() и читаем:
А это значит, что однозначно заявлять с ликованием:
Ваш урок успешно добален!
нет никаких оснований. Есть основание констатировать факт, что функция вернула что то, отличное от false.
Проверяется внесение данных в базу другой функцией - mysql_affected_rows(), которая возвращает количество измененных рядов.
Вобщем вот, смотрите и сравнивайте сами:
admin/add_lessons.php
А мы продолжим вскрытие.
Ну, коль скоро мы проникли в админку - посмотрим, что есть там. Первая ссылка в меню - "добавить урок". Ну добавить, так добавить. Сейчас я это и сделаю.
И так, новый урок:
Инициализация переменных.
Есть разные способы инициализации переменных - тернарным оператором, простым условием, с собачкой и даже в цикле. Но вот это:
admin/add_lessons.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
просто верх сюреализма. Замечательно, когда для иллюстрации к уроку есть материалы из серии "так делать нельзя".
Разберемся, что же тут не так. Логика очевидна, к тому же прямо прописана в комментарии:
/* Если существует в глобальном массиве $_POST['title'] опр. ячейка, то мы создаем простую переменную из неё.
Если переменная пустая, то уничтожаем переменную. */
Так а зачем создавать, если тут же уничтожаем? Гораздо логичнее не создавать, если не существует в глобальном массиве $_POST['title'] опр. ячейка или она пуста. Это избавит код от избыточности, сделает его читабельным, а сервер освободит от лишних телодвижений.
Хотябы так (всё почище):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Кроме того, есть замечательная функция empty(), которая сразу проверяет пустоту переменной. Прелесть её в том, что она не вызывает ошибку при обращении к несуществующей переменной. По этому (если предположить, что ни одна из переменных не будет равняться нулю), этот код можно еще сократить, используя empty() с инверсией:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Хотя этот подход тоже верным назвать нельзя. Ну ладно тут, коду три строчки. А если скрипт будет посерьёзнее? Каждый раз, где потребуется обращение к переменной, придется проверять её наличие. По этому лучше определить её сразу, чтобы потом не беспокоиться. Тут это не критично, исправлять смысла вроде нет. Кому интересно, в наших курсах это описано.
Дальше, та самая проверка:
1 2 3 4 5 6 |
|
Не могу смотреть на такие веревки без умиления. Сразу представляется старательный кодер, который сопя и пыхтя, высунув язык, самозабвенно выводит эти каракули, вместо того, чтобы заглянуть в мануал. А там черным по белому -
1 2 |
If multiple parameters are supplied then isset() will return TRUE only if all of the parameters are set. |
1 2 |
Если параметрами передается несколько переменных, то isset () вернет TRUE
только если все переменные определены.
|
И если сделать из этого определенные орг-выводы, то этот канат можно переписать так:
1 2 3 4 5 6 7 |
|
Урок окончен. По инициализации.
А по коду это далеко не все, причем это были семечки. Настоящие ляпы только начинаются.
Я опущу тот момент, что в базу вносится гипертекст (опираясь на это заявление: Введите полный текст урока с тэгами)
Это отдельная тема, тема безопасности. Фиг с ним, тут есть еще на что обратить внимание.
1 2 3 4 5 |
|
Шедеврально. Наверняка многие, кто собрал свой сайт по этим урокам, сталкивались с такой непонятной проблемой: почему то админка упрямо не хочет воспринимать текст, в котором присутствуют апострофы. Ради интереса попробуйте запостить такой текст урока:
1 2 3 4 |
|
Ваш урок не добален!
Это зачатки SQL-инъекции. И можете сто раз повторить, что это админка и бояться некого, однако текст то не прошел. А это ляп.
Никогда, ни при каких обстоятельствах, нельзя совать в запрос неподготовленные данные. Как минимум это должно выглядеть так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
А в идеале нужно озаботиться этими самыми магическими кавычками и разграничить типы переменных. Тут на этом подробно останавливаться смысла нет. А вот на следующей строчке есть.
1 2 3 4 5 6 |
|
Во первых, с какого перепуга булево значение true превратилось в строку? Благо PHP прощает такую вольность, но до добра эта привычка не доведет.
Должно быть так:
1 2 3 4 5 |
|
1 2 3 4 5 |
|
Дальше. По накатанной тропинке идем в мануал, ищем функцию mysql_query() и читаем:
1 2 3 4 5 |
|
А это значит, что однозначно заявлять с ликованием:
Ваш урок успешно добален!
нет никаких оснований. Есть основание констатировать факт, что функция вернула что то, отличное от false.
Проверяется внесение данных в базу другой функцией - mysql_affected_rows(), которая возвращает количество измененных рядов.
Вобщем вот, смотрите и сравнивайте сами:
admin/add_lessons.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
<?php |
А мы продолжим вскрытие.