Регистрация
Регистрируясь, вы подтверждаете свое согласие с соглашением об использовании персональных данных.
Восстановление пароля

Действие после добавления объекта

30.09.2015, 21:52
Muerto
Алексей Виноградов-фон Шлиппе

Зарегистрирован:
2006-09-14
Сообщений: 37

Для работы фильтра со множественным выбором, я собираю его в поле tags товара. В добавление/изменение объекта захардкорил такой вот код:
---
Selebrations - поле типа множественный выбор (чекбоксы) с привязанным списком celebration
tags - поле типа строка (формат теги)
---
<?
$nc_core = nc_Core::get_object();
$var = '';
$tags = '';
$nc_core->db->get_var("select `Selebrations` from `Message521` where `Message_ID`=" + $message);
$arr = $nc_core->db->last_result;
print("<script>console.log('arr = " + $arr + "');</script>";
$arr = explode(',',$arr);
foreach ($arr as $value) {
if ($value!='') {
$nc_core->db->get_var("select `celebration_Name` from `Classificator_celebration` where `celebration_ID`=" + $value);
$var = $nc_core->db->last_result;
$tags = $tags + $var + ',';
}
}
$nc_core->db->query("UPDATE `Message521` set tags='" + $tags + "' where `Message_ID`=" + $message);
?>
Пэхер я никакой и в мускуле шарю весьма и весьма посредственно, но, на мой взгляд, всё написано правильно.Все запросы к базе с подставленными значениями исполняются правильно. Но, в итоге, ничего в базу не записывается после изменения объекта. %( Кто-нибудь может мне объяснить где я накосячил?

Nadie hablara de nosotras cuando hayamos muerto...
01.10.2015, 13:20
Muerto
Алексей Виноградов-фон Шлиппе

Зарегистрирован:
2006-09-14
Сообщений: 37

Как любезно отметила техподдержка в РНР строки клеют через точку. %) Затупил я совсем с JSом.
Изменил:
<?
//$nc_tags->update_message($calalogue,$sub, $cc, $classID, $message);

$nc_core = nc_Core::get_object();
$var = '';
$tags = '';
$nc_core->db->get_var("select `Selebrations` from `Message521` where `Message_ID`=".$message);
$arr = $nc_core->db->last_result;
$arr = explode(',',$arr);
foreach ($arr as $value) {
if ($value!='') {
$nc_core->db->get_var("select `celebration_Name` from `Classificator_celebration` where `celebration_ID`=".$value);
$var = $nc_core->db->last_result;
$tags = $tags.$var.',';
}
}
$tags = substr($tags, 0, -1);
$nc_core->db->query("UPDATE `Message521` set tags='".$tags."' where `Message_ID`=".$message);
?>
но всё равно не работает. %(

Nadie hablara de nosotras cuando hayamos muerto...
06.10.2015, 09:32
Долгий Андрей

Зарегистрирован:
2015-09-10
Сообщений: 8

У вас сильно избыточный код, попробуйте вот этот:

Код:
<?
$tags = $db->get_var("SELECT GROUP_CONCAT(`celebration_Name`) FROM `Classificator_celebration` WHERE `celebration_ID` IN (".implode(',', $f_Selebrations).")");
$db->query("UPDATE `Message".$classID."` SET tags = '".mysql_real_escape_string($tags)."' WHERE `Message_ID` = ".$message);
?>


Дергать данные из бд нет никакой нужды, в действии после изменения/добавления объекта все поля затронутого объекта хранятся в обычных переменных вида $f_имяполя. В данном случае в массиве $f_Selebrations будут все айдишники выбранных в мультиселекте опций.

Если не хотите, чтобы при пустом мультиселекте старое значение затиралось - добавьте во второй строчке проверку !empty($tags)
06.10.2015, 18:14
Muerto
Алексей Виноградов-фон Шлиппе

Зарегистрирован:
2006-09-14
Сообщений: 37

Не срабатывает, Андрей. Точнее, по идее, должен срабатывать, но не работает. Поддержка ищет где баг.

Nadie hablara de nosotras cuando hayamos muerto...
29.10.2015, 21:43
Руслан Густокашин
Студия Вэлпис

Зарегистрирован:
2012-02-06
Сообщений: 962

Алексей, ну а вы посмотрите, какой из запросов не срабатывает - первый или второй?
198 196 2015-10-29 21:43:54 14302
Описание проекта