Контроль дублей

Все вопросы/проблемы по установке и использовании.
Аватара пользователя
Antonyous99
Сообщения: 587
Зарегистрирован: 18 авг 2019, 09:22
Имя: Антон Владимирович
Откуда: Санкт-Петербург
Организация: ООО "РИКОМ-Сервис"
Контактная информация:

Re: Контроль дублей

Сообщение Antonyous99 »

Индекс соответствущий сделать MySQL базе.
ПУЛЬТ УПРАВЛЕНИЯ БИЗНЕСОМ
ERP/CRM "под ключ"
Аватара пользователя
Morfei
Сообщения: 112
Зарегистрирован: 14 апр 2022, 19:13
Имя: Виктор
Откуда: Нерюнгри

Re: Контроль дублей

Сообщение Morfei »

Fait писал(а): 23 ноя 2023, 01:29 Господа, всё решается через Ajax запрос)
Можно вывести отдельное поле, которое будет выводить подсказку в случае необходимости и, если хотите, скрывать или показывать кнопку сохранения.
А образца случаем нет? :?
Аватара пользователя
Morfei
Сообщения: 112
Зарегистрирован: 14 апр 2022, 19:13
Имя: Виктор
Откуда: Нерюнгри

Re: Контроль дублей

Сообщение Morfei »

Antonyous99 писал(а): 24 ноя 2023, 11:10 Индекс соответствущий сделать MySQL базе.
Ну как бы вмешательство в структуру базы не очень вариант я думаю. :shock:
Аватара пользователя
Fait
Инвестор
Инвестор
Сообщения: 786
Зарегистрирован: 19 ноя 2020, 17:46
Имя: Максим Балакшеев
Откуда: Россия, Златоуст
Организация: ИП Балакшеев Максим Георгиевич

Re: Контроль дублей

Сообщение Fait »

Morfei писал(а): 26 ноя 2023, 21:06 А образца случаем нет? :?
В коде поля Ajax-запрос введите вот такой код (адаптируйте под себя):

Код: Выделить всё

echo '<script>$(".form-group-999 > label").hide()</script>'; // Скрываем заголовок данного поля с формы
$item_id = $_GET['item_id']; // ID текущей записи
$param1 = [880]; // Уникальный параметр 1
$param2 = [881]; // Уникальный параметр 2
$entity_id = 55; // ID сущности

$check_unique = db_query('select count(*) as kol from app_entity_'.$entity_id.' where field_880="'.$param1.'"'.' and field_881="'.$param2.'" and id<>'.$item_id); // Делаем запрос к базе
$resData = db_fetch_array($check_unique);
if ($resData['kol'] > 0) {
  echo '<script>$(".btn-primary-modal-action").hide()</script>'; // Скрыть кнопку "Сохранить"
  echo '<b style="color:red;">Данные параметры существуют в базе!</b>'; // Показываем предупреждение
}
else {
  echo '<script>$(".btn-primary-modal-action").show()</script>'; // Показать кнопку "Сохранить"
  echo '<script>$(".form-group-999").hide()</script>'; // Скрываем поле подсказки полностью
}
Последний раз редактировалось Fait 27 ноя 2023, 22:49, всего редактировалось 2 раза.
Аватара пользователя
Fait
Инвестор
Инвестор
Сообщения: 786
Зарегистрирован: 19 ноя 2020, 17:46
Имя: Максим Балакшеев
Откуда: Россия, Златоуст
Организация: ИП Балакшеев Максим Георгиевич

Re: Контроль дублей

Сообщение Fait »

fedotoff писал(а): 21 фев 2017, 12:19 Обязательно нужен контроль по нескольким полям. То есть:

1"Кактус" 2"Зелёный" 3"2 кг" 4"Питается мясом"

То есть при контроле повтора по полям 1 и 2 и вводе записи "Кактус" "Зелёный" "1 кг" "Пьёт воду"
нужно видеть оповещение что кактусы зелёные уже есть. Добавление записи не блокировать, просто оповещать списком повторов.
А для вас будет такой код, который выводит список записей в виде ссылок:

Код: Выделить всё

echo '<script>$(".form-group-999 > label").hide()</script>'; // Скрываем заголовок данного поля с формы
$item_id = $_GET['item_id']; // ID текущей записи
$param1 = [880]; // Уникальный параметр 1
$param2 = [881]; // Уникальный параметр 2
$entity_id = 55; // ID сущности

$check_unique = db_query('select * from app_entity_'.$entity_id.' where field_880="'.$param1.'"'.' and field_881="'.$param2.'" and id<>'.$item_id); // Делаем запрос к базе
foreach ($check_unique as $key => $value) {
  $i++;
  $v_id = $value['id'];
  $v_name = $value['field_877']; // Заголовок записи
  $out_arr[] = '<a style="color:orange; font-weight: bold;" href="/index.php?module=items/info&path='.$entity_id.'-'.$v_id.'">'.$i.') '.$v_name.'</a>';
}
$list = implode('<br>',$out_arr);
if (count($out_arr) > 0) {
  echo '<b style="color:red;">Похожие записи существуют в базе: </b><br>'; // Показываем предупреждение
  echo $list;
}
else {
  echo '<script>$(".form-group-999").hide()</script>'; // Скрываем поле подсказки полностью
}
А вот результат:
Скриншот 28-11-2023 005102.jpg
Последний раз редактировалось Fait 27 ноя 2023, 22:56, всего редактировалось 1 раз.
Аватара пользователя
Fait
Инвестор
Инвестор
Сообщения: 786
Зарегистрирован: 19 ноя 2020, 17:46
Имя: Максим Балакшеев
Откуда: Россия, Златоуст
Организация: ИП Балакшеев Максим Георгиевич

Re: Контроль дублей

Сообщение Fait »

asyab писал(а): 27 фев 2017, 15:23 Нам тоже очень не хватает такой возможности. Пример, когда список состоит из людей и они в некоторых случаях могут повторятся, а в некоторых нет, т.е. просто поставить проверку уникальности по полю СНИЛС- нельзя, потому что оно во первых может быть не заполнено, во вторых в некоторых случаях может повторяться. Но пользователь, который вводит нового человека должен знать, что такой уже есть и принять решение заводить его или нет. Сейчас приходится сначала искать , а потом уже заводить новую запись, но это не удобно, т.к. пользователей много, доступ к записям разделен в соответсвии с правами доступа и пришлось для такого поиска вообще заводить учетную запись для просмотра всех базы.
А вам вот такое подойдёт:

Код: Выделить всё

echo '<script>$(".form-group-999 > label").hide()</script>'; // Скрываем заголовок данного поля с формы
$item_id = $_GET['item_id']; // ID текущей записи
$param1 = [880]; // Уникальный параметр 1
$param2 = [881]; // Уникальный параметр 2
$entity_id = 55; // ID сущности

$check_unique = db_query('select * from app_entity_'.$entity_id.' where field_880="'.$param1.'"'.' and field_881="'.$param2.'" and id<>'.$item_id); // Делаем запрос к базе
foreach ($check_unique as $key => $value) {
  $i++;
  $v_id = $value['id'];
  $v_name = $value['field_877']; // Заголовок записи
  $out_arr[] = '<b style="color:orange;">'.$i.') '.$v_name.'</b>';
}
$list = implode('<br>',$out_arr);
if (count($out_arr) > 0) {
  echo '<b style="color:red;">Похожие записи существуют в базе: </b><br>'; // Показываем предупреждение
  echo $list;
}
else {
  echo '<script>$(".form-group-999").hide()</script>'; // Скрываем поле подсказки полностью
}
Аватара пользователя
Morfei
Сообщения: 112
Зарегистрирован: 14 апр 2022, 19:13
Имя: Виктор
Откуда: Нерюнгри

Re: Контроль дублей

Сообщение Morfei »

Fait писал(а): 27 ноя 2023, 21:14
Morfei писал(а): 26 ноя 2023, 21:06 А образца случаем нет? :?
В коде поля Ajax-запрос введите вот такой код (адаптируйте под себя):

Код: Выделить всё

echo '<script>$(".form-group-999 > label").hide()</script>'; // Скрываем заголовок данного поля с формы
$item_id = $_GET['item_id']; // ID текущей записи
$param1 = [880]; // Уникальный параметр 1
$param2 = [881]; // Уникальный параметр 2
$entity_id = 55; // ID сущности

$check_unique = db_query('select count(*) as kol from app_entity_'.$entity_id.' where field_880="'.$param1.'"'.' and field_881="'.$param2.'" and id<>'.$item_id); // Делаем запрос к базе
$resData = db_fetch_array($check_unique);
if ($resData['kol'] > 0) {
  echo '<script>$(".btn-primary-modal-action").hide()</script>'; // Скрыть кнопку "Сохранить"
  echo '<b style="color:red;">Данные параметры существуют в базе!</b>'; // Показываем предупреждение
}
else {
  echo '<script>$(".btn-primary-modal-action").show()</script>'; // Показать кнопку "Сохранить"
  echo '<script>$(".form-group-999").hide()</script>'; // Скрываем поле подсказки полностью
}
Спасибо, чаааз буду пробовать. 8-)
Аватара пользователя
Morfei
Сообщения: 112
Зарегистрирован: 14 апр 2022, 19:13
Имя: Виктор
Откуда: Нерюнгри

Re: Контроль дублей

Сообщение Morfei »

Ну в работе с датами нужно приводить в UNIX формат перед отправкой запроса. Получилось как то так :

Код: Выделить всё

$item_id = $_GET['item_id'];

    $param1 = [217]; // Фамилия
    $param2 = [218]; // Имя
    $param3 = [219]; // Отчество
    $param4 = [221]; // Д.р.
    $entity_id = 25; // ID сущности

	if ($param4 == false || $param4 == '') {
	$param4 = '80000000';
	}

    $param4_timestamp = strtotime($param4); // Преобразование даты в UNIXTIME

if ($param1 > '0' || $param2 > '0' || $param3 > '0'){
$check_unique = db_query('SELECT COUNT(*) AS kol FROM app_entity_'.$entity_id.' WHERE field_217="'.$param1.'" AND field_218="'.$param2.'" AND field_219="'.$param3.'"'.($param4_timestamp != 0 ? ' AND field_221='.$param4_timestamp : '').($item_id != 0 ? ' AND id<>'.$item_id : '')); //Отправляем запрос базе
    $resData = db_fetch_array($check_unique);
}
  if ($resData['kol'] > 0) {
        echo '<script>$(".btn-primary-modal-action").hide()</script>'; // Скрыть кнопку "Сохранить"
        echo '<b style="color:red;">Данный человек уже есть в базе!</b>'; // Показываем предупреждение
    } else {
        echo '<script>$(".btn-primary-modal-action").show()</script>'; // Показать кнопку "Сохранить"
        echo '<script>$(".form-group-999").hide()</script>'; // Скрываем поле подсказки полностью
    }

Проверьте пожалуйста правильно ли я понял, что до этого скрипт отправлял запрос каждый раз когда нажата кнопка и нужно дожидаться всех заполненных полей? Может как то по другому можно сделать?
И еще вопрос как добавить вместо "echo '<b style="color:red;">Данный человек уже есть в базе!</b>'; // Показываем предупреждение" ссылку на поиск человека сразу? :?
Аватара пользователя
Morfei
Сообщения: 112
Зарегистрирован: 14 апр 2022, 19:13
Имя: Виктор
Откуда: Нерюнгри

Re: Контроль дублей

Сообщение Morfei »

Fait писал(а): 27 ноя 2023, 22:45
fedotoff писал(а): 21 фев 2017, 12:19 Обязательно нужен контроль по нескольким полям. То есть:

1"Кактус" 2"Зелёный" 3"2 кг" 4"Питается мясом"

То есть при контроле повтора по полям 1 и 2 и вводе записи "Кактус" "Зелёный" "1 кг" "Пьёт воду"
нужно видеть оповещение что кактусы зелёные уже есть. Добавление записи не блокировать, просто оповещать списком повторов.
А для вас будет такой код, который выводит список записей в виде ссылок:

Код: Выделить всё

echo '<script>$(".form-group-999 > label").hide()</script>'; // Скрываем заголовок данного поля с формы
$item_id = $_GET['item_id']; // ID текущей записи
$param1 = [880]; // Уникальный параметр 1
$param2 = [881]; // Уникальный параметр 2
$entity_id = 55; // ID сущности

$check_unique = db_query('select * from app_entity_'.$entity_id.' where field_880="'.$param1.'"'.' and field_881="'.$param2.'" and id<>'.$item_id); // Делаем запрос к базе
foreach ($check_unique as $key => $value) {
  $i++;
  $v_id = $value['id'];
  $v_name = $value['field_877']; // Заголовок записи
  $out_arr[] = '<a style="color:orange; font-weight: bold;" href="/index.php?module=items/info&path='.$entity_id.'-'.$v_id.'">'.$i.') '.$v_name.'</a>';
}
$list = implode('<br>',$out_arr);
if (count($out_arr) > 0) {
  echo '<b style="color:red;">Похожие записи существуют в базе: </b><br>'; // Показываем предупреждение
  echo $list;
}
else {
  echo '<script>$(".form-group-999").hide()</script>'; // Скрываем поле подсказки полностью
}
А вот результат:
Скриншот 28-11-2023 005102.jpg
Тут сделал так:

Код: Выделить всё

echo '<script>$(".form-group-999 > label").hide()</script>'; // Скрываем заголовок данного поля с формы
$item_id = $_GET['item_id']; // ID текущей записи
$param1 = [401]; // Уникальный параметр 1
$param2 = [402]; // Уникальный параметр 2
$entity_id = 53; // ID сущности

if ($param1 >'0' || preg_match('/^\d{2}\.\d{2}\.\d{4}$/', $param2)) {

$param2_timestamp = strtotime($param2); // Преобразование даты в UNIXTIME

$check_unique = db_query('select * from app_entity_'.$entity_id.' where field_401="'.$param1.'" and field_402="'.$param2_timestamp.'" and id<>'.$item_id); // Делаем запрос к базе

foreach ($check_unique as $key => $value) {
  $i++;
  $v_id = $value['id'];
  $v_name = $value['field_401']; // Заголовок записи
  $out_arr[] = '<a style="color:orange; font-weight: bold;" href="/index.php?module=items/info&path='.$entity_id.'-'.$v_id.'">ID-'.$v_id. ') '.$v_name.'</a>';
}
$list = implode('<br>',$out_arr);
if (count($out_arr) > 0) {
  echo '<b style="color:red;">Похожие записи существуют в базе: </b><br>'; // Показываем предупреждение
  echo $list;
}
else {
  echo '<script>$(".form-group-999").hide()</script>'; // Скрываем поле подсказки полностью
}
}
Аватара пользователя
Morfei
Сообщения: 112
Зарегистрирован: 14 апр 2022, 19:13
Имя: Виктор
Откуда: Нерюнгри

Re: Контроль дублей

Сообщение Morfei »

Вот только в поиске с выводом найденного который никак не могу скрыть заголовок поля. :?:
Ответить