Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Разное

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как научиться писать скрипты: правильно, надежно и без мусора?
 
 автор: Гавриленко Дмитрий   (05.09.2010 в 00:32)   письмо автору
 
 

Наверное таким вопросом задается каждый программист который хочет добиться успехов в дальнейшем. Так вот у меня тот же самый вопрос, для тех же самых совершений, по причине того, когда я начинаю писать скрипт, то я не знаю как сделать компактнее. Вот к примеру авторизацию я недавно писал(для себя, просто так). Файл auto.php . В коде, в начале: проверка существуют ли сессии и имеют ли они значени, если да, то "Здравствуйте сессион[логин]......"/ Если нет, то выводится идет проверка, существуют ли переменные постлогин и постпасс и есть ли в них значения, если да, то обезвреживаем их (я имею ввиду htmlspecialchar и остальное...) и проверяем по базе, есть ли такие логин и пасс. Если да, то сессионлогин = постлогин и сессионпасс = постпасс. Если в базе нет, то пишем, не верный логин или пароль и выводим опять форму. . Если постлогин и постпасс нет или они не имеют значения, echo заполнены не все поля! + опять форму.


Воот то что под наклоном у меня под сомнением. И кстати, этот скрипт не работает. Попросил своего знакомого программиста исправить, он написал свой вариант. Правда там он сделал на 7ми файлах, а я на 2х.


Вот собственно и вопрос. Может кто знает какие нибудь книги. Подскажите пожалуйста... Или это дело опыта?

  Ответить  
 
 автор: sim5   (05.09.2010 в 01:21)   письмо автору
 
   для: Гавриленко Дмитрий   (05.09.2010 в 00:32)
 

>существуют ли переменные постлогин и постпасс и есть ли в них значения, если да,
>то обезвреживаем их (я имею ввиду htmlspecialchar и остальное...)
>и проверяем по базе, есть ли такие логин и пасс


То есть, добавляем "мусора", и ищем в базе? Надо тогда полагать, что вы этот "обезвреживающий мусор" так и пишите в базу?

  Ответить  
 
 автор: Гавриленко Дмитрий   (05.09.2010 в 10:55)   письмо автору
 
   для: sim5   (05.09.2010 в 01:21)
 

>То есть, добавляем "мусора", и ищем в базе?

Что вы имеете ввиду? Т.е по вашему $_POST['login'] = htmlspecialchars(abbsleshes(trim($_POST['login']))); это мусор?

  Ответить  
 
 автор: sim5   (05.09.2010 в 12:49)   письмо автору
 
   для: Гавриленко Дмитрий   (05.09.2010 в 10:55)
 

>htmlspecialchars(abbsleshes(trim($_POST['login']))); это мусор?

abbsleshes - 100% - ный.

А по вашему так проще проверять html-представления символов нежели сами символы, и в базе держать такой же бардак? Htmlspecialchars и addslashes разработчики придумали не от страха, а от понимания ситуации.

  Ответить  
 
 автор: Гавриленко Дмитрий   (05.09.2010 в 13:34)   письмо автору
 
   для: sim5   (05.09.2010 в 12:49)
 

Да, извиняюсь за не правильность написания функции. Ну кажется я понял вас. Вы хотите сказать что в базе при регистрации, не как не может оказаться символов с которыми работает htmlspecialchars, так как при регистрации допустим, работают регулярные выражения |^[a-z0-9_]$|i которые не дадут записать информацию в базу которая не соответствует регулярным выражениям!

  Ответить  
 
 автор: sim5   (05.09.2010 в 13:53)   письмо автору
 
   для: Гавриленко Дмитрий   (05.09.2010 в 13:34)
 

При чем тут рег. выражения - у вас кроме имен и паролей база более ничего содержать не будет? Кроме как поиска, например, этих данных в базе, поиска иных не предполагается? htmlspecialchars(addslashes(trim($_POST и $_GET данные))) пишут не от понимания, а от большого перепуга - нет здесь ни какой проверки!
База данных как и мозг человека может содержать в себе первоисточники, как "плиз", так крепкое русское "направление пути". При этом для базы, как и для мозга, это одно и тоже - слова, но только человек интеллегентный при разговоре не будет употреблять "направление пути", а если и будет, то заменит его на "*****". А в мозгу своем вы держите их не боясь, в "открытом" виде.

Вы где-то увидели этот еретический код и не разобравшись в этой мути применяете его, совсем не задумываясь о последствиях.

  Ответить  
 
 автор: Ирбис   (06.09.2010 в 11:20)   письмо автору
 
   для: Гавриленко Дмитрий   (05.09.2010 в 13:34)
 

Перед занесением данных в базу не стоит обрабатывать их с помощью htmlspecialchars(), просто обезопасьтесь от SQL-инъекций с помощью mysql_escape_string( ) / mysql_real_escape_string(). Тогда данные в базе будут храниться именно в том виде, в котором их ввел пользователь.

Перед выводом в окно браузера обрабатывайте данные htmlspecialchars(), чтобы обезопасить сайт от XSS-инъекций.

  Ответить  
 
 автор: Владимир55   (05.09.2010 в 11:06)   письмо автору
 
   для: Гавриленко Дмитрий   (05.09.2010 в 00:32)
 

Как мне кажется, это приходит с опытом. Я тут просматривал одну из своих первых работ, выполненную пять лет назад. Я хотел её использовать для сегодняшних нужд, но убедился, что проще написапть заново. Получилось в разы короче и намного быстрее. Хотя никаких специальных усилий для оптимизации кода я не прикладывал - просто появился некоторый навык.

  Ответить  
 
 автор: psychomc   (05.09.2010 в 11:40)   письмо автору
 
   для: Гавриленко Дмитрий   (05.09.2010 в 00:32)
 

опыт + желательно не отставать от жизни, побольше читать книг и побольше разбираться с чужим кодом. и еще неплохо бы работать в команде

  Ответить  
 
 автор: Гавриленко Дмитрий   (05.09.2010 в 12:30)   письмо автору
 
   для: psychomc   (05.09.2010 в 11:40)
 

книги я заказал на пол года вперед. 3 шт. в среднем 2 месяца на каждую. На подходе еще одно книга. Но это не гарантирует, что я научусь их писать идеально/ На счет разбора чужих, я так и буду делать, что бы развивать свой кругозор. На счет команды- не как не получится! Я неверное единственный WEB - программист в ближайщих районах! А те кто на ucoz те просто так че с них взять. А пособия есть какие нибудь?

  Ответить  
 
 автор: psychomc   (05.09.2010 в 16:06)   письмо автору
 
   для: Гавриленко Дмитрий   (05.09.2010 в 12:30)
 

пособия для чего?
есть просто хорошие книги, которые учат грамотной алгоритмизации. можете например посмотреть "Совершенный код" Макконнела. здесь не суть важно какой язык, я думаю

  Ответить  
 
 автор: Владимир55   (05.09.2010 в 18:52)   письмо автору
 
   для: psychomc   (05.09.2010 в 16:06)
 

Позвольте задать крамольный вопрос: а зачем нужно писать "правильно, надежно и без мусора"?

Как я понял, заказчиков абсолютно не интересует, как и какими методами создан их сайт. Им важно одно - чтобы сайт был таким, каким им его хочется видеть. И чтобы его создали быстрее. И чтобы это стоило дешевле.

А если так, то к чему все эти старания по улучшению кода?

  Ответить  
 
 автор: Гавриленко Дмитрий   (05.09.2010 в 19:05)   письмо автору
 
   для: Владимир55   (05.09.2010 в 18:52)
 

Это все равно как на машине ездить! Хватит лишь того, что ты научился трогаться и переключать передачи?! А правила? А реакция? А смышленость? Без этого же будет хуже.

  Ответить  
 
 автор: Владимир55   (05.09.2010 в 19:27)   письмо автору
 
   для: Гавриленко Дмитрий   (05.09.2010 в 19:05)
 

Такая аналогия мне представляется неверной.

Езда на автомобиле у всех на виду и она затрагивает интересы других людей.

А код, в особенности серверный код, вообще никто не видит. Даже робот его не видит. И никого из потребителей он не интересует.

  Ответить  
 
 автор: Гавриленко Дмитрий   (05.09.2010 в 19:48)   письмо автору
 
   для: Владимир55   (05.09.2010 в 19:27)
 

Да, этот вопрос не на столько глобален как автомобили, но все же! Может я буду не для заказчиков делать, а так, на продажу, в потом в паблик. Другие программисты возможно будут копаться в моих скриптах. Или же тут приводился пример. Что открыв свой старейший скрипт сегодня, он не чего не понял и переписал его, и получилось в разы меньше кода. А это значит быстрота работы программиста и интепритатора увеличилась!

  Ответить  
 
 автор: Владимир55   (05.09.2010 в 20:06)   письмо автору
 
   для: Гавриленко Дмитрий   (05.09.2010 в 19:48)
 

Вам доводилось покупать скрипты? Если так, то Вы могли увидеть, какая там фигня! Не везде, конечно, но сплошь и рядом!

В своё время я приобретал их достаточно много. Так вот: по большей части они вообще не работали. Может, там и не было ошибок, но нужны были специальные настройки сервера, о которых авторы умалчивали. Или о которых сами не знали.

А кроме того, многие программисты специально запутываю коды в тех скриптах, которые продают или выставляют для бесплатного скачивания. Чтобы их было невозможно понять.

=====================
Не подумайте, что я агитирую за плохой код. В своё время я и сам тянулся к идеалу, пока не понял, что самое идеальное программирование - это когда все сделано быстро и работает исправно. За исключением высоконагруженного сервера. Но и тут, как правило, проще взять хостера помощнее.

  Ответить  
 
 автор: lElectroHardl   (05.09.2010 в 20:09)   письмо автору
 
   для: Гавриленко Дмитрий   (05.09.2010 в 19:48)
 

"Чистый" код это не только удобство, а и приучения себя к порядку.
Аналогия - порядок в комнате. Например, вы - холостяк, вашу комнату не кто не увидит. Но это же не значит, что из нее нужно делать помойку.

Так же и с кодом. В нем тоже нужно периодически (или сразу) убираться.
Вот как-то так :).

  Ответить  
 
 автор: Гавриленко Дмитрий   (05.09.2010 в 20:21)   письмо автору
 
   для: lElectroHardl   (05.09.2010 в 20:09)
 

Вот я тоже такого мнения!

  Ответить  
 
 автор: Владимир55   (05.09.2010 в 21:11)   письмо автору
 
   для: lElectroHardl   (05.09.2010 в 20:09)
 

И что, Вы будете лазить по уже готовому скрипту, менять там переменные, как-то модернизировать выражения и т.п.? При этом он непременно перестанет работать, ибо есть шанс что-то изменить неверно, и Вы вновь будете его настраивать? Ладно, если это простенький файл, а если это система, которую Вы настраивали дня три? И всё ради того, чтобы сэкономить несколько байт и какое-то количество операций, которые никто не заметит?

На мой взгляд, это похоже на мазохизм...

  Ответить  
 
 автор: lElectroHardl   (06.09.2010 в 20:00)   письмо автору
 
   для: Владимир55   (05.09.2010 в 21:11)
 

>И что, Вы будете лазить по уже готовому скрипту, менять там переменные, как-то модернизировать выражения и т.п.?
--Зачем? Ведь скрипт идеален (ну почти).

>При этом он непременно перестанет работать, ибо есть шанс что-то изменить неверно.
--Чистый код будет расположен на нескольких строках или на многих, но структурировано. Т.е. если захочешь что-то изменить, это всегда легко найти и заменить на что-то другое без вреда для всей программы (скрипта).

>И всё ради того, чтобы сэкономить несколько байт и какое-то количество операций.
--"чистый код", "структурированость", "понятно где что находиться"...

  Ответить  
 
 автор: psychomc   (05.09.2010 в 23:40)   письмо автору
 
   для: Владимир55   (05.09.2010 в 18:52)
 

лично моё мнение таково.
да, заказчиков не интересует,но:
во-первых, если вы написали всё как надо и грамотно - это значит, что у вашего сайта "не отвалятся колеса" при наступлении какой-либо исключительной ситуации.
во-вторых, написанный грамотно код намного легче сопровождать. попросят у вас через годик-другой доработать сайт, написанный по принципу "абы написать", уверен, вам будет очень тяжело разобраться что к чему

  Ответить  
 
 автор: Владимир55   (06.09.2010 в 00:10)   письмо автору
 
   для: psychomc   (05.09.2010 в 23:40)
 

Лично я ещё и не скуплюсь на комментарии. Хотя, кроме меня, их никто не прочтёт. Пусть крупными мазками, но есть смысл обозначить назначение отдельных фрагментов, начало и конец длинных циклов и т.п., а также указать, в состав какого скрипта входит данный файл и что он в нём делает.

Прежде в каждом файле я давал ещё и список переменных с их назначением, но от этого отошел. А вот список и структуру таблиц БД и сейчас пишу с указанием файлов, которые к каждой из таблиц обращаются. Если система сложная, то это очень помогает в настройке.

Считаю, что очень полезно после завершения работы набросать хотя бы краткое описание с указанием назначения системы, порядка инсталляции и настроек сервера. Полчаса потратишь, за то работа имеет законченный вид.

  Ответить  
 
 автор: psychomc   (06.09.2010 в 10:25)   письмо автору
 
   для: Владимир55   (06.09.2010 в 00:10)
 

такое чувство, что вы сами же опровергли свой пост (05.09.2010 в 18:52) :)

  Ответить  
 
 автор: Владимир55   (06.09.2010 в 11:23)   письмо автору
 
   для: psychomc   (06.09.2010 в 10:25)
 

Едва ли. ТС писал про улучшение кода и освобождение его от мусора, так что это реакция на его вопрос. А культура производства - это несколько другое.

  Ответить  
 
 автор: lElectroHardl   (05.09.2010 в 18:46)   письмо автору
 
   для: Гавриленко Дмитрий   (05.09.2010 в 00:32)
 

Написанный вами скрипт тщательно просмотреть.
Проанализировать каждый оператор (и каждую строку кода).
Понять, что лишнее (без чего можно обойтись, заменить).
Избавиться от лишнего 9заменить на более простое и компактное).
В будущем не нагружать скрипт ненужный (мусором).

+то, что говорили выше.

Это все сугубое ИМХО.

  Ответить  
 
 автор: Ирбис   (06.09.2010 в 11:31)   письмо автору
 
   для: Гавриленко Дмитрий   (05.09.2010 в 00:32)
 

Сомневаться много не нужно перед написанием скрипта - вы все равно его не напишите лучше, чем умеете на текущий момент. Просто спроектируйте скрипт(или модуль) так, как вам кажется правильным и пишите.

Проектировать скрипт или модуль нужно обязательно! Если это модуль, то нужно записать его задачи тезисно, затем разбить на отдельные скрипты, далее обозначить задачу каждого скрипта, зарисовать блок-схему скрипта, если скрипт выводит что-либо в окно браузера, то нужно нарисовать шаблон видимой части. Если между скриптами в модуле существует связь, то эту связь тоже нужно зарисовать - допустим обработчик формы и сама форма - кто кому какие данные передает и каким способом.
Только после этого следует приступать к написанию кода, когда у вас есть вся документация под рукой. Документация подскажет вам что именно следует разрабатывать и как именно это должно работать. Документацию вы, если работаете один, составляете только для себя, поэтому можете просто зарисовать все карандашом, чтобы вам было понятно и на этом ограничиться.

  Ответить  
 
 автор: Гавриленко Дмитрий   (06.09.2010 в 14:16)   письмо автору
 
   для: Ирбис   (06.09.2010 в 11:31)
 

>Сомневаться много не нужно перед написанием скрипта - вы все равно его не напишите лучше, чем умеете на текущий момент. Просто спроектируйте скрипт(или модуль) так, как вам кажется правильным и пишите.
>
>Проектировать скрипт или модуль нужно обязательно! Если это модуль, то нужно записать его задачи тезисно, затем разбить на отдельные скрипты, далее обозначить задачу каждого скрипта, зарисовать блок-схему скрипта, если скрипт выводит что-либо в окно браузера, то нужно нарисовать шаблон видимой части. Если между скриптами в модуле существует связь, то эту связь тоже нужно зарисовать - допустим обработчик формы и сама форма - кто кому какие данные передает и каким способом.
>Только после этого следует приступать к написанию кода, когда у вас есть вся документация под рукой. Документация подскажет вам что именно следует разрабатывать и как именно это должно работать. Документацию вы, если работаете один, составляете только для себя, поэтому можете просто зарисовать все карандашом, чтобы вам было понятно и на этом ограничиться.



Да, это хороший совет! Скопирую это себе на рабочий стол!

  Ответить  
 
 автор: Loki   (08.09.2010 в 14:52)   письмо автору
 
   для: Гавриленко Дмитрий   (05.09.2010 в 00:32)
 

Хочу сказать что с опытом код компактнее не становится. "Сферический код в вакууме" - возможно, а код, с которым придется жить дальше, обрастает заготовками для будущей модернизации. Все грабли на которые наступал за свою практику находят отражение в создаваемом коде. Код обрастает дополнительными классами, а потом и сам заворачивается в класс, а потом начинается борьба за несвязанность этих классов, а потом рефакторинг, попытки делать самокомментируемый код... В общем о компактности можете забыть. Только если компактность - изначальная задача.

  Ответить  
 
 автор: lElectroHardl   (08.09.2010 в 18:59)   письмо автору
 
   для: Loki   (08.09.2010 в 14:52)
 

Я даже задумался - "неужели тебе настолько не повезло?". Рассказал, как свою историю.
А вообще, если делать все с умом, то таких проблем, как вы описали, возникнуть не должно.
Ладно, они возникли! но из-за, опять таки, "чистоты" кода, эту неисправность будет легко устранить.

  Ответить  
 
 автор: Loki   (09.09.2010 в 10:42)   письмо автору
 
   для: lElectroHardl   (08.09.2010 в 18:59)
 

Каких проблем? Я вроде ни о каких проблемах не писал. Я писал что масштабируемый и легко сопровождаемый код компактным не будет.

  Ответить  
 
 автор: sim5   (09.09.2010 в 11:23)   письмо автору
 
   для: lElectroHardl   (08.09.2010 в 18:59)
 

>А вообще, если делать все с умом, то таких проблем, как вы описали, возникнуть не должно.

Боже праведный... да вы на свой код посмотрите, вы простые то вещи написать не можете, хотелось бы надеяться, что пока...

  Ответить  
 
 автор: Loki   (09.09.2010 в 12:03)   письмо автору
 
   для: sim5   (09.09.2010 в 11:23)
 

>Боже праведный... да вы на свой код посмотрите, вы простые то вещи написать не можете, хотелось бы надеяться, что пока...
Заинтриговали... посмотрел последние темы... "и эти люди запрещают мне ковыряться в носу":)

  Ответить  
 
 автор: sim5   (09.09.2010 в 12:33)   письмо автору
 
   для: Loki   (09.09.2010 в 12:03)
 

:))

  Ответить  
 
 автор: lElectroHardl   (09.09.2010 в 17:44)   письмо автору
 
   для: Loki   (09.09.2010 в 12:03)
 

Я и не говорю, что я батько PHP. Я высказал свое мнение. Что с компактным и структурированным кодом легче работать.

  Ответить  
 
 автор: psychomc   (09.09.2010 в 20:08)   письмо автору
 
   для: lElectroHardl   (09.09.2010 в 17:44)
 

а если задача объемная и сложная?

  Ответить  
 
 автор: Loki   (10.09.2010 в 09:36)   письмо автору
 
   для: lElectroHardl   (09.09.2010 в 17:44)
 

Ну это Вы фигню сказали. В качестве пищи для размышления скажу что обфусцированный код очень компактный... и его даже можно оставить структурированным.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования