При этом с проверкой на существование такого пользователя в системе
Код |
---|
// Обработка данных формы 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().
Пример с проверкой bitrix_sessid_post()
Форма:
Код |
---|
<form action="/local/ajax/submit_vote.php" method="post" class="send_vote"> <?= bitrix_sessid_post(); ?> <input type="hidden" name="EL_ID" value="<?= $arItem['ID'] ?>"> <input type="hidden" name="USER_ID" value="<?= $arResult['CURRENT_USER_ID'] ?>"> <button type="submit"> Проголосовать </button> </form> |
Обработчик:
Код |
---|
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> |