Опробовал «в реальной жизни» озвученную два года назад идею о том, что большинство веб-сайтов можно и нужно рассматривать, как красивый интерфейс к базе данных. Учитывая то, что я знаю PHP примерно на уровне журнала «Ксакеп», получившийся код мог бы быть и красивше, но вот такой код странички мне уже почти нравится:
require_once 'includes/config.inc';
require_once 'includes/database.inc';
require_once 'widgets/schemeWidget.inc';
require_once 'widgets/partslistWidget.inc';
$snum = isset($_GET['page']) ? $_GET['page'] : 1;
$link = new dbLink();
$scheme = new schemeWidget($link, "SELECT sdesc, sfilename
FROM schemes
WHERE snum='%s';",
$snum);
$scheme->show();
$partslist = new partslistWidget($link, "SELECT shinnernumber, pname, phcatnum, phproducer
FROM parts
INNER JOIN shown_in ON shown_in.pnum=parts.pnum
LEFT OUTER JOIN parts_phys ON parts.pnum=parts_phys.pnum
WHERE snum='%s'
ORDER BY shinnernumber;",
$snum);
$partlist->show();
Понятно, что это очередная попытка переизобрести MVC (точнее, пока просто MV — Model-View, а Controller пока не нужен) — но идея делать сайты по принципу «база данных плюс форматирование результатов запроса» оказалась вполне жизнеспособной. В порядке дальнейшего изобретения велосипедов — а не замахнуться ли на «свой WordPress с блекджеком и шлюхами«?
«а не замахнуться ли на» — Каганов в свое время именно так и сделал, написав себе движок.
Меня во всех этих «самопальных движках» сильно напрягает их страшная уебищность и понимание того, что я сделаю еще одно такое же жуткое поделие :)
а ты замахнись на магазин, и тогда будет правильное направление.
Ни одной работающей eStore CMS на сегодня нет.
$snum = intval ( isset($_GET[‘page’])? $_GET[‘page’] : 1′ );
Иначе придёт в page буквально следующее: 1′; drop schemas; select 1 from dual where ‘a’ = ‘a
«Этого вы от меня не добьетесь, гражданин Гадюкин!»
Параметры я стерилизую (mysql_real_escape_string, насколько я помню, этого достаточно) в конструкторе queryWidget, от которого наследуются и schemeWidget, и partslistWidget.
Данные надо проверять на входе, а не в середине.
Проверять или преобразовывать в нужный формат?