Всех приветствую... Есть следующий метод для работы с объявлением(недвижимости) Код (Text): public function ActivateAdvert() { $arrChek = explode(',', $this->post['all-chek']); // на странице мы отметили несколько чеков с объявлениями и пришла строка вида "4,3,2,1," $arrChekParam = explode(',', $this->post['param-chek']); // на этой же странице мы указали параметры куда может будет выгружаться данное объявление может придти строка вида "site1|4,site1|2,site2|2,site3|2,site1|1,site3|1," т.е. в $arrChekParam будет массив с элементами типа (site1|4,) где site1 это на какой сайт выгрузить, а 4 это id объявления foreach ($arrChek as $val) // итак первая итерация сюда приходит 4 { if($val != '') { $param = ''; foreach ($arrChekParam as $arrParam) // а сюда site1|4, { $arr = explode('|', $arrParam); if($val == $arr[1] && $val != '') здесь проверим будут ли равны ID { $param .= $arr[0] . '#'; сюда запишем сайт $idAdvert = $arr[1]; сюда ID } } if(!$param) это условие выполниться в том случае, если например мы выбрали одно объявление, но не выбрали ни одного сайта, тогда просто подставятся все параметры { $vals = '1'; $query = $this->conn->dbh->prepare("UPDATE main_obj_realty SET site1= :site1, site2= :site2, site3= :site3 WHERE user_id = :id AND id = :idAdvert"); $query->bindParam(":id", $this->session['id'], PDO::PARAM_STR); $query->bindParam(":site1", $vals, PDO::PARAM_STR); $query->bindParam(":site2", $vals, PDO::PARAM_STR); $query->bindParam(":site3", $vals, PDO::PARAM_STR); $query->bindParam(":idAdvert", $val, PDO::PARAM_INT); $query->execute(); } else { $paramSplit = explode('#', $param); // здесь у нас может придти массив из трех сайтов поэтому такое условие думаю это понятно $site1= ($paramSplit[0] == 'site1' || $paramSplit[1] == 'site1' || $paramSplit[2] == 'site1) ? '1' : '0'; $site2 = ($paramSplit[0] == 'site2' || $paramSplit[1] == 'site2' || $paramSplit[2] == 'site2') ? '1' : '0'; $site3 = ($paramSplit[0] == 'site3' || $paramSplit[1] == 'site3' || $paramSplit[2] == 'site3') ? '1' : '0'; $query = $this->conn->dbh->prepare("UPDATE main_obj_realty SET site1= :site1, site2= :site2, site3= :site3 WHERE user_id = :id AND id = :idAdvert"); $query->bindParam(":id", $this->session['id'], PDO::PARAM_STR); $query->bindParam(":site1", $site1, PDO::PARAM_STR); $query->bindParam(":site2", $site2, PDO::PARAM_STR); $query->bindParam(":site3", $site3, PDO::PARAM_STR); $query->bindParam(":idAdvert", $val, PDO::PARAM_INT); $query->execute(); } } } } // ну и так по каждой итерации, подскажите можно что то с этим сделать Может быть можно как то избавиться от нескольких запросов, или сделать рефакторинг. Таких методов несколько для поднятия объявления, для продления, и т.д.
Re: Избавиться от нескольких запросов или сделать рефакторин не осилил. непонятно почему post['param-chek'] содержит id объявлений и при этом есть post['all-chek'] опять же с номерами объявлений. смысл как-то ускользает. наверное случай, когда "выбрали одно объявление, но не выбрали ни одного сайта" можно поймать до захода в цикл. хз...
Re: Избавиться от нескольких запросов или сделать рефакторин Нет, это на тот случай когда мы выбираем например, у первого объявления (1 и третий сайт), а у 4 (только первый сайт). Иначе как мы узнаем, в каком именно объявлении был выбран какой-то параметр. Надеюсь на скрине будет лучше понятна моя мысль Если будет не понятно, постараюсь как то иначе объяснить.
Re: Избавиться от нескольких запросов или сделать рефакторин Блин, слетел когда я перезаливал видимо, чуть позже обновлю.