Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Страшный код

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: Переписать в адекватный человеческий код
Nizz
Отправлено: 09 Сентября, 2019 - 11:01:34
Post Id



Гость


Покинул форум
Сообщений всего: 79
Дата рег-ции: Март 2016  


Помог: 0 раз(а)




Добрый день ув. форумчане. Помогите пожалуйста переписать код в человеческий, поскольку у меня с этим постоянная проблема.
PHP:
скопировать код в буфер обмена
  1.  
  2. function Str_result($POST){
  3.  
  4.  
  5.    
  6.      if (!isset($_SESSION['Ul_params'])) {
  7.       $_SESSION['Ul_params'] = 0;
  8.       } else {
  9.        
  10.       if ($_POST['NameUP']) $_SESSION['Ul_params'] = 1;
  11.       else if ($_POST['NameDown']) $_SESSION['Ul_params'] = 2;
  12.       else if ($_POST['PriceUP']) $_SESSION['Ul_params'] = 3;
  13.       else if ($_POST['PriceDown']) $_SESSION['Ul_params'] = 4;
  14.       else if ($_POST['idUP']) $_SESSION['Ul_params'] = 0;
  15.       else if ($_POST['idDown']) $_SESSION['Ul_params'] = 5;
  16.   }
  17.    
  18.      if($_SESSION['Ul_params'] == 0) return '`id` ASC';
  19.      else if($_SESSION['Ul_params'] == 0) return '`id` ASC';
  20.      else if($_SESSION['Ul_params'] == 1) return '`name` ASC';
  21.      else if($_SESSION['Ul_params'] == 2) return '`name` DESC';
  22.      else if($_SESSION['Ul_params'] == 3) return '`priceflo` ASC';
  23.      else if($_SESSION['Ul_params'] == 4) return '`priceflo` DESC';
  24.      else if($_SESSION['Ul_params'] == 5) return '`id` DESC';
  25.  
  26.  
  27. }
  28.  


Проблема изначально связана с неопределенными индексами POST: NameUP,NameDown,PriceUP,PriceDown,idUP,idDown. Помогите пожалуйста. Спасибо.
 
 Top
andrewkard
Отправлено: 09 Сентября, 2019 - 11:18:26
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Наверное так да?
PHP:
скопировать код в буфер обмена
  1. function Str_result(){
  2.  
  3.     if (!isset($_SESSION['Ul_params'])) {
  4.         $_SESSION['Ul_params'] = 0;
  5.         return '`id` ASC';
  6.     }
  7.  
  8.     $params = [
  9.         'NameUP' => '`name` ASC',
  10.         'NameDown' => '`name` DESC',
  11.         'PriceUP' => '`priceflo` ASC',
  12.         'PriceDown' => '`priceflo` DESC',
  13.         'idUP' => '`id` ASC',
  14.         'idDown' => '`id` DESC',
  15.     ];
  16.  
  17.     $index = 0;
  18.  
  19.     foreach ($params as $name => $sort){
  20.         $index++;
  21.         if(isset($_POST[$name])){
  22.             $_SESSION['Ul_params'] = $index;
  23.             return $params[$name];
  24.         }
  25.     }
  26.  
  27.     return false;
  28.  
  29. }
 
 Top
Мелкий Супермодератор
Отправлено: 09 Сентября, 2019 - 11:21:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Выбросить эту функцию. Посмотреть, где она использовалась. Понять зачем она там использовалась. Подумать, что в том коде делается. И придумать, как эту задачу выполнить без странного кода.

Вы не написали главного - какую задачу решаете.


-----
PostgreSQL DBA
 
 Top
Nizz
Отправлено: 09 Сентября, 2019 - 11:29:18
Post Id



Гость


Покинул форум
Сообщений всего: 79
Дата рег-ции: Март 2016  


Помог: 0 раз(а)




Мелкий пишет:


Вы не написали главного - какую задачу решаете.


Задача проста - в зависимости от нажатой кнопкой содержащей метод POST - вернуть нужную часть кода в запрос. Я решил промаркировать индексами от 0 до 5 и сохранять в сесии, тк есть пагинация.
(Добавление)
andrewkard пишет:
Наверное так да?

Ваш код и правда адекватнее моего структурно и он работает. Единственное, выбивает ошибку когда метод POST не передает никаких параметров "PHP Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in"
 
 Top
andrewkard
Отправлено: 09 Сентября, 2019 - 11:45:37
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Nizz пишет:
boolean given in

заменить

на
 
 Top
Nizz
Отправлено: 09 Сентября, 2019 - 11:47:20
Post Id



Гость


Покинул форум
Сообщений всего: 79
Дата рег-ции: Март 2016  


Помог: 0 раз(а)




andrewkard Я решил дополнить условием на проверку POST в самом верху. Как думаете, не сильно плохо получилось?
PHP:
скопировать код в буфер обмена
  1. function Str_result($POST){
  2.  if(empty($_POST)) {
  3.   return '`id` ASC';
  4.  } else {
  5.  
  6.  if (!isset($_SESSION['Ul_params'])) {
  7.         $_SESSION['Ul_params'] = 0;
  8.         return '`id` ASC';
  9.     }
  10.  
  11.     $params = array(
  12.         'NameUP' => '`name` ASC',
  13.         'NameDown' => '`name` DESC',
  14.         'PriceUP' => '`priceflo` ASC',
  15.         'PriceDown' => '`priceflo` DESC',
  16.         'idUP' => '`id` ASC',
  17.         'idDown' => '`id` DESC',
  18.     );
  19.  
  20.     $index = 0;
  21.  
  22.     foreach ($params as $name => $sort){
  23.         $index++;
  24.         if(isset($_POST[$name])){
  25.             $_SESSION['Ul_params'] = $index;
  26.             return $params[$name];
  27.         }
  28.     }
  29.  
  30.     return false;
  31.  }
  32. }

(Отредактировано автором: 09 Сентября, 2019 - 11:48:09)

 
 Top
andrewkard
Отправлено: 09 Сентября, 2019 - 11:49:51
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Нет,
Nizz пишет:
Как думаете, не сильно плохо получилось?

плохо, лучше как я просил заменить
 
 Top
Nizz
Отправлено: 09 Сентября, 2019 - 11:57:15
Post Id



Гость


Покинул форум
Сообщений всего: 79
Дата рег-ции: Март 2016  


Помог: 0 раз(а)




andrewkard
Огромное вам спасибо за помощь и за направление мысли. Я даже и не додумался сразу все запихнуть в массив....

(Отредактировано автором: 09 Сентября, 2019 - 11:57:48)

 
 Top
Мелкий Супермодератор
Отправлено: 09 Сентября, 2019 - 12:49:30
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Nizz пишет:
Задача проста - в зависимости от нажатой кнопкой содержащей метод POST - вернуть нужную часть кода в запрос. Я решил промаркировать индексами от 0 до 5 и сохранять в сесии, тк есть пагинация.

Зачем вам для этого функция?
Почему функция для этого носит абсолютно бессмысленное название?
Сохранять сортировку и прочие вещи пагинации в сессию - идея очень неудобная. Открыл две вкладки - и они живут своей жизнью. Ссылку не переслать. Это дико неудобно именно для использования. Равно как и использовать для этого POST. Используйте нормальный GET
Почему число? Почему бессмысленное наименование Ul_params? params - для одного литерала? Даже не bitmask ведь.

Почему разные name с формы? Обычно направления сортировки - это value заранее заданного name, к примеру sort=PriceUP. Соответственно маппится на выражение сортировки элементарным поиском по ключу массива.


-----
PostgreSQL DBA
 
 Top
Nizz
Отправлено: 09 Сентября, 2019 - 13:42:12
Post Id



Гость


Покинул форум
Сообщений всего: 79
Дата рег-ции: Март 2016  


Помог: 0 раз(а)




Мелкий ваши наставления мотивируют развиваться. На счет сессии даже сразу и не подумал. Вы абсолютно правы, если например с использованием GET мне не хватает опыта, то глупым названиям переменных и ф-ий - нет никакого оправдания. Спасибо за ваши пояснения, буду пробовать переделывать.
(Добавление)
Мелкий пишет:
Почему разные name с формы? Обычно направления сортировки - это value заранее заданного name, к примеру sort=PriceUP. Соответственно маппится на выражение сортировки элементарным поиском по ключу массива.

А можно менее техническим языком для чайника, тк не все понял?
 
 Top
andrewkard
Отправлено: 09 Сентября, 2019 - 14:07:47
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Nizz пишет:
А можно менее техническим языком для чайника, тк не все понял?

да обычно сортировка делается через GET параметр sort, т.е.
http://localhost?sort=PriceUP
 
 Top
LIME
Отправлено: 10 Сентября, 2019 - 00:25:43
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




http://localhost?sort[priceflo]=asc&sort[name]=desc
 
 Top
miketomlin
Отправлено: 10 Сентября, 2019 - 13:31:24
Post Id


Частый гость


Покинул форум
Сообщений всего: 129
Дата рег-ции: Июль 2016  


Помог: 5 раз(а)




Nizz, верно вам говорят:
1) POST-Redirect-GET;
2) и далее ассоциативный массив или даже БД, чтобы не хардкодить: https://gency[dot]ru/comment/84
 
 Top
LIME
Отправлено: 10 Сентября, 2019 - 13:46:39
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Выше пример без пункта 2, тоись без массива. Можно проверить на вхождение в разрешенные(фильтровать).

(Отредактировано автором: 10 Сентября, 2019 - 14:04:16)

 
 Top
Nizz
Отправлено: 10 Сентября, 2019 - 16:16:55
Post Id



Гость


Покинул форум
Сообщений всего: 79
Дата рег-ции: Март 2016  


Помог: 0 раз(а)




Спасибо всем за подсказки!
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB