скидываю кусок кода фронтенд функции NEW BOARD ITEM
if ($do=='additem'){ // Получаем категории, в которые может загружать пользователь $catslist = $model->getPublicCats($model->category_id); if(!$catslist) { cmsCore::addSessionMessage($_LANG['YOU_CANT_ADD_ADV_ANY'], 'error'); $inCore->redirect('/board'); } $cat['is_photos'] = 1; if ($model->category_id && $model->category_id != $model->root_cat['id']) { $cat = $model->getCategory($model->category_id); $formsdata = cmsForm::getFieldsHtml($cat['form_id']); } $inPage->addPathway($_LANG['ADD_ADV']); if ( !$inCore->inRequest('submit') ) { if (IS_BILLING) { cmsBilling::checkBalance('board', 'add_item'); } $inPage->setTitle($_LANG['ADD_ADV']); $item = cmsUser::sessionGet('item'); if ($item) { cmsUser::sessionDel('item'); } $item['city'] = $item['city'] ? $item['city'] : $inDB->get_field('cms_user_profiles', 'id='.$inUser->id, 'city'); $smarty = $inCore->initSmarty('components', 'com_board_edit.tpl'); $smarty->assign('action', "/board/add.html"); $smarty->assign('form_do', 'add'); $smarty->assign('cfg', $model->config); $smarty->assign('cat', $cat); $smarty->assign('item', $item); $smarty->assign('pagetitle', $_LANG['ADD_ADV']); $smarty->assign('cities', $model->getBoardCities($item['city'])); $smarty->assign('formsdata', $formsdata); $smarty->assign('is_admin', $inUser->is_admin); $smarty->assign('is_user', $inUser->id); $smarty->assign('catslist', $catslist); $smarty->assign('is_billing', IS_BILLING); if (IS_BILLING){ $smarty->assign('balance', $inUser->balance); } $smarty->display('com_board_edit.tpl'); cmsUser::sessionClearAll(); return; } if ( $inCore->inRequest('submit') ) { // проверяем на заполненость скрытое поле $title_fake = cmsCore::request('title_fake', 'str', ''); // если оно заполнено, считаем что это бот, 404 if ($title_fake) { cmsCore::error404(); } $errors = false; // проверяем наличие категории if (!$cat['id']) { cmsCore::addSessionMessage($_LANG['NEED_CAT_ADV'], 'error'); $errors = true; } // Проверяем количество добавленных за сутки if (!$model->checkLoadedByUser24h($cat)){ cmsCore::addSessionMessage($_LANG['MAX_VALUE_OF_ADD_ADV'], 'error'); $errors = true; } // Можем ли добавлять в эту рубрику if (!$model->checkAdd($cat)){ cmsCore::addSessionMessage($_LANG['YOU_CANT_ADD_ADV'], 'error'); $errors = true; } // входные данные $obtype = icms_ucfirst(cmsCore::request('obtype', 'str', '')); $title = cmsCore::request('title', 'str', ''); $content = cmsCore::request('content', 'str', ''); $city_ed = cmsCore::request('city_ed', 'str', ''); $city = cmsCore::request('city', 'str', ''); $city = icms_ucfirst(($city && $city!='all') ? ($city_ed ? $city_ed : $city) : $city_ed); $form_input = cmsForm::getFieldsInputValues($cat['form_id']); $formsdata = $inDB->escape_string(cmsCore::arrayToYaml($form_input['values'])); $vipdays = cmsCore::request('vipdays', 'int', 0); $sroklic = cmsCore::request('sroklic', 'str', ''); $pricelic = cmsCore::request('pricelic', 'str', ''); $pricelic2 = cmsCore::request('pricelic2', 'str', ''); $skidka = cmsCore::request('skidka', 'str',''); $skidka2 = cmsCore::request('skidka2', 'str',''); $published = $model->checkPublished($cat); if ($model->config['srok']){ $pubdays = (cmsCore::request('pubdays', 'int') <= 50) ? cmsCore::request('pubdays', 'int') : 50; } if (!$model->config['srok']){ $pubdays = isset($model->config['pubdays']) ? $model->config['pubdays'] : 14; } // Проверяем значения if (!$title) { cmsCore::addSessionMessage($_LANG['NEED_TITLE'], 'error'); $errors = true; } if (!$content) { cmsCore::addSessionMessage($_LANG['NEED_TEXT_ADV'], 'error'); $errors = true; } if (!$city) { cmsCore::addSessionMessage($_LANG['NEED_CITY'], 'error'); $errors = true; } //if (!$sroklic && $cat_id==11) { cmsCore::addSessionMessage($_LANG['NEED_SROK'], 'error'); $errors = true; } //if (!$pricelic && $cat_id==11) { cmsCore::addSessionMessage($_LANG['NEED_PRICE'], 'error'); $errors = true; } if (!$inUser->id && !$inCore->checkCaptchaCode(cmsCore::request('code', 'str'))) { cmsCore::addSessionMessage($_LANG['ERR_CAPTCHA'], 'error'); $errors = true; } // Проверяем значения формы foreach ($form_input['errors'] as $field_error) { if($field_error){ cmsCore::addSessionMessage($field_error, 'error'); $errors = true; } } if ($errors){ $item['obtype'] = $obtype; $item['sroklic'] = $sroklic; $item['pricelic'] = $pricelic; $item['pricelic2'] = $pricelic2; $item['skidka'] = $skidka; $item['skidka2'] = $skidka2; cmsUser:
#2
20 августа 2013 в 14:14
public function addRecord($item){ $inUser = cmsUser::getInstance(); $item = cmsCore::callEvent('ADD_BOARD_RECORD', $item); $sql = "INSERT INTO cms_board_items (category_id, user_id, obtype, title , content, formsdata, city, pubdate, pubdays, published, file, hits, ip) VALUES ({$item['category_id']}, {$item['user_id']}, '{$item['obtype']}', '{$item['title']}', '{$item['content']}', '{$item['formsdata']}', '{$item['city']}', NOW(), {$item['pubdays']}, {$item['published']}, '{$item['file']}', 0, INET_ATON('{$inUser->ip}'))"; $this->inDB->query($sql); $item_id = $this->inDB->get_last_id('cms_board_items'); return $item_id ? $item_id : false; } /* ==================================================================================================== */ /* ==================================================================================================== */ public function updateRecord($id, $item){ $item = cmsCore::callEvent('UPDATE_BOARD_RECORD', $item); $this->inDB->update('cms_board_items', $item, $id); return true; }
trOid, не выкладывайте такие портянки, прячьте за спойлер.
lokanaft уже намекнул куда думать, дополню:
addRecord привести к виду
выполнить запросы к бд
Соответственно поля в таблице должны быть названы так же как у вас в коде pricelic, sroklic и т.д
lokanaft уже намекнул куда думать, дополню:
addRecord привести к виду
public function addRecord($item){ $item = cmsCore::callEvent('ADD_BOARD_RECORD', $item); return $this->inDB->insert('cms_board_items', $item); }
ALTER TABLE `cms_board_items` CHANGE `hits` `hits` INT( 11 ) UNSIGNED NOT NULL DEFAULT '0'
ALTER TABLE `cms_board_items` CHANGE `pubdate` `pubdate` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
Сегодня в 21:23
#4
21 августа 2013 в 04:52
что то вы меня еще больше запутали!
в оригинале 1.10.2 функция addRecord такая
мне ее менять на это?
в оригинале 1.10.2 функция addRecord такая
'category_id'=>$model->category_id, 'user_id'=>$inUser->id, 'obtype'=>$obtype, 'title'=>$title, 'content'=>$content, 'formsdata'=>$formsdata, 'city'=>$city, 'pubdays'=>$pubdays, 'published'=>$published, 'file'=>$file['filename'] ));
$item = cmsCore::callEvent('ADD_BOARD_RECORD', $item); $sql = "INSERT INTO cms_board_items (category_id, user_id, obtype, title , content, formsdata, city, pubdate, pubdays, published, file, hits, ip) VALUES ({$item['category_id']}, {$item['user_id']}, '{$item['obtype']}', '{$item['title']}', '{$item['content']}', '{$item['formsdata']}', '{$item['city']}', NOW(), {$item['pubdays']}, {$item['published']}, '{$item['file']}', 0, INET_ATON('{$inUser->ip}'))";
#5
21 августа 2013 в 08:04
Ты сам запутался уже. Функция addRecord находится в /components/board/model.phpв оригинале 1.10.2 функция addRecord такая
public function addRecord($item){ $inUser = cmsUser::getInstance(); $item = cmsCore::callEvent('ADD_BOARD_RECORD', $item); $sql = "INSERT INTO cms_board_items (category_id, user_id, obtype, title , content, formsdata, city, pubdate, pubdays, published, file, hits, ip) VALUES ({$item['category_id']}, {$item['user_id']}, '{$item['obtype']}', '{$item['title']}', '{$item['content']}', '{$item['formsdata']}', '{$item['city']}', NOW(), {$item['pubdays']}, {$item['published']}, '{$item['file']}', 0, INET_ATON('{$inUser->ip}'))"; $this->inDB->query($sql); $item_id = $this->inDB->get_last_id('cms_board_items'); return $item_id ? $item_id : false; }
'category_id'=>$model->category_id, 'user_id'=>$inUser->id, 'obtype'=>$obtype, 'title'=>$title, 'content'=>$content, 'formsdata'=>$formsdata, 'city'=>$city, 'pubdays'=>$pubdays, 'published'=>$published, 'file'=>$file['filename'] ));
INSERT INTO cms_board_items (category_id, user_id, obtype, title, content, formsdata, city, pubdate, pubdays, sroklic,pricelic,pricelic2,skidka,skidka2, published, file, hits, ip)
Соответственно и укажи значения VALUES {$item['sroklic']}, $item['pricelic']} и тд.
Установи строки отладчика Открой файл лога links.txt в нотепаде, при каждой перезагрузке страницы увидиш все входящие переменные и вся обработка функций будет ясна как день.
спасибо всем за развернутый ответ! попробую :)
Спасибо, все работает если заполнены все поля! НО!
у меня две категории объявлений, "заявки" и "лицензии"
соответственно поля для ввода разные, точнее sroklic,pricelic,pricelic2,skidka,skidka2 — не заполняются в заявках.
А так же в лицензиях если поле не заполнено, то вылазит страница 404 /board/read.html, некоторые поля не обязательны для запонения… как сделать проверку?
такая конструкция правильная?
Как быть с необязательными полями?
у меня две категории объявлений, "заявки" и "лицензии"
соответственно поля для ввода разные, точнее sroklic,pricelic,pricelic2,skidka,skidka2 — не заполняются в заявках.
А так же в лицензиях если поле не заполнено, то вылазит страница 404 /board/read.html, некоторые поля не обязательны для запонения… как сделать проверку?
if (!$sroklic && $cat_id==11) { cmsCore::addSessionMessage($_LANG['NEED_SROK'], 'error'); $errors = true; } if (!$pricelic && $cat_id==11) { cmsCore::addSessionMessage($_LANG['NEED_PRICE'], 'error'); $errors = true; }
Как быть с необязательными полями?
ВСЕМ СПАСИБО! но проблема все еще не решена, т.е. если будут пустые значения необязательных полей — 404 ошибка :(
#9
21 августа 2013 в 19:03
В подкатах есть additem, есть edititem? Это был первый вопрос. Теперь тема read, на основе каких божественных провидений предполагать что там присходит в вашем варианте?
В моделе public function getRecord($item_id)
******
a.public as public,
a.sroklic as sroklic,
a.pricelic as pricelic, и далее по аналогии.
Пустые значения полей не приводят к 404.
frontend
Открываем нотепадом файл лога отладчика links.txt. И внимательно разбираем.
******
a.public as public,
a.sroklic as sroklic,
a.pricelic as pricelic, и далее по аналогии.
Пустые значения полей не приводят к 404.
frontend
//находим if($do=='read'){ //вставляем "Начать отладку" // используем отладчик версия php 5.3 (OpenServer||Denver) xdebug_start_trace('C:\usr\***\**\links');//путь к файлу лога links.txt //Исследуем отладчиком код /board/frontend.php приводящий к ошибке 404 $item = $model->getRecord($model->item_id); if (!$item){ cmsCore::error404(); } // неопубликованные показываем админам, модераторам и автору if (!$item['published'] && !$item['moderator']) { cmsCore::error404(); } //вставляем "Закончить отладку" xdebug_stop_trace();
#11
22 августа 2013 в 04:40
добавил в function getRecord($item_id)
теперь при добавлении, если все поля заполнены — 404 ошибка board/read118.html, хотя на /board/ объявление показывается норм.
если не все поля — та же байда 404. /board/read.html
а так же перестают удаляться объявления в админке
насчет оттладчика, я не понял как его применять на хостинге, т.е. путь к файлу не могу указать правильный. получается белый экран при добавлении объявления
a.sroklic as sroklic, a.pricelic as pricelic, a.pricelic2 as pricelic2, a.skidka as skidka, a.skidka2 as skidka2,
если не все поля — та же байда 404. /board/read.html
а так же перестают удаляться объявления в админке
насчет оттладчика, я не понял как его применять на хостинге, т.е. путь к файлу не могу указать правильный. получается белый экран при добавлении объявления
#12
22 августа 2013 в 04:50
в edititem добавлено
ниже
и еще ниже в updateRecord
в additem
ниже
далее $errors
и в addRecord
$sroklic = $inCore->request('sroklic', 'str', ''); $pricelic = $inCore->request('pricelic', 'str', ''); $pricelic2 = $inCore->request('pricelic2', 'str', ''); $skidka = $inCore->request('skidka', 'str', ''); $skidka2 = $inCore->request('skidka2', 'str','');
if (!$sroklic && $cat == 11 ) { cmsCore::addSessionMessage($_LANG['NEED_SROK'], 'error'); $errors = true; } if (!$pricelic && $cat == 11 ) { cmsCore::addSessionMessage($_LANG['NEED_PRICE'], 'error'); $errors = true; }
'sroklic'=>$sroklic, 'pricelic'=>$pricelic, 'pricelic2'=>$pricelic2, 'skidka'=>$skidka, 'skidka2'=>$skidka2,
$sroklic = cmsCore::request('sroklic', 'str', ''); $pricelic = cmsCore::request('pricelic', 'str', ''); $pricelic2 = cmsCore::request('pricelic2', 'str', ''); $skidka = cmsCore::request('skidka', 'str',''); $skidka2 = cmsCore::request('skidka2', 'str','');
if (!$sroklic && $cat_id==11) { cmsCore::addSessionMessage($_LANG['NEED_SROK'], 'error'); $errors = true; } if (!$pricelic && $cat_id==11) { cmsCore::addSessionMessage($_LANG['NEED_PRICE'], 'error'); $errors = true; }
$item['sroklic'] = $sroklic; $item['pricelic'] = $pricelic; $item['pricelic2'] = $pricelic2; $item['sdidka'] = $skidka; $item['sdidka2'] = $skidka2;
'sroklic'=>$sroklic, 'pricelic'=>$pricelic, 'pricelic2'=>$pricelic2, 'skidka'=>$skidka, 'skidka2'=>$skidka2,
#13
26 августа 2013 в 07:33
все еще ищу решение проблемы незаполненных полей…
Проверку заполненности полей можно выполнить так
В шаблоне подключи js {add_js file='components/board/js/checktroid.js'}
Js файл checktroid.jsФайл /core/ajax/troid_board_check.php зделай аналогично /core/ajax/registration.php изменив if ($opt=='checktroid'){запрос на свой}
xdebug делай на локальном сервере в OpenServer или Denwer.
<input name="troid" id="troidinput" class="text-input" type="text" style="width:300px" value="{$item.troid|escape:'html'}" onchange="checktroid()" autocomplete="off"/> <span class="regstar">*</span> <div id="troidcheck"></div>
Js файл checktroid.js
function checktroid(){ var usertroid = $("#troidinput").attr('value'); var reg= /^[a-zA-Z0-9_]{2,15}$/ ; if (reg.test(usertroid)) { $("#troidcheck").load("/core/ajax/troid_board_check.php", {opt: "checktroid", data:usertroid}); }else { if (usertroid.length < 2){ $("#troidcheck").html('<span style="color:red">Минимальная длина = 2</span>'); } else { if (usertroid.length > 15){ $("#troidcheck").html('<span style="color:red">Максимальная длина = 15</span>'); } else { $("#troidcheck").html('<span style="color:red">Только латинские буквы и цифры</span>'); } } } }
xdebug делай на локальном сервере в OpenServer или Denwer.
oll, объясни пожалуйста что это скрипт делает, и какую возможность он дает?
как я понял он проверяет значение вводимого поля на макс и мин значение, и без русских букв.
Как это может быть связано с игнорируемостью пустых, незаполненных полей?
С сожалению нет возможности пользоваться денвером на раб. машине…
как я понял он проверяет значение вводимого поля на макс и мин значение, и без русских букв.
Как это может быть связано с игнорируемостью пустых, незаполненных полей?
С сожалению нет возможности пользоваться денвером на раб. машине…