Advertisement
zero50x

Недостатки в коде PHP Примеры

Sep 25th, 2017
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 7.88 KB | None | 0 0
  1. # Вот такой запрос летит на сервер по AJAX
  2. /*
  3. sid: 326769
  4. u: 145594a9
  5. m: 9e21f2b27899
  6. l: 79521664_79521663_79521661-79521664-1
  7. i: 3388237b5d73871488a3209708b3d73872088a3832353b1d83799649a3260070b1d73872194e73872266a3828642b1d80995281
  8. n: 32062589_28252764_28252235_28252679_28252733_33818743_28277629_28252819_75828055_28252781
  9.  
  10. Здесь последняя строка - id-шники товаров в корзине
  11. i похоже на какой-то ключ, но я не уверен
  12. sid, u, m всегда одинаковые, но от этоно не становится понятнее что это
  13. */
  14.  
  15.  
  16. # По этому полю можно с таким комментарием в коде производить поиск или нельзя? Непонятно
  17.    // Поля, по которым можно производить поиск
  18.     $sql_search_fields      = array(
  19.       'delivery_id'                 => -1,
  20.     ),
  21.  
  22.  
  23. // Загружаме данные по товарной категории
  24. $c = $goods->cat->get($R['id'], array('full' => 1));
  25. if($c==false or $c['site_id']!=$sites->work_site_id) {
  26.   $T->show('goods_cat_no_data');
  27. } else {
  28.  
  29.   // Загружаем меню для отображения списка вложенности
  30.   $goods->cat->GetTreeMenuGet(array(
  31.     'goods_cat_id'            => intval($c['goods_cat_id']),
  32.     'show_warehouse'          => intval($c['goods_cat_is_warehouse']),
  33.     'show_hidden'             => 1,
  34.     'show_only_nested'        => 0,
  35.     'without_current_branch'  => 1,
  36.     'site_id'                 => $sites->work_site_id,
  37.   ));
  38.  
  39.   $opt = array(
  40.     'tpl_main_block_list'      => 'form_goods_img',
  41.     'tpl_attr_block_list'      => 'form_goods_attr',
  42.     'tpl_sub_attr_block_list'  => 'attr',
  43.     'tpl_prop_block_list'      => 'form_goods_prop',
  44.     'tpl_sub_prop_block_list'  => 'prop',
  45.   );
  46.   if(is_array($c['goods_image_id'][0])) {
  47.     $v = &$c['goods_image_id'][0];
  48.     $img = $goods->image->get($v['goods_image_id']);
  49.     $T->block($opt['tpl_main_block_list'],array(
  50.       'ID'          => intval($v['goods_image_condition_goods_cat_id']),
  51.       'NAME'          => h(mb_strlen($img['goods_image_name'])>0?$img['goods_image_name']:$c['goods_cat_name']),
  52.       'MAIN'          => intval($v['goods_image_condition_goods_cat_main']),
  53.       'ICON'          => h($img['goods_image_file_name-a-icon']),
  54.       'PREVIEW'       => h($img['goods_image_file_name-a-preview']),
  55.     ));
  56.     unset($img);
  57.   }
  58.   unset($k,$v);
  59.  
  60. /*
  61. Здесь комментарий стоит перед $goods->cat->GetTreeMenuGet потом пустая строка и потом $opt = array вот непонятно, комментарий относится к ним особоим или только к верхнему?
  62. Что происходит в нижнем if сразу не разобраться, комментария нет, к тому же нет пробела и выглядит как будто они по смыслу объединены с $opt = array
  63. Ещё обрати внимание на строку с 'NAME'=> она вообще достойна отдельной премии т.к. непонятно что за h и вообще там внутри тернарный if
  64. */
  65.  
  66.  
  67.  
  68. ## Код 2
  69.  
  70. // Если отправили форму
  71. if( isset($R['hash']) ){
  72.   // Проверяем хэш
  73.   if(!$secure->check_hash($R['hash'])) {
  74.     $GLOBALS['UserSess3']->setFlash('error_notice', $GLOBALS['lang']->translate("Данные категории не сохранены.") . " " . h($secure->last_error));
  75.   } else {
  76.     //print_r2($F);
  77.     // Повторная отправка формы, в случае работы в многопользовательском режиме
  78.     $T->createFormFromArray('RESEND_FORM', $F);
  79.  
  80.     // Если недостаточно прав доступа для редактирования данных
  81.     if(!$user->accessCheckByShopPrivileges('goods', 'edit', 0)) {
  82.       $GLOBALS['UserSess3']->setFlash('error_notice', $user->last_error);
  83.     } elseif(!$goods->cat->actions->update($R['id'], array_merge($F, array(
  84.       'check_version' => isset($F['dont_check_version']) && intval($F['dont_check_version']) ? 0: 1, // Проверять разницу версий (Многопользовательский режим)
  85.     )))) {
  86.       $GLOBALS['UserSess3']->setFlash('error_notice', $goods->cat->actions->last_error);
  87.     } else {
  88.       $GLOBALS['UserSess3']->setFlash('good_notice', $GLOBALS['lang']->translate('Данные категории успешно сохранены'));
  89.       redirect_to(getCurrentPageURL());
  90.     }
  91.   }
  92. }
  93.  
  94. /*
  95. Тут сразу несколько грубых ошибок:
  96. 1) Опять обнобуквенные переменные
  97. 2) Глобальные переменные во всей красе
  98. 3) Каково основное действие этого блока? Это update - обновление данных, он запрятан в середину
  99. 4) Тернатный if внутри условия elseif
  100. 5) После обновления сразу идёт error_notice т.е. ошибка и только внизу если всё ок т.е. немного логика нарушается, результата не видно, проще было бы к true приравнять
  101. 6) Просто прекрасны скобочки )))) - где они не на уровне открытия разнесены, благодаря этому вообще не понять какая что открывает, закрывает
  102.  
  103. */
  104.  
  105.  
  106. ## Код 3
  107. // Тут ошибка только одна по сути, оцени решение сделать unset($i) после цикла!
  108.       for($i = 1; $i <= 10; $i++) {
  109.         if(!defined('PROJECT_DESIGN_FILES_IP_' . $i)) {
  110.           break;
  111.         } elseif(constant('PROJECT_DESIGN_FILES_IP_' . $i) == $design_ip) {
  112.           $is_found = 1;
  113.         }
  114.       }
  115.       unset($i);
  116.  
  117.  
  118. ## Код 4 Шикарный if
  119.  // Проверка прав доступа
  120.   if(
  121.     $user->access_check('admin')
  122.     || $d_data[0]['design_available'] && (
  123.       0 == $d_data[0]['site_id']
  124.       || $sites->work_site_id == $d_data[0]['site_id']
  125.       || $sites->group->design_cond->check_access_by_sites_group_id_and_design_id($s_d['site_group_id'], $d_data[0]['design_id'])
  126.     )
  127.   ) {
  128.     $design_id = $d_data[0]['design_id'];
  129.   } else {
  130.     $design_id = 1;
  131.   }
  132.  
  133.  
  134. ## Код 5 код что бы задать одну настройку $CONF['invite'] здесь сразу 2 тернарных if'a
  135.  
  136.   // 1 - выключить открытый доступ к сайту, 0 - включить
  137.   $CONF['invite'] = IS_CRON
  138.     ? 0
  139.     : ((
  140.         false !== strpos($_REQUEST['mod_lname'], '/page1/')
  141.         || false !== strpos($_REQUEST['mod_lname'], '/page2/')
  142.         || false !== strpos($_REQUEST['mod_lname'], '/page3/')
  143.         || false !== strpos($_REQUEST['mod_lname'], '/api/url1')
  144.         || false !== strpos($_REQUEST['mod_lname'], '/api/url12')
  145.       )
  146.       ? 0
  147.       : 1
  148.     );
  149.  
  150. ## Код 6. Запись свойств товара в БД.
  151. // Здесь проблема в том, что мы не проверяем длиннее свойство текстовое 255 символов или нет, мы просто обрезаем его до 255 символов
  152. // и записываем в БД. Т.е. если упользователя свойство было длиннее то он не узнает о проблеме
  153. // У него просто в базу запишется обрезаная строка
  154.  
  155. if(!$this->parent->val->update($goods_property_value_id, array(
  156.     'goods_property_value' => mb_substr(trim(str_replace("\n", '', h($goods_property_value))), 0, 255),
  157. )))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement