<!--WEB-->: Причём, интересная штука — недоступен, если авторизован. Через какой-то промежуток форум, видимо, автоматически разлогинивает (ну я так предполагаю) и становится доступным, но стоит авторизоваться, и опять датабэйз иро.
Это как-раз просто. Клудфларе отдает страницу из кеша для неавторизованных, а для авторизованных - сайт лежит.
Фома, тут mysqli, кеширование в довольно ограниченном виде и еще целая пачка проблем связанных с движком форума. Печально, но альтернативы были еще хуже когда я смотрел. Лечится всё, но не всегда цель оправдывает средства.
---------- Добавлено 12.12.2016 в 13:44 ----------
Фома: Слово "невозможно" конечно прямым текстом не употребляется, но смысл предлоения именно такой.
В приведенной цитате напрашивается другое прочтение - что падение базы по вине хостера возможно только на шареде, а на ВДС она упадет только от большой нагрузки или кривости скрипта. Ну а нагрузка может быть и от ДДОС и от кривости.
Специалист специалистом, но... уберите всё не нужное в "вторую очередь".
Выбор филиалов это важно или можно их списком сделать?
Чисто статья и чисто поиск по ней?)
Аякс это важно? Ведь сделав смену страницы после каждого выбора, вы бы упростили логику и сами бы не запутались. Программист не запутается, но час времени сэкономит. Не в том дело что обсуждаем, а в общем подходе. Сократите еще больше. Наверняка в других местах излишком тоже много.
У меня друг пятый год "запускается". Пятая версия сайта. Только выкатили версию под сео, вот только в этом месяце реальный траф пошел, со следующего месяца начинается монетизация. Пятый год! Дорабатывать! Функционал! Проект крутой, да, но блин!
Фильтровать ввод это хорошая мысль. Для 2005-2007 годов.
Хорошо что вы до нее додумались, но плохо что вы хотите на ней ехать.
Не подумайте неправильно - фильтровать ввод нужно (не всегда, но нужно).
Просто именно для этой проблемы это не то решение.
В конкретном случае вам нужен PDO и его параметризированные запросы.
И вопрос инъекции отпадает сразу во всем проекте. Ну не совсем уж отпадает, но становится сильно затруднителен и без эксплуатации набора других ошибок - невозможным. Попутно ЗНАЧИТЕЛЬНО упрощается вопрос переноса вашего скрипта на другие СУБД, например SQLite или Постгри. Всего скрипта а не только этой странички.
Далее, если вы просто пойдете в Википедию, и почитаете про DRY, и посмотрите на тот код что у вас получился, то у вас возникнет вопрос.
И в ответ на этот вопрос вы захотите иметь что-то вроде $db->sql($sql,['param1'=>'param1,'param2'=>'param2']);
Потом будет SOLID, MVC (Толстые. Уродливые. Контроллеры. ФУУУУУУ!).
Или вот есть у вас простая в сущности задача. Рутинная до безобразия.
Форму ввода создать. Ну скажем заказ какой принять от пользователя.
В форме будет не очень много полей. Скажем 30.
Разные. Это и да/нет, и текстовые, и цифровые, и загрузить и выбрать картинку, и текст с оформлением (с редактором типа Тини или ЦКЕдитора) ну и т.п.
Ну банальный заказ.
Выводим поля соответствующих типов.
Выводим к ним подписи, подсказки (вопросики такие, с всплывающим текстом при наведении мышки), плейсхолдеры и т.п.
У каждого поля пару проверок вроде того цифровое ли оно, обязательное ли, проверка уникальности (запрос в базу), максимальная/минимальная длина и т.п.
Ну примерно 50 проверок на всю форму.
К каждому полю надо вывести сообщение об ошибке, если оно неправильно написано..
Конечно же подписи у всего этого должны быть на разных языках, как и сообщения об ошибках и т.п. Т.е. в отдельных файликах лежат все строки которые нам нужны, и можно сделать новый файлик с именем другого языка, не колупая код.
Как думаете как много кода для этого понадобится?
В принципе у каждого код будет разным, но лично я пишу вот так:
Ну и получение этой самой $model и ее обработка выглядят примерно так:
public function createAction() {
$page = $this->preparePage();
// **********************************************************************
$model = s()->post()->getModel($this->boxName);
if(!$model->isNew() AND $model->isValid()) {
$model->save();
$this->redirect();
} else {
$page->model = $model;
s()->layout()->show($page);
}
}
Здесь мы выводим форму в браузер (вызываем код который приведен выше), разбираем данные формы, проверяем ее на правила, если она заполнена правильно, то сохраняем и редиректим куда нужно, если нет, то отдаем ошибки той форме что была приведена выше, и опять выводим.
Плюс еще миллион и маленькая тележка других действий.
Например вы могли заметить чуть выше непонятную строчку <?=s()->xsrf()->field ?>.
Эта строчка выводит специальный код, а в s()->post()->getModel($this->boxName); мы не только получаем данные из $_POST, разбираем их и т.п., но и проверяем правильность этого кода.
А иначе что? А иначе XSRF. У вас ведь наверняка есть XSRF. Вот прям сейчас пойдете. Прочитаете. И - опа! Ведь есть же. Ну признайтесь? :)
Ну вот мы тут насоветовали на страницу, потом еще на одну. Вы всё поняли. Даже PDO используете.
Чувствуете себя в безопасности, а тут раз и XSRF :)))
И не говорите "да кому я нужен, кто меня ломать будет". Мы это уже оборжали выше.
Поймите простую вещь.
Всё что вы напишите будет криво, небезопасно и бесполезно ибо до Вас это уже десять раз написали.
Да, Вы научитесь. Да, это нужно. Но не делайте на таком коде реальные сайты.
Возьмите лучше Вордпресс. Он ужасен в плане кода, но там уже хоть какая-то основа есть.
А если чисто поучиться, и потом сесть за что-то взрослое, то дерзайте.
Но Ваша задача с филиалами а до этого с картинкой уж больно похожа на то, что вы это в реальном проекте используете (ужас, ужас)...
Ну вы бы хоть рассказали что запасаете.
Так то вам уже сказали - написать 100 статей.
Но если уточните тематику запасов, то может будет что-то конкретное.
А что если мне нужно продвинуть одну страницу под 500 низкочастотных ключей?)
Поменять цели, не?)
Я могу себе представить такую ситуацию, но это уж очень должны звезды сойтись.
А оно под правило о спаме не подпадает?
Отзыв от человека продвигающего используемый в проекте софт, написавшего обтекаемый отзыв, да еще и выбранного непрозрачно - ну не считается.
Если тема обретет отзывы, то может заинтересуюсь, поэтому уточняющий вопрос:
Географию трафика можно будет ограничить?
Скажем сделаю свой проект на региональном домене. И лить туда адалт-траф соответствующего региона?
Или полный микс и только ТДС-кой забирать подходящий траф а остальное сливать на партнерки?
Причём, интересная штука — недоступен, если авторизован. Через какой-то промежуток форум, видимо, автоматически разлогинивает (ну я так предполагаю) и становится доступным, но стоит авторизоваться, и опять датабэйз иро.
Это как-раз просто. Клудфларе отдает страницу из кеша для неавторизованных, а для авторизованных - сайт лежит.
Москальские счетчики вне закона в Европе?
Ну мейл.ру это не вся Московия. Мейл.ру везде не в почете.
Аналог гуглоформ?)
Тоже хочу сделать, но пока руки не дошли. Так что у меня пока все формы только через админа создаются.
Фома, тут mysqli, кеширование в довольно ограниченном виде и еще целая пачка проблем связанных с движком форума. Печально, но альтернативы были еще хуже когда я смотрел. Лечится всё, но не всегда цель оправдывает средства.
---------- Добавлено 12.12.2016 в 13:44 ----------
Слово "невозможно" конечно прямым текстом не употребляется, но смысл предлоения именно такой.
В приведенной цитате напрашивается другое прочтение - что падение базы по вине хостера возможно только на шареде, а на ВДС она упадет только от большой нагрузки или кривости скрипта. Ну а нагрузка может быть и от ДДОС и от кривости.
+146
Эротическая реклама на вашем историческом сайте вас не смущает, а вот счетчик удивил?)
С другой стороны куча контента + ЯК. (В котором опечатка в заголовке, вы вкурсе?)
Переклеить на что-то более самостоятельное это вообще реально?
В принципе можно повесить на сайт платный домен, думаю юкоз даст поклеить этот бесплатный с платным? А потом платный унести.
Кто с юкозом дело имел?
Специалист специалистом, но... уберите всё не нужное в "вторую очередь".
Выбор филиалов это важно или можно их списком сделать?
Чисто статья и чисто поиск по ней?)
Аякс это важно? Ведь сделав смену страницы после каждого выбора, вы бы упростили логику и сами бы не запутались. Программист не запутается, но час времени сэкономит. Не в том дело что обсуждаем, а в общем подходе. Сократите еще больше. Наверняка в других местах излишком тоже много.
У меня друг пятый год "запускается". Пятая версия сайта. Только выкатили версию под сео, вот только в этом месяце реальный траф пошел, со следующего месяца начинается монетизация. Пятый год! Дорабатывать! Функционал! Проект крутой, да, но блин!
Но вопрос такой:
Это неверный вопрос.
Вы находитесь в рамках устаревших парадигм.
Фильтровать ввод это хорошая мысль. Для 2005-2007 годов.
Хорошо что вы до нее додумались, но плохо что вы хотите на ней ехать.
Не подумайте неправильно - фильтровать ввод нужно (не всегда, но нужно).
Просто именно для этой проблемы это не то решение.
В конкретном случае вам нужен PDO и его параметризированные запросы.
И вопрос инъекции отпадает сразу во всем проекте. Ну не совсем уж отпадает, но становится сильно затруднителен и без эксплуатации набора других ошибок - невозможным. Попутно ЗНАЧИТЕЛЬНО упрощается вопрос переноса вашего скрипта на другие СУБД, например SQLite или Постгри. Всего скрипта а не только этой странички.
Далее, если вы просто пойдете в Википедию, и почитаете про DRY, и посмотрите на тот код что у вас получился, то у вас возникнет вопрос.
И в ответ на этот вопрос вы захотите иметь что-то вроде $db->sql($sql,['param1'=>'param1,'param2'=>'param2']);
Потом будет SOLID, MVC (Толстые. Уродливые. Контроллеры. ФУУУУУУ!).
Ну и сразу вернемся к работе с базой...
Каждый раз писать Селект? Да еще с JOIN и т.п.?
Может хочется что-то вроде
$country = $allCountry->findOne($countryId);
if($country) {
$countryCity = $country->citys->findAll();
$currentCity = $country->citys->findOne($cityID);
$currentFilial = $currentCity->findOne($filialId);
}
тогда читаем про ActiveRecord.
Или вот есть у вас простая в сущности задача. Рутинная до безобразия.
Форму ввода создать. Ну скажем заказ какой принять от пользователя.
В форме будет не очень много полей. Скажем 30.
Разные. Это и да/нет, и текстовые, и цифровые, и загрузить и выбрать картинку, и текст с оформлением (с редактором типа Тини или ЦКЕдитора) ну и т.п.
Ну банальный заказ.
Выводим поля соответствующих типов.
Выводим к ним подписи, подсказки (вопросики такие, с всплывающим текстом при наведении мышки), плейсхолдеры и т.п.
У каждого поля пару проверок вроде того цифровое ли оно, обязательное ли, проверка уникальности (запрос в базу), максимальная/минимальная длина и т.п.
Ну примерно 50 проверок на всю форму.
К каждому полю надо вывести сообщение об ошибке, если оно неправильно написано..
Конечно же подписи у всего этого должны быть на разных языках, как и сообщения об ошибках и т.п. Т.е. в отдельных файликах лежат все строки которые нам нужны, и можно сделать новый файлик с именем другого языка, не колупая код.
Как думаете как много кода для этого понадобится?
В принципе у каждого код будет разным, но лично я пишу вот так:
Ну и получение этой самой $model и ее обработка выглядят примерно так:
Здесь мы выводим форму в браузер (вызываем код который приведен выше), разбираем данные формы, проверяем ее на правила, если она заполнена правильно, то сохраняем и редиректим куда нужно, если нет, то отдаем ошибки той форме что была приведена выше, и опять выводим.
Плюс еще миллион и маленькая тележка других действий.
Например вы могли заметить чуть выше непонятную строчку <?=s()->xsrf()->field ?>.
Эта строчка выводит специальный код, а в s()->post()->getModel($this->boxName); мы не только получаем данные из $_POST, разбираем их и т.п., но и проверяем правильность этого кода.
А иначе что? А иначе XSRF. У вас ведь наверняка есть XSRF. Вот прям сейчас пойдете. Прочитаете. И - опа! Ведь есть же. Ну признайтесь? :)
Ну вот мы тут насоветовали на страницу, потом еще на одну. Вы всё поняли. Даже PDO используете.
Чувствуете себя в безопасности, а тут раз и XSRF :)))
И не говорите "да кому я нужен, кто меня ломать будет". Мы это уже оборжали выше.
Поймите простую вещь.
Всё что вы напишите будет криво, небезопасно и бесполезно ибо до Вас это уже десять раз написали.
Да, Вы научитесь. Да, это нужно. Но не делайте на таком коде реальные сайты.
Возьмите лучше Вордпресс. Он ужасен в плане кода, но там уже хоть какая-то основа есть.
А если чисто поучиться, и потом сесть за что-то взрослое, то дерзайте.
Но Ваша задача с филиалами а до этого с картинкой уж больно похожа на то, что вы это в реальном проекте используете (ужас, ужас)...