Дано: у элементов есть множественное свойство "Привязка к пользователю". С помощью API нужно обновлять это свойство, добавляя в него пользователя. При этом с проверкой на существование такого пользователя в системе
Код
// Обработка данных формы
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Идентификатор элемента, который нужно обновить
$elementId = $_POST['EL_ID'];
// Идентификатор пользователя, которого нужно добавить в свойство "Привязка к пользователям"
$userIdToAdd = $_POST['USER_ID'];
// Проверяем существование пользователя
$user = \Bitrix\Main\UserTable::getById($userIdToAdd)->fetch();
if (!$user) {
echo "Пользователь с ID={$userIdToAdd} не существует в системе.";
exit;
}
// Получаем текущие значения свойства "Привязка к пользователям" для элемента
$rsProperty = \CIBlockElement::GetProperty(
16, // ID инфоблока
$elementId,
"sort",
"asc",
array(
'CODE' => 'ATT_USERS_IDS'
)
);
$existingUserIds = array();
while ($arProperty = $rsProperty->Fetch()) {
if (!empty($arProperty['VALUE'])) {
$existingUserIds[] = $arProperty['VALUE'];
}
}
// Добавляем идентификатор нового пользователя, если он не существует в текущих значениях свойства
if (!in_array($userIdToAdd, $existingUserIds)) {
$existingUserIds[] = $userIdToAdd;
// Обновляем значение свойства "Привязка к пользователям"
\CIBlockElement::SetPropertyValueCode($elementId, 'ATT_USERS_IDS', $existingUserIds);
}
}
В моем случае я делаю это из отправки формы передавая ID пользователя и элемента (к которому его надо добавить) через POST запрос
PS: Чтобы обезопасить предоставленный код и предотвратить компрометацию данных из массива $_POST, рекомендуется применить следующие методы безопасности:
Валидация данных: Проверяйте данные, полученные из массива $_POST, на соответствие ожидаемому формату и типу данных. Например, убедитесь, что идентификатор элемента ($elementId) и идентификатор пользователя ($userIdToAdd) являются числовыми значениями и не содержат опасных символов.
Проверка CSRF: Для защиты от CSRF-атак (межсайтовая подделка запросов), рекомендуется использовать токены CSRF и проверять их перед обработкой формы. В Битриксе можно использовать встроенные возможности защиты от CSRF, такие как bitrix_sessid_post() или bitrix_sessid_get().
use Bitrix\Main\Loader;
Loader::includeModule('iblock');
Loader::includeModule('main'); // Подключаем модуль "main"
// Проверка CSRF-токена
if (!bitrix_sessid_post_check()) {
echo "Ошибка! Неверный CSRF-токен.";
exit;
}
// Обработка данных формы
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Ваш существующий код обработки формы здесь...
// (включая код для добавления пользователя в свойство "Привязка к пользователям")
}
Скрипт обновляющий элементы AJAX-ом
Код
<script>
$(function () {
$(".send_vote").submit(function (event) { // Изменить событие на submit
event.preventDefault();
var form = $(this)[0]; // Сохранить элемент формы в переменную
var formData = new FormData(form);
$.ajax({
url: form.action, // Установить правильный URL, куда должны быть отправлены данные формы
type: form.method,
data: formData,
processData: false,
contentType: false,
success: function (response) {
// Обновить содержимое .vote_list с ответом от сервера
$('.vote_list').load(location.href + ' .vote_list');
},
error: function () {
console.log("Произошла ошибка при отправке запроса."); // Исправленное имя функции
}
});
});
});
</script>