Хак доски объявлений

+24
2.28K
Данный разработка сняла гнев пользователей в мою сторону при заполнении доски объявлений.
Дело в том что при неправильно заполненном поле, скрипт перенаправляет пользователя
снова на страницу занесения данных, где естественно все поля пустые. А если подумать
что юзер мог минут 15 сочинять текст для поля ОПИСАНИЕ, а потом все исчезнет...

Сделаем кнопку Назад.
1.Создаем файл Templates\Ваш шаблон\components\error.tpl.
Помещяем туда код:
  1.  
  2. {* ================================================================================ *}
  3. {* =========================== ошибка ============================================= *}
  4. {* ================================================================================ *}
  5.  
  6. <h1 class="con_heading">{$err_title}</h1>
  7. {if $messages}
  8. <div class="sess_messages">
  9. {foreach key=id item=message from=$messages}
  10. {$message}
  11. {/foreach}
  12. </div>
  13. {/if}
  14. <input type="button" name="back" value="{$LANG.BACK}" style="font-size:18px" onClick="window.history.go(-1)" />

2. Файл components\board\frontend.php
Ищем текст
  1.  
  2. if ($errors){ $inCore->redirect('/board/'.$id.'/add.html'); }
  3.  
  4.  
  5. $filename = '';
  6. if (isset($_FILES['picture'])){
  7. $inCore->includeGraphics();
  8. //dirs
  9. $uploaddir = PATH.'/images/board/';
  10. $realfile = $_FILES['picture']['name'];
  11. //next id
  12. $filename = md5($realfile . $user_id . time()).'.jpg';
  13. //filenames
  14. $uploadfile = $uploaddir . $realfile;
  15. $uploadphoto = $uploaddir . $filename;
  16. $uploadthumb = $uploaddir . 'small/' . $filename;
  17. $uploadthumb2 = $uploaddir . 'medium/' . $filename;
  18. //uploading
  19. if (@move_uploaded_file($_FILES['picture']['tmp_name'], $uploadphoto)) {
  20. @img_resize($uploadphoto, $uploadthumb, $cat['thumb1'], $cat['thumb1'], $cat['thumbsqr']);
  21. @img_resize($uploadphoto, $uploadthumb2, $cat['thumb2'], $cat['thumb2'], false, $cfg['watermark']);
  22. if ($cfg['watermark']) { @img_add_watermark($uploadphoto); }
  23. @unlink($uploadphoto);
  24. } else {
  25. cmsCore::addSessionMessage($_LANG['PHOTO_NOT_UPLOAD'], 'info');
  26. }
  27. }
  28.  
  29. $item_id = $model->addRecord(array(
  30. 'category_id'=>$id,
  31. 'user_id'=>$user_id,
  32. 'obtype'=>$obtype,
  33. 'title'=>$title,
  34. 'content'=>$content,
  35. 'city'=>$city,
  36. 'pubdays'=>$pubdays,
  37. 'published'=>$published,
  38. 'file'=>$filename
  39. ));
  40. if ($published == 1) {
  41. //регистрируем событие
  42. cmsActions::log('add_board', array(
  43. 'object' => $title,
  44. 'object_url' => '/board/read'.$item_id.'.html',
  45. 'object_id' => $item_id,
  46. 'target' => $cat['title'],
  47. 'target_url' => '/board/'.$cat['id'],
  48. 'target_id' => $cat['id'],
  49. 'description' => ''
  50. ));
  51. }
  52.  
  53. //finish
  54. if (!$published) { $prmoder = '<p>'.$_LANG['ADV_PREMODER_TEXT'].'</p>'; }
  55. cmsCore::addSessionMessage('<p><strong>'.$_LANG['ADV_IS_ADDED'].'</strong></p>'.$prmoder, 'info');
  56. $inCore->redirect('/board/'.$id);
  57.  
  58. }
  59.  
  60. }
  61.  
меняем на
  1.  
  2. if ($errors){
  3. $smarty = $inCore->initSmarty('components', 'error.tpl');
  4. $smarty->assign('err_title', 'Ошибка');
  5. $smarty->assign('messages', cmsCore::getSessionMessages());
  6. $smarty->display('error.tpl');
  7. // proverka na zapolnenie//
  8. }
  9. else {
  10. $filename = '';
  11. if (isset($_FILES['picture'])){
  12. $inCore->includeGraphics();
  13. //dirs
  14. $uploaddir = PATH.'/images/board/';
  15. $realfile = $_FILES['picture']['name'];
  16. //next id
  17. $filename = md5($realfile . $user_id . time()).'.jpg';
  18. //filenames
  19. $uploadfile = $uploaddir . $realfile;
  20. $uploadphoto = $uploaddir . $filename;
  21. $uploadthumb = $uploaddir . 'small/' . $filename;
  22. $uploadthumb2 = $uploaddir . 'medium/' . $filename;
  23. //uploading
  24. if (@move_uploaded_file($_FILES['picture']['tmp_name'], $uploadphoto)) {
  25. @img_resize($uploadphoto, $uploadthumb, $cat['thumb1'], $cat['thumb1'], $cat['thumbsqr']);
  26. @img_resize($uploadphoto, $uploadthumb2, $cat['thumb2'], $cat['thumb2'], false, $cfg['watermark']);
  27. if ($cfg['watermark']) { @img_add_watermark($uploadphoto); }
  28. @unlink($uploadphoto);
  29. } else {
  30. cmsCore::addSessionMessage($_LANG['PHOTO_NOT_UPLOAD'], 'info');
  31. }
  32. }
  33.  
  34. $item_id = $model->addRecord(array(
  35. 'category_id'=>$id,
  36. 'user_id'=>$user_id,
  37. 'obtype'=>$obtype,
  38. 'title'=>$title,
  39. 'content'=>$content,
  40. 'city'=>$city,
  41. 'pubdays'=>$pubdays,
  42. 'published'=>$published,
  43. 'file'=>$filename
  44. ));
  45. if ($published == 1) {
  46. //регистрируем событие
  47. cmsActions::log('add_board', array(
  48. 'object' => $title,
  49. 'object_url' => '/board/read'.$item_id.'.html',
  50. 'object_id' => $item_id,
  51. 'target' => $cat['title'],
  52. 'target_url' => '/board/'.$cat['id'],
  53. 'target_id' => $cat['id'],
  54. 'description' => ''
  55. ));
  56. }
  57.  
  58. //finish
  59. if (!$published) { $prmoder = '<p>'.$_LANG['ADV_PREMODER_TEXT'].'</p>'; }
  60. cmsCore::addSessionMessage('<p><strong>'.$_LANG['ADV_IS_ADDED'].'</strong></p>'.$prmoder, 'info');
  61. $inCore->redirect('/board/'.$id);
  62.  
  63. }
  64. }
  65. }
  66.  
Теперь при переходе назад данные сохраняются.
+1
WALTERZ WALTERZ 13 лет назад #
Ещё не ставил, но плюсую. полезно будет.
0
lezginka.ru lezginka.ru 13 лет назад #
+ для чайников, готовый файлы нужны :)
0
13 лет назад #
да ладно! думаю поиском все могут пользоваться
+2
Marswell Marswell 13 лет назад #
Когда добавлю подсказуи для проверки и валидацию выложу файлы
0
Alexneva Alexneva 13 лет назад #
Ай молодца! Очень полезная вещь! Если бы можно было, 10 плюсов поставил-бы...
0
Keep Keep 13 лет назад #
Всё сделал как написано, на кнопку переходит, но при возвращении назад всё пусто?
0
Marswell Marswell 13 лет назад #
Забыл написать что некоторые браузеры очищают кэш при переходе назад
0
seyfer seyfer 13 лет назад #
Это на какую версию? В 1.8 код отличается.
0
Korvin Korvin 13 лет назад #
Поддерживаю - если есть возможность, подскажите, пожалуйста, что делать на 1.8
0
Marswell Marswell 13 лет назад #
В версии 1.8 в Опере и E8 работает по умолчанию, там нет перехода назад. В каких браузерах очищается?
0
Крот Крот 13 лет назад #
можно поставить доску из поста поста, там есть автозаполнение при ошибочно набранном объявлении.
0
Korvin Korvin 13 лет назад #
В хроме после создания объявления с незаполненными полями, если нажать кнопку назад, текст остется. НО - не каждый пользователь будет нажимать кнопку назад. Если бы посередине экрана была эта кнопка, с текстом, что вы не заполнили это поле, поэтому вернитесь назад - тогда да.
0
Korvin Korvin 13 лет назад #
БЛИН - только что проверил в других браузерах - в opera и internet explorer НЕ сохраняется текст.

Попробовал поставить изменения с другой доски - я купил у максисофта уже, и изменения к этой не подходят.

Кто решил, или совет может дать, скажите пожалуйста!!!
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.