Хочу предупредить возможных покупателей web-zona.ru

12 3
-
На сайте с 07.12.2005
Offline
97
-K-
9250

Купил вот тут web-zona.ru скрипт доски объявлений - небыло времени на написание самому и решил что за 100$ то я куплю нормальный, безглючный скрипт. По функционалу вроде бы то что надо. Каково же было разочарование после приобретения... MySQL запросы пришлось переписывать практически все! Да и сам код не идеальный в плане оптимизации, не говоря уже о варнингах на 2 экрана при открытии любой страницы. Пишу потому что уже накипело все это исправлять! Здесь буду приводить самые маразматичные моменты и как сделал я, а вы уж сами решайте... Может я тут только зря воду мучу.

Первый пример, подсчет кол-ва размещенных объявлений вчера и сегодня для вывода на ВСЕХ страницах, т. е. этот кусок кода дегается постоянно!

Было:


$nextday = date('Y-m-d', time() - (1 * 24 * 60 * 60));
$nextday = explode('-', $nextday);
$m_yesterday = $nextday[1];
$d_yesterday = $nextday[2];

$y=date('Y');
$m=date('m');
$d=date('d');

$cout_yesterday=mysql_query("SELECT count(*) as count FROM wzb_details WHERE action='1' and YEAR(date) = '".addslashes($y)."' and MONTH(date) = '".addslashes($m_yesterday)."' and DAYOFMONTH(date) = '".addslashes($d_yesterday)."' ORDER BY date desc ");
$rowct_yesterday = @mysql_fetch_array($cout_yesterday);
$count_yesterday = $rowct_yesterday['count'];

$cout=mysql_query("SELECT count(*) as count FROM wzb_details WHERE action='1' and YEAR(date) = '".addslashes($y)."' and MONTH(date) = '".addslashes($m)."' and DAYOFMONTH(date) = '".addslashes($d)."' ORDER BY date desc ");
$rowct = @mysql_fetch_array($cout);
$count_today = $rowct['count'];

Стало:


$today = date("Y-m-d");

$cout_yesterday=mysql_query("SELECT count(*) FROM wzb_details WHERE action='1' AND DATE_FORMAT(date, '%Y-%m-%d')=DATE_ADD('".$today."',INTERVAL -1 DAY)");
$count_yesterday = mysql_result($cout_yesterday, 0);

$cout=mysql_query("SELECT count(*) FROM wzb_details WHERE action='1' and DATE_FORMAT(date, '%Y-%m-%d')='".$today."'");
$count_today = mysql_result($cout, 0);

ЗЫ. Про SQL иньекции похоже вообще не слышал, а зачем нужно использовать addslashes() имеет приблизительное представление. Вот например:

DAYOFMONTH(date) = '".addslashes($d_yesterday)."'
- слешит целое число, полученное из функции date(), а данные из поля textarea может и прям так в базу фигануть :confused:
-
На сайте с 07.12.2005
Offline
97
-K-
#1

Вот так вот мы обрабатываем полученное из БД поле типа TEXT перед выводом:


$description=str_replace("<","<",$valw['description']);
$description=str_replace(">",">",$description);
$description=str_replace("<","&lt;",$description);
$description=str_replace(">","&gt;",$description);
$description = bbcode($description);
$description = nl2br($description);

Даже если оставить так, то встает вопрос, какой идиот придумал htmlspecialchars() если можно обойтись вышеприведенными четыремя строчками?

А вот так вот перед сохранением в БД:


$f_user_text = $_POST['user_text'];
$f_user_text = parseurl($f_user_text);
$f_user_text = word_wrap($f_user_text);
$f_user_text = badtext($f_user_text);

а дальше прям так записываем в базу! ☝ Функция word_wrap() - это вообще что-то с чем-то:


function word_wrap($text){

$wrap = '15';

if($wrap > 1){
$wraped_arr = explode("\n", $text);
foreach($wraped_arr as $line){
$wraped .= ereg_replace("([^ \/\/]{".$wrap."})","\\1<br>", $line) ."\n";
}
$text = $wraped;
return $text;
}
}
-
На сайте с 07.12.2005
Offline
97
-K-
#2

Еще одна интересная функция обнаружилась, но это уже из разряда "было":

было:


function today_put_in_cat_items($cat)
{
$m=date('m');
$y=date('Y');
$d=date('d');

$cout=mysql_query("SELECT count(*) as count FROM wzb_details WHERE action='1' and YEAR(date) = '".addslashes($y)."' and MONTH(date) = '".addslashes($m)."' and DAYOFMONTH(date) = '".addslashes($d)."' and cat = '".addslashes($cat)."'");

$row4 = mysql_fetch_array($cout);
$count_b = $row4['count'];
return $count_b;
}

стало:


function today_put_in_cat_items($cat)
{
$cout=mysql_query("SELECT count(details) FROM wzb_details WHERE action='1' AND DATE_FORMAT(date, '%Y-%m-%d')='".date("Y-m-d")."' AND cat = '".addslashes($cat)."'");
$result = mysql_result($count, 0);
mysql_free_result($count);

return $result;
}
FedXP
На сайте с 31.05.2006
Offline
28
#3

Да уж, нарвался ты на нехорошее...

Пусть за такой труд разработчики денег еще доплатят :)

Профессиональный скрипт доски объявлений. (http://www.monsters-board.ru/) | Продажа скрипта доски объявлений (http://general.monsters-board.ru/)
[Удален]
#4

Да уж... И это продают за деньги... :(

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

FedXP
На сайте с 31.05.2006
Offline
28
#5

Ну я думаю, что порой надо прежде чем купить смотреть. Сам в свое время нарвался на каталог ссылок - который еще и имел упаковочку симпотную зеленую. Ужас просто. Там все было в зенде, половина функция глючила.

Пропали тогда мои 250 баксов. :)

Макс
На сайте с 14.12.2005
Offline
131
#6

Тоже покупал этот скрипт футболили меня с одного хостинг на другой за большое количество запросов MYSQL.Писал разработчику что скрипт оказывает большую нагрузку никаких патчей неполучил в итоге помучившись в доволь снёс его и купил другой теперь доволен и поддержку мне оказывается в полном объёме.

FedXP
На сайте с 31.05.2006
Offline
28
#7

А какой купил?

P.S. И я снес, толку от их базы со временем вообще ноль стало.

Макс
На сайте с 14.12.2005
Offline
131
#8
FedXP:
А какой купил?
P.S. И я снес, толку от их базы со временем вообще ноль стало.

Если вопрос ко мне то покупал скрипт доски объявлений

qRoof
На сайте с 12.09.2006
Offline
6
#9

    $y=date('Y'); 

$m=date('m');
$d=date('d');

Особенно порадовало 🚬

Америка, которую нам не показывают | JC | J. CMS
-
На сайте с 07.12.2005
Offline
97
-K-
#10

Большую часть переписал, но на некоторый бред хотелось бы еще особо обратить внимание :)

Прикрепление изображений к объявлению.

Метод автора: для начала определим сколько нам необходимо прикреплять изображений к объявлению? Пусть будет 3! Не вопрос, в таблице с объявлениями добавляем 3 поля photo, photo1, photo2 где будем хранить имя изображения. Далее в странице добавления объявления 3 раза повторяем кусок кода для загрузки изображения, а на странице редактирования объявления - обрабатываем 3 действия для удаления картинки из объявления, разумеется 3 идентичными кусками кода! Теперь допустим я решил что мне мало 3 фотографий для объявления, хочу 15 - таблица обзаводится еще 12 полями, а в коде размножаем одинаковые куски по 12 раз? Почему же нельзя было создать отдельную табличку куда писать имя файла, ID объявления, а кол-во изображений для объявлений ограничить в конфиге?

Загрузка списка категорий.

Для получения категорий левого (основного меню), (см. аттачмент) основного списка (тот который с иконками в центре) и в центре ниже используются 3 разных метода - которые непременно рекурсивно лазеют в базу ☝ Т.е. для кол-ва рубрик на скриншоте получится около 40 SQL запросов!!! А если рубрик будет больше и вложенность увеличена - то это настоящее испытание для SQL сервера. В итоге был написан 1 запрос, из которого строится полное дерево категорий и передается в шаблон, а там уже в разных местах по разному разбирается одно и тоже дерево.

Ну и так еще некоторые перлы с которыми столкнулся :)

На главной странице выводятся последние объявления, при просмотре раздела - там так же выводятся последние объявления этого раздела. Логично было предположить что используется один метод для получения последних объявлений в зависимости от рубрики (на главной от корня). Но только не здесь! На каждой странице (даже при создании объявления) из базы выгребаются последние для главной, а при просмотре рубрик - выбираются еще и для рубрики. Вот так вот.

Пока все... Но это только пока - работа еще не закончена.

ЗЫ Для всех желающих или вложивших деньги в это чудо разработки по окончании работ будет выложен дистриб под GPL

jpg wz.jpg
12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий