1. Главная
  2. Блог
  3. Битрикс неисправим
  4. Уникальные записи в Веб формах Bitrix

Уникальные записи в Веб формах Bitrix

8 Мая 2019
306
Задача: собрать записи с именем и номером телефона, да так, что бы они были уникальными. Если запись уже присутствует в результате формы, вывести соответствующее предупреждение и все это без модификации шаблонов.

Предположим, что у нас уже есть веб форма, с вопросами (полями):
Имя - обязательное к заполнению.
Телефон - обязательное к заполнению.

Учтите, если у вас есть желание хранить номер в формате +38 (0ХХ) ХХХ-ХХ-ХХ, необходимо будет использовать форматирование (например регулярным выражением, или предварительно используя Jquery Inputmask), но это также не исключает необходимость проверки записи при внесении их в базу.



= '11' && $found[0][1] != 0) {
		$phone = '7'.substr($res,1,10);
	} elseif(($found[0][0].$found[0][1] == '80') && strlen($res) >= '11') {
		$phone = '38'.substr($res,1,10);
	} elseif(($found[0][0].$found[0][1].$found[0][2] == '380') && strlen($res) >= '12') {
		$phone = '380'.substr($res,3,9);
	}  elseif(($found[0][0].$found[0][1].$found[0][2] == '375') && strlen($res) >= '12') {
		$phone = '375'.substr($res,3,9);
	} elseif(strlen($res) == '10' && $res{0} == 0) {
		$phone = '38'.$res;
	} elseif(strlen($res) == '9') {
		$phone = '375'.$res;
	} elseif(strlen($res) == '10') {
		$phone = '7'.$res;
	} elseif(strlen($res) == '14') {
		$phone = $res;
	} else {
		$phone = '';
	}
	return $phone;
}
AddEventHandler('form', 'onBeforeResultAdd', 'stop_onBeforeResultAdd');
function stop_onBeforeResultAdd($WEB_FORM_ID, &$arFields, &$arrVALUES)
{
  global $APPLICATION;
  
  //проверяем, что именно форма с ID=9 передает результат
  if ($WEB_FORM_ID == 9) 
  {
	$phone = PhoneNumber($arrVALUES['form_text_63']);//проверяем номер и приводим его к виду 380ХХХХХХХХХ 
		
	$arFieldsf[] = array(
	   "CODE"              => "SIMPLE_QUESTION_499",          // код поля по которому фильтруем
	   "FILTER_TYPE"       => "text",                         // фильтруем по числовому полю
	   "PARAMETER_NAME"    => "USER",                      	  // фильтруем по введенному значению
	   "VALUE"             => $phone,                         // значение по которому фильтруем
	   "EXACT_MATCH"       => "Y"                             // ищем точное совпадение
	);
	
	$arFilter = array (
	   "FIELDS" => $arFieldsf,
	   "STATUS_ID" => 8,       //отфильтровать необходимо результаты в статусе с ID = 8 (необязательно)
	);
	
	$rsResults = CFormResult::GetList(9, $by = 's_id', $order = 'asc', $arFilter, $is_filtered, 'N', false);
	if ($rsResults->SelectedRowsCount() > 0){
		$APPLICATION->ThrowException('Извините, но номер '.$arrVALUES['form_text_63']." уже принимает участие в акции");
	}else{
		if (!strlen($phone) == 12){//12 знаков для украины
			$APPLICATION->ThrowException('Вы не верно ввели номер телефона, будте внимательнее!');
		}	
	}

  }
}
+38 (073) 733 88 22
ответим на Ваши вопросы