ваяс
Все чикан-пикан
Всех приветствую...
Есть следующий метод для работы с объявлением(недвижимости)
Может быть можно как то избавиться от нескольких запросов, или сделать рефакторинг.
Таких методов несколько для поднятия объявления, для продления, и т.д.
Есть следующий метод для работы с объявлением(недвижимости)
PHP:
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();
}
}
}
}
// ну и так по каждой итерации, подскажите можно что то с этим сделать
Таких методов несколько для поднятия объявления, для продления, и т.д.