Перейти к содержимому


Запрет совпадения по пустому полю


Сообщений в теме: 7

#1 TelecomMedia

    Активный участник

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 23 Март 2015 - 12:40

Здравствуйте,

Как добавить в следующее вычисление защиту от поиска совпадения по пустому полю?
Т.е. сейчас данный код, например, если не находит совпадение по номеру телефона ищет совпадение по почте. Если в таблице, в которую нужно подставить значение поле E-mail будет пустым, то в т. 42 найдется первое значение с пустой почтой и подставится соответственно некорректное значение.

$result1 = data_select_field(42, "id", "status=0 AND f441='",$line['Телефон'],"'");
$row1 = sql_fetch_assoc($result1); // если совпадает телефон, то копируем в массив row1

$result2 = data_select_field(42, "id", "status=0 AND f442='",$line['E-mail'],"'");
$row2 = sql_fetch_assoc($result2); // если совпадает почта, то копируем в массив row2

if ($row1 != ''){
$line['Юр. название'] = $row1['id']; // если нашлось совпадение по телефону
} else {
$line['Юр. название'] = $row2['id']; // если по телефону не нашлось, то наверняка нашлось по почте
}


#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 23 Март 2015 - 13:13

Простой вариант: (тот же код, только добавлена проверка полей на пустоту)

$result1 = data_select_field(42, "id", "status=0 AND f441='",$line['Телефон'],"'");
$row1 = sql_fetch_assoc($result1); // если совпадает телефон, то копируем в массив row1

$result2 = data_select_field(42, "id", "status=0 AND f442='",$line['E-mail'],"'");
$row2 = sql_fetch_assoc($result2); // если совпадает почта, то копируем в массив row2

if ($row1 != '' and $line['Телефон']){ // <---------- ЗДЕСЬ
$line['Юр. название'] = $row1['id']; // если нашлось совпадение по телефону
} elseif ($line['E-mail']) { // <---------- И ЗДЕСЬ
$line['Юр. название'] = $row2['id']; // если по телефону не нашлось, то наверняка нашлось по почте
}

Более оптимальный вариант: (ищет в БД только в случае необходимости)

if ($line['Телефон'])
{ // если есть телефон, ищем по телефону
    $result = data_select_field(42, "id", "status=0 AND f441='",$line['Телефон'],"'");
    $row = sql_fetch_assoc($result); // если найдено, заполняем массив row
}

if (!$row and $line['E-mail'])
{ // если телефона нет или не нашли по нему, и есть почта, ищем по почте
    $result = data_select_field(42, "id", "status=0 AND f442='",$line['E-mail'],"'");
    $row = sql_fetch_assoc($result); // если найдено, заполняем массив row
}

$line['Юр. название'] = $row['id'];


#3 TelecomMedia

    Активный участник

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 23 Март 2015 - 13:48

Спасибо!!!!

#4 TelecomMedia

    Активный участник

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 23 Март 2015 - 16:25

Подскажите еще, пожалуйста, вот какой момент:

По доп. действию копирую значения полей в т. Контрагенты.

$arr['Менеджер'] = $line['Менеджер ОП'];
$arr['Название'] = $line['Название компании'];
$arr['Город'] = $line['Город'];
$newid = insert_query($arr, "Контрагенты");

$line['Юр. название'] = $newid; // в таблице из которой выполняется доп. действие пытаюсь подставить связь с созданной записью.

Но подставляется связь с другой организацией.

#5 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 24 Март 2015 - 09:39

Что значит с другой? По коду должна вставится именно та организация, которую вы добавили. В коде ошибок нет.

#6 TelecomMedia

    Активный участник

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 24 Март 2015 - 11:43

Странно, приведу полный код, который стоит в действии:

$arr['Менеджер'] = $line['Менеджер ОП'];
$arr['Название'] = $line['Название компании'];
$arr['Город'] = $line['Город'];
$arr['Деятельность'] = $line['Сфера деятельности'];
$arr['Телефон1'] = $line['Телефон'];
$arr['E-mail'] = $line['E-mail'];
$arr['Комментарий'] = $line['Примечание'];
$arr['Наша компания'] = '4';
$arr['Услуга'] = $line['Тип заявки'];
$arr['Анкета на сайт'] = $line['Анкета'];
$arr['№ заявки'] = $line['№ заявки'];
$newid_kontr = insert_query($arr, "Контрагенты"); // создаем новую запись в т. Контрагенты
//создаем записи в т. Сотрудники
$sotr['Контрагент'] = $newid_kontr; 
$sotr['ФИО'] = $line['Контактное лицо'];
$sotr['Моб. телефон'] = $line['Телефон'];
$sotr['E-mail'] = $line['E-mail'];
$newid_sotr = insert_query($sotr, "Сотрудники"); 

$line['Статус'] = "Договор";
$line['Дата переноса в контрагенты'] = date ("Y-m-d H:i:s");
$line['Юр. название'] = $newid_kontr; // [color=#880000][size=2]в таблице из которой выполняется доп. действие пытаюсь подставить связь с созданной записью. Поле "Юр название" - поле связи с полем "Юридическое название" т. Контрагенты[/size][/color]


#7 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 25 Март 2015 - 09:42

Да вроде и тут тоже самое, ошибок не вижу.

#8 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 30 Март 2015 - 13:55

Если поля типа "связь", то наверно так будет правильно:

$arr['Менеджер']=$line['Менеджер ОП']['ID'];

Связь же по ID осуществляется

Сообщение отредактировал Александр Пономарев: 30 Март 2015 - 13:58






Количество пользователей, читающих эту тему: 3

0 пользователей, 3 гостей, 0 анонимных