Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Можно ли написать универсальный обработчик формы ajax+php?

Лучший ответ:
Вот Вам примитивнейший пример.
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<script src="http://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
	<title>Document</title>
</head>
<body>
	<div>
		<form action="">
		   <input type="text" name="name">
		   <input type="text" name="phone">
		   <input type="hidden" name="first" value="first">
		   <input type="submit" name="first">
		</form>		
	</div>
	<div>
		<form action="">
			<input type="text" name="name">
			<input type="text" name="email">
			<input type="hidden" name="second" value="second">
			<input type="submit" name="second">
		</form>		
	</div> 
	<div>
		<form action="">
			<input type="text" name="name">
			<textarea name="textarea"></textarea>
            <input type="hidden" name="third" value="third">
			<input type="submit" name="third">
		</form>		
	</div>	
<script type="text/javascript">
	$(document).ready(function(){
		$("form").on("submit", function(e){
			e.preventDefault()
			var data = $(this).serialize()
			$.ajax({
				url: 'ajax.php',
				method: 'POST',
				data: data,
				success: function(response){
					console.log(response)
					var answer = jQuery.parseJSON(response);
					if(answer.type === 'success'){
						alert(answer.text)
					}
					if(answer.type === 'error'){
						alert(answer.text)
					}
				} 
			}) 
		})
	})
</script>	
</body>
</html>

<?php
  if(isset($_POST)){

  	if(isset($_POST['first'])){
  		if(!empty($_POST['name'])){
  			$answer = ['type' => 'success', 'text' => 'Отправлена форма First'];
  		}else{
  			$answer = ['type' => 'error', 'text' => 'Заполните поле "name" в форме First'];
  		}	
  	}
  	if(isset($_POST['second'])){
  		$answer = ['type' => 'success', 'text' => 'Отправлена форма Second'];
  	}
  	if(isset($_POST['third'])){
  		$answer = ['type' => 'success', 'text' => 'Отправлена форма Third'];
  	} 
  	echo json_encode($answer);
  }
?>

Худший ответ:
На стороне php обработчика берете массив $_POST и обходите его при помощи foreach. Внутри цикла уже формируйте письмо-уведомление с теми полями, которые пришли из вашей формы.
Вопрос: Фильтрация данных?

Лучший ответ:
пароль htmlspecialchars для перестраховки
зачем?
htmlspecialchars кодирует служебные символы html. Зачем ее применять для пароля?
И вообще, пароль у вас никогда нигде не хранится в открытом виде, только его хеш и то внутри системы.

минимальную фильтрацию где это необходимо
верное направление мысли.

Необходимо в двух местах:
1. запись  базу
2. вывод на страницу

Чтобы защититься от sql-injection при записи, используйте подготовленные запросы.
Чтобы не сломать верстку при выводе данных — используйте htmlspecialchars при рендере страницы. А лучше возьмите шаблонизатор. Они все по умолчанию эскейпят вывод.

разрешить в логин и имя только a-zа-яё0-9

Это уже не фильтрация, а валидация данных, к безопасности особого отношения не имеет и выполняется в других местах приложения. 
Простой пример. Пользователь отправил форму.
Вы первым делом сделаете проверку всех полей на допустимые значения, на заполненность и т.д., и если что вернете посетителя обратно на форму с указанием ошибки. Данные здесь не изменяются.
Если все в порядке, вы будете писать эти данные в базу. Как я уже написал, используя подготовленный запрос. Опять же, ничего менять в них не требуется.
Потом, вы будете эту информацию где-то выводить на странице. Вот здесь уже, перед выводом, вы прогоните все через htmlspecialchars, возможно какие-то еще корректировки сделаете.

Но, опять же вы пишете про универсальную фильтрацию на все случаи. Так не бывает.
Если вы ожидаете во входных данных исключительно текст, то можно, например, смело резать все теги перед записью в базу. А если вы получаете их из визуального редактора, с разметкой, то резать теги уже не нужно.

Худший ответ:
1. Можно сделать хэндлер для обработки входящих запросов и на нем все post и get данные проверить.
2. Получать, хранить и выводить данные можно как угодно, только нужно придерживаться нескольких принципов. Получаешь - обрабатывать (например: preg_replace('/[^\d]/', '', $string) - убираешь все, кроме цифр). Если в БД пишешь, то используешь экранирование спец. символов SQL - mysqli_real_escape_string($string). Для вывода на страницу всегда htmlspecialchars($string).
3. Вообще, можно скачать фреймворк какой-нибудь и посмотреть, как у них устроены подобные валидации, фильтрации и экранирования. Laravel, Yii, CodeIgniter, Symphony и т.к.
Вопрос: Как сделать много страниц на сайте?

Лучший ответ:
На простом HTML + CSS такое реализовать вряд ли получится (могу ошибаться). Нужен какой-никакой бэкенд. За основу можно взять либо CMS Wordpress - фактически уже готовый сайт с панелью администратора, либо добавить немного PHP к вашему сайту на HTML (или любой из его фреймворков, тот же Laravel или Symphony) + SQL и сделать бэкенд.

Худший ответ:
вам нужно использовать бэкэнд для этого.  И на бэкэнде разбивать вашу ленту на страницы.  Если хотите пишите мне в личку. я вас обучу этому.
Вопрос: Как получить элементы структуры?

Лучший ответ:
Придется именно лазить туда и смотреть исходиник. 

Можно облегчить себе жизнь и использовать IDE. Тогда после написания "car_1." любая достаточно хорошая IDE подскажет вам список всех членов этой структуры. Но это по сути просто автоматизация действия "посмотреть в исходник".

Худший ответ:
Берете и вводите что-то из этой структуры. Нормальная IDE вам покажет.

// Исправление
std::cout << Car.cars_1;
Вопрос: Не понимаю свой и чужой код?

Лучший ответ:
м - минификация.

Худший ответ:
люди сначала скрипт пишут с нормальными названиями функций, а потом перегоняют где-то скрипт и заменяют все адекватные названия на буквы?
https://babeljs.io/
Вопрос: Возможно ли каким то образом заразить свой ПК собственным вирусом?

Лучший ответ:
а почему нет? достаточно его запустить

Худший ответ:
Зачастую так и происходит - программист создает программу, которая в будущем будет вирусом, запускает виртуальную машину, под которую написан вирус, запускает ее там и проверяет работоспособность. Может происходить иначе, вирус создается на втором устройстве и закидывается на основное, также для проверки.
Вопрос: Как сделать, чтобы при вводе в консоли слова «Мужчина» выполнялся код именно в этом if?

Лучший ответ:
эммм... прочитать документацию на тему "сравнение строк"?

Худший ответ:
Приветствую!
Вот, простой пример:
public class Main {
	
	public static void main(String ... args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("Введите ваш пол:");
		String gender = sc.nextLine();
		if(gender.equals("Мужчина")) {
			double d = (x - y) * z;
			System.out.println("Вес=" + d);
		}
	}

}
Вопрос: Как реализовать поиск в sqlite на python?

Лучший ответ:
Это называется "нечеткий поиск", и это непростая тема. Как говорится в одном анекдоте, "длина, ширина, высота и глубина - это совсем не то же, что длинка, ширинка, высотка и глубинка".

Худший ответ:
Следует использовать нейронную сеть.
Ее конечно надо натренировать (вряд ли есть готовые решения в сети "Интернет"), но можно обратиться и на фриланс и куда хочешь, хоть на YouTube по видеороликам.
Вопрос: Можно ли отцентровать блоки grid?

Лучший ответ:
Grid - это сетка. фиксированная. за пределы ячеек выйти нельзя
Flex - это гибкая раскладка, что следует из названия. Элементы могут быть и бывают гибкими, подстраиваться под какие-то факторы.

Главное: не нужно зацикливаться на чем-то одном. Это НЕ взаимоисключающие технологии. В зависимости от требований используйте то, что лучше подходит.

Худший ответ:
нельзя, только на флекс переделывать
Вопрос: Как реализовать балансировку нагрузки на кластер PostgreSQL, чтобы запросы на чтение поступали только на слейв?

Лучший ответ:
А как? Ну вот прямым текстом: как это в принципе и в теории возможно сделать без участия приложения?

begin isolation level repeatable read ;
select ... from users;
-- а дальше-то что?
Окей, begin действительно можно отсрочить до прихода следующего запроса, но вот абсолютно никак не позже запроса select вы обязаны решить, отправлять эту транзакцию на реплику либо на мастер. Как вы это определите? С равной вероятностью следующей командой может быть commit, другой select или пишущий запрос. Вы это никак не можете узнать, но вам уже необходимо эту транзакцию отправить куда-то и получить результат. И ровно так же вы не можете отправить запрос сначала на реплику, а запись потом на мастере потому что у вас развалится снэпшот транзакции.

select * from calculate_user_rating(423);
А это читающий или пишущий запрос? Да этого сама база не знает! Хрен его разберёт, что этой pl/python хранимке на непонятном для базы языке вздумается делать.

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

Худший ответ:
Нашел в закладках такую статью, сам не пробовал - https://www.percona.com/blog/2019/10/31/postgresql...
Вопрос: В каком порядке происходит лицензирование ПО при покупке ключей (в частности — Windows)?

Лучший ответ:

1. Человек приобретает коробку
2. При установке он принимает лицензионное соглашение и договор прикрепления (как он кстати выглядит?)
3. После ввода ключа продукта его копия становится лицензионной.
Это корректно?


Какая-то неправильная трактовка понятий. Винда не может быть лицензионной/ не лицензионной, она может быть активированной или нет.
Покупая винду, ты покупаешь лицензию на использование винды в количестве допустимом купленной лицензией. Активируя винду ключем, ты тем самым подтверждаешь что ты хочешь использовать винду на конкретном устройстве согласно своей лицензии.

И ещё дополнительно вопрос про ключи с ебая/али за 100р - это всё-таки легально, или нет? Почему?
Они вполне легальны. Они действуют в рамках некоторой лицензии, которую купила некоторая фирма. Но ушлые сотрудники утащили пачку ключей и раздают их на право и налево. И получается ситуация, что лично к тебе майкрософт никаких притензий иметь не может. А вот покупатель лицензии вполне может, потому что какого хрена ты пользуешься его лицензией.

И ещё вопрос: Возник термин "лицензируемое устройство" и некоторые интерпретируют это как то что лицензией человек и не обладает в принципе. И если издатель присылает на это устройство обновления, то значит копия признана лицензионной.
Вполне возможно этот термин выдумали в дискуссии. 
У тебя может быть лицензия на использование некоторого оборудования. У тебя может быть право собственности на владение оборудованием. У тебя может быть доверенность на использование устройства.

Если это так, то как можно в случае суда о пиратстве доказать это?
Если у тебя нет лицензии, но есть активированная винда, то возникнут вопрос о том, как ты ее активировал. Если ее тебе активировала фирма, которая в курсе, то к тебе вопросов нет. В противном случае будут.

Худший ответ:
Да. Впрочем проверка проходит по бухгалтерии и это окончательная проверка имеющая силу в суде. То есть вы должны иметь кассовый чек, приходный ордер или что то подтверждающее оплату.

Что мешает ООО Рога и копыта сделать такой чек?
Вопрос: Повременная оплата труда. Как вы организовываете работу под трекером?

Лучший ответ:
Работа с трекером - это, прежде всего, способ понять реальную сложность задачи и обосновать, почему одна задача дороже другой. 

"Положенные" 8 часов - это бред. Кто их положил и для кого? 6 часов в обычный день, когда не нужно тушить пожары - это нормально. И 16 часов в день, когда приходится их тушить - это тоже нормально.

Если трекер трекает так, что затреканного времени выходит мало - повышайте стоимость этого времени так, чтобы в сумме за день у вас выходило достаточно денег. Пусть у вас будет, к примеру, 2 часа чистого времени и 400$ в день. Почему нет? Если клиента не устраивает, сколько вы вырабатываете за свои деньги - пусть ищет другого исполнителя. Это же рынок.

Худший ответ:
Работал под апворковским трекером. Время начала-конца работы включаешь там сам. Трекер раз в 10 (вроде) минут делает скрин и ещё как-то сам считает активность движений мышью и нажатий на клавиатуру. За несколько лет пользования вопросов со стороны заказчиков по данным трекера не было ни разу, думаю, что если результат устраивает - то никто ваши скрины смотреть даже не будет. Тут ещё момент отсеивания явно неадекватных заказчиков до момента начала работы, но это отдельный вопрос. 
Лично я ничего плохого в работе под трекером не вижу, но это индивидуально.
Про цену технички вообще не понял, договаривайтесь на ставку, которая устроит вас при наличии трекера - будете работать не по цене технички. 
Кто-то, видел, при работе под трекером и размышлении над задачкой открывал текстовый редактор и крупным планом писал что-то типа "Размышления над задачей"
Вопрос: Есть ли риск установки linux на диск c:?

Лучший ответ:
Всё в твоих руках, ты - источник риска. Сам по себе linux вполне базопасен.

Худший ответ:
В таких случаях (если Windows уже стоит) уменьшают один из разделов, дабы выделить место под установку Linux. Это свободное место будет обнаружено установщиком Linux, как и факт того, что на ПК уже установлен Windows. В таком случае относительно безопасно, этот же установщик поставит Linux рядом, а загрузчик Windows добавит одним из пунктов в Grub.
Всё есть на сайте Debian.
Вопрос: Как подобрать USB-A — USB-С переходник?

Лучший ответ:
Я извиняюсь, это шпиндельный накопитель, который больше 140 мешкобайт (с двумя звездочками **) в секунду из себя физически выдавить не может, а скорость даже самого дохлого USB 3 - 5 гигабит, то есть, около 400 мешкобайт в секунду.

**Это при условии линейного чтения, в сферическом вакууме, в начале диска, если считать, что в мегабайте миллион байт, а не 2 ^ 20.

Отсюда следует, что подключать его можно любой веревкой USB3. Учтите, что китайский ширпотреб, годный только для зарядки телефонов, может по факту быть USB2.0

Худший ответ:
почитайте разницу скоростей
https://ru.wikipedia.org/wiki/USB#USB_3.0

т.к. там внутри обычный ЖД диск, а не NVME SSD, то usb 3.0 должно быть достаточно

С другой стороны - переходников на 3.2 полно в магазинах, посмотрите DNS какой нибудь
Вопрос: С некотрых пор трекер на Хабре перестал фиксировать не только появление новых комментариев, но и сами темы публикаций. Как это исправить?

Лучший ответ:
Раньше на Хабре были недокументированные неявные подписки на отслеживание в трекере, т.е. , при добавлении статьи в закладки или размещении комментария к статье, пользователя автоматически подписывало на отслеживание обновлений в трекере. Несколько недель назад это убрали, поскольку такие неявные подписки считаются плохой практикой. Теперь, если пользователь хочет отслеживать что-либо в трекере, ему необходимо целенаправленно включить отслеживание в трекере через интерфейс, расположенный над списком комментариев к статье, или сочетанием клавиш, если у него активировано использование горячих клавиш в настройках учетной записи.

Худший ответ:
Обратная связь
Вопрос: Есть ли хорошие и понятные статьи или видео уроки по парсингу на BS4 и REGUESTS с помощью Python?

Лучший ответ:
Ты не подумай, я не стебаюсь.
Но request и bs, самые простые библиотеки, на 98% ответов все есть в документации. Там все просто....

Худший ответ:
Найди на степике курс "WEB парсинг на Python", вроде так назывался. Если не так - просто вбей в поиск на степике парсинг, курс чуть ли не единственный вообще. Он платный, но стоит недорого (я на старте покупал за тыщу, сейчас мб подорожал уже), своих денег стоит
Вопрос: Как узнать диапазон сетей?

Лучший ответ:
Передайте преподавателю, что его задания устарели лет 20 назад.

Худший ответ:
172.29.0.0 - это адрес подсети с маской 16 (255.255.0.0).
Для сети из 30 узлов достаточно сети с маской 27 (225.225.225.224). n=5 - полагаю это как раз про маску.
Но в классовой маршрутизации маски не использовались, так что ее задание довольно странно.
Если задают маску (хоть в каком виде), то значит это уже бесклассовая маршрутизация, а следовательно бессмысленно говорить о сети класса В (и любого другого класса).

Чтоб узнать адрес 27ой сети, нужно знать фактический адрес узла. В задании его нет. Имея адрес узла, можно наложить на него маску (с помощью битовой операции И) и получить адрес сети.

Можно порассуждать и например взять произвольный адрес в заданной сети класса В. Например возьмем адрес: 172.29.35.136. 
172.29.35.136 AND 255.255.255.224 => 172.29.35.128 - это адрес сети для узла 172.29.35.136 с маской 255.255.255.224. При этом диапазон адресов в этой сети: 172.29.35.128 - 172.29.35.159. Ёмкость сети - 32 узла. Наш узел 172.29.35.136 входит в этот диапазон.
Чтоб лучше понять, рекомендую использовать калькулятор в режиме "программиста" и смотреть представление цифр в маске и адресах в двоичном виде.
Вопрос: Какие каналы про карьеру читаете?

Лучший ответ:
Раньше были экстрасенсы и все заряжали воду, сейчас эту роль играют коучи и тренера оичностеого роста. И главный выгодополучатель именно организатор этих курсов. Каждый бизнесмен или успешный разработчик сам себя делал причём не ходя на такие курсы

Худший ответ:
Никакие. Что за бред вообще?
Вопрос: Как лучше оптимизировать память и swap в ubuntu server18.04?

Лучший ответ:
Надо не "оптимизировать память", а ограничивать процессы по занимаемому объёму.

Худший ответ:
Проблема: на тестовых серверах постоянная нехватка памяти, и сервера периодически перестают отвечать, помогает только перезагрузка принудительная.
При этом памяти показывает что занято чуть больше половины,

Тогда откуда уверенность что проблема в памяти? У вас есть мониторинг CPU / IO? 
Что в логах?
Вопрос: Всегда ли методу нужны скобки?

Лучший ответ:
Как по мне скобки дают четкое понятие что это метод и вот сейчас он вызывается.

Худший ответ:
Не всегда. Скобки нужны чтобы вызвать метод.
s = 'HELLO'
print(s.lower)
print(s.lower())
<built-in method lower of str object at 0x7fd8f2702530>
hello

Скобки не нужны, если функцию передавать в качестве параметра.
Вопрос: Как создать опросник?

Лучший ответ:
Такое?
codepen

Худший ответ:
createElement, insertBefore, appendChild...
Или заранее создать набор форм и просто скрывать/показывать в определенном порядке.
Вопрос: Почему выбирают MacBook?

Лучший ответ:
потому что всё (клавиатура/тач-трек-пад/экран/батарея/корпус) лучше, чем у подавляющего большинства других ноутов.
плюс макось.

это общее и для интел–буков и для арм–буков.
для арм–буков отдельным плюсом еще и наличие офигенного процессора, аналога которого у других буков пока просто не существует.

при этом работая много с Linux-системами в плане разработкиэта многая работа обычно происходит либо удаленно, либо в виртуалке.
а тут уже пофигу какая система стоит у себя. ток макось удобнее для пользователя.

Дмитрий, извините что врываюсь, не подскажите как поднять TM на линуксе?да практически любой ман на  netatalk (который является открытым аналогом afp) содержит пункт о создании шары для тайммашин.
хотя они и различаются под разные системы.
в последних релизах - это реально несколько строчек в конфиге. 
если сами не разберётесь, пишите сюда конкретные вопросы с конкретными конфигами.

Худший ответ:
Чем MacBook в этом вопросе лучше на ваш взгляд?
1. Механикой. Корпус, клавиатура, дисплей, тачпад
2. Железом. M1 - очень крутой процессор.
3. Эргономикой OSX - убунта всё-таки не очень удобная для работы.
Вопрос: Почему после «apt-get upgrade -y» некоторые пакеты не обновляются?

Лучший ответ:
Проверь через apt-mark showhold, может, эти пакеты поставлены на удержание (hold)?
Если так, на это наверняка есть причина.

Худший ответ:
sudo aptitude safe-upgrade
У меня иногда тоже не обновляются, и я так и не понял почему. Нашел эту комманду и проблем, вроде бы, больше не вижу. Сначала все обновляю через обычную, но если что-то не проходит, то добиваю этой
Вопрос: Какой дистрибутив линукс хороший в плане безопасности?

Лучший ответ:
Никакой, план безопасности определяет пользователь.

Худший ответ:
Любой из известных: Debian, Ubuntu, Fedora, Arch
Вопрос: Как определить к какому типу принадлежит демультиплексор? И как их отличать по схеме?

Лучший ответ:
Не аналоговый :)
Обычный Преобразователь hex-dec

Худший ответ:
Достаточно прочитать это https://ru.wikipedia.org/wiki/Демультиплексор
Вроде нет там никакого особого деления на типы. Демультиплексор он и есть просто демультиплексор, только количество входов и выходов разное.
Ну pfg21, наверное, спутал с дешифратором, бывает. Но что не аналоговый - это точно. :)
Дешифраторы - вот они двоично-десятичные, десятично-двоичные, двоично-шестнадцатиричные и т.д.
обозначения на цифровых элементах
Вопрос: Как проверить заходили ли уже с данного устройства?

Лучший ответ:
cookie и это единственный вариант (можно сессии, потому что сессии это тоже куки).
cookie придуманы именно для этих целей и если пользователь их удалил, значит он не хочет чтобы вы знали, что он посещал ваш сайт. Это его право - уважайте его.

Худший ответ:
1. Куки. Вариант неплохой.  Да, их можно удалить, но этого не знает немалое число пользователей.

2. Сессии. Это почти тоже самое, что и куки. Так что не рассматриваем.

3. Ip. В современном мире это не показатель почти. Почти у каждого дома динамический ip. Мобилка постоянно меняет ip. Для прикола позаходил на 2ip в течение дня. Почти каждый раз был новый ip.

Был вариант от комментатора browser fingerprint. Не знаю как с этим обстоят дела сейчас, но я читал статейку, в которой говорилось, что некоторые браузеры начали бороться с этим в целях повышения анонимности. воть

Так что неплохим вариантом все еще остается cookie. Да их можно стереть. Все больше людей узнают о cookie как о чем-то зловещем. Как с помощью куки за ними следят мировые корпорации. 

Поэтому еще одним вариантом становится localstorage. О нем знает малое число рядовых пользователей, поэтому специально стирать их мало кто полезет.
Вопрос: Почему не могу создать локальный сервер PgAdmin 4?

Лучший ответ:
PgAdmin это утилита для управления уже запущенным сервером, вам надо скачать, установить и запустить сам postgresql сервер. Вот отсюда

Худший ответ:
Там написано что надо проверить.
Вопрос: Как отобразить JSON с кириллицей в bash?

Лучший ответ:
$ cat test.json
{
  "test": "\u0421\u0430\u043c\u0430\u0440\u0430"
}
$ jq . test.json
{
  "test": "Самара"
}

Худший ответ:
это escape-последовательность, а точнее символы юникода в шестнадцатеричном формате
$ echo -e "\u0421\u0430\u043c\u0430\u0440\u0430"
Самара
Вопрос: Упростить js скрипт?

Лучший ответ:
Отделите данные от скрипта, будет компактнее. Да и много повторений
const tags = ['screen', 'goods', 'gallery', 'reviews', 'contacts'];
function enableBlock(blockTag) {
    document.querySelector('.blocks__phone-bg').classList.add(`blocks__phone-bg--${blockTag}`);
    document.querySelector('.blocks__phone-bg').className = `blocks__phone-bg blocks__phone-bg--${blockTag}`;
    tags.forEach(tag=>{
      let elem = document.querySelector(`.blocks__item[data-item="${tag}"]`);
      if (!elem){
         return;
      };
      if (blockTag===tag){
        elem.classList.add('blocks__item--active');
      }else{
        elem.className = 'blocks__item';
      };
    });
}

Худший ответ:
// Пусть, список будет в строке разделенной вертикальной чертой
"contacts|goods|gallery|reviews|screen".split`|`
// Находим каждый элемент
.map(data=>document.querySelector(`.blocks__item[data-item="${data}"]`))
// Вешаем на элементы событие mouseenter
.forEach(el=>el.addEventListener('mouseenter',e=>{
  // Класс активного элемента надо удалить только у активного элемента
  document.querySelector`.blocks__item.blocks__item--active`.classList.remove`blocks__item--active`;
  // А элементу, вызвавшему это событие надо добавить класс активности
  e.target.classList.add`blocks__item--active`;
  // Еще где-то какому-то элементу присвоим класс, частично формирующийся из атрибута элемента события 
  document.querySelector`.blocks__phone-bg`.className = `blocks__phone-bg blocks__phone-bg--${e.target.getAttribute`data-item`}`;
});
// Вот и все!