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


Подтянуть данные из связанной таблицы


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

#1 nk

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

  • Пользователи
  • PipPipPip
  • 228 сообщений
  • Пол:Мужчина

Отправлено 03 Октябрь 2012 - 00:59

Как сделать, чтобы при выборе значения в поле связи другое поле текущей таблицы заполнилось значением одного из полей связанной таблицы?

Например, выбираем клиента, в поле "Тел" записывается значение поля "Телефон" из таблицы клиенты (из выбранной строки).

Не вычислением при сохранении записи, а чтобы заполнилось при редактировании записи, как только выбрали значение в поле связи.

#2 Гость_Roman_*

  • Гости

Отправлено 03 Октябрь 2012 - 10:26

К полю связи пишите Javascript, который будет отправлять AJAX-запрос и, соответственно, вставлять данные в поле с телефоном. В качестве скрипта для обработки данных можно создать доп. действие.

#3 nk

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

  • Пользователи
  • PipPipPip
  • 228 сообщений
  • Пол:Мужчина

Отправлено 03 Октябрь 2012 - 12:37

Делал по примеру http://clientbase.ru...?showtopic=3620, я так понимаю, другого способа нет?

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

#4 Гость_Roman_*

  • Гости

Отправлено 03 Октябрь 2012 - 13:09

Ну можно изменить JavaScript из примера. Т. е. если значение поля пустое, то делать пустым поле с телефоном, иначе выполняется AJAX-запрос.

#5 nk

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

  • Пользователи
  • PipPipPip
  • 228 сообщений
  • Пол:Мужчина

Отправлено 03 Октябрь 2012 - 13:12

Просмотр сообщенияRoman (03 Октябрь 2012 - 13:09) писал:

Ну можно изменить JavaScript из примера. Т. е. если значение поля пустое, то делать пустым поле с телефоном, иначе выполняется AJAX-запрос.

Для поля связи значение надо сравнивать с '0' или с ''?

#6 nk

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

  • Пользователи
  • PipPipPip
  • 228 сообщений
  • Пол:Мужчина

Отправлено 03 Октябрь 2012 - 13:15

В доп. действии можно передать только строку, или любое значение?

Например


$data['Тел'] = "12345";
$data['Адр'] = "улица";
echo $data;
exit;


#7 Гость_Roman_*

  • Гости

Отправлено 03 Октябрь 2012 - 13:24

Просмотр сообщенияnk (03 Октябрь 2012 - 13:12) писал:

Для поля связи значение надо сравнивать с '0' или с ''?
С пустой строкой.

Просмотр сообщенияnk (03 Октябрь 2012 - 13:15) писал:

В доп. действии можно передать только строку, или любое значение?

Например


$data['Тел'] = "12345";
$data['Адр'] = "улица";
echo $data;
exit;
Некоррекно, у Вас в поле запишется значение "Array()". Если вы хотите, чтобы одно доп. действие меняло данные сразу в нескольких полях, то код скрипта и вывод доп. действия надо отредактировать.
Эту часть javascript:
success: function(msg) {
  document.getElementById('value444').value = msg;
}
заменить на:

success: function(msg) {
  eval(msg);
}

А в вывод доп. дейсвия должен быть такой (444 - ид поля "Телефон", 555 - ид поля "Адрес"):

$phone = "555-333-222";
$address = "Большая Улица";
echo "document.getElementById('value444').value = '$phone';";
echo "document.getElementById('value555').value = '$address';";
exit;


#8 nk

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

  • Пользователи
  • PipPipPip
  • 228 сообщений
  • Пол:Мужчина

Отправлено 03 Октябрь 2012 - 13:29

Спасибо, попробую так сделать, ещё один вопрос: можно ли обращаться к полям записей по фиксированным именам, а не по алиасам, которые могут меняться?

Например вместо $line['Телефон'] использовать что-то вроде $line['f123'] ну или типа того. При изменении имени поля приходится искать все его упоминания во всех вычислениях. Особенно это печально на начальных этапах внедрения, когда требования к системе меняются с каждый день.

#9 Гость_Roman_*

  • Гости

Отправлено 03 Октябрь 2012 - 13:38

При сохранинии вычисления $line['Телефон'] поменяется автоматически на $line['f123'], но при отображении оно снова будет выглядеть как $line['Телефон']. То есть, если Вы написали вычисление, а потом изменили название поля, то при повторном открытии вычисления можно увидеть уже новое название поля. Относится это только к массиву $line. Писать в вычислении $line['f123'] так же корректно, но при повторном открытии оно будет преобразовано в текстовый вид.

#10 nk

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

  • Пользователи
  • PipPipPip
  • 228 сообщений
  • Пол:Мужчина

Отправлено 03 Октябрь 2012 - 14:19

Понятно, значит код переписывать не надо. Спасибо.

#11 nk

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

  • Пользователи
  • PipPipPip
  • 228 сообщений
  • Пол:Мужчина

Отправлено 07 Октябрь 2012 - 17:21

Не получается обарботать "очистку" поля, м.б. его вообще надо вешать на другое событие?

$("#value112").bind("change", function()
{
customer_val = document.getElementById("value112").value;
if (customer_val == "")
{
  document.getElementById("value113").value = "";
  document.getElementById("value114").value = "";
}
else
{
  $.ajax(
  {
   type: "POST",
   url: "user_button.php",
   data: { id: '4', line: '{$line_id}', customer_id: customer_val},
   success: function(msg)
   {
	eval(msg);
   }
  });
}
});

при очистке ничего не происходит

Сообщение отредактировал nk: 08 Октябрь 2012 - 13:24


#12 nk

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

  • Пользователи
  • PipPipPip
  • 228 сообщений
  • Пол:Мужчина

Отправлено 07 Октябрь 2012 - 21:47

Можно ли аналогичную обработку повесить на добавление записи в подчиненную таблицу? Нажимаем кнопку "Добавить запись" и из родительской таблицы заполняются пара полей в подчиненной?

#13 Гость_Roman_*

  • Гости

Отправлено 08 Октябрь 2012 - 08:15

Этот момент можно решить, написав вычисление при сохранении в подчинённой таблице. При добавлении записи оно сработает и заполнит сразу же необходимые поля.

#14 nk

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

  • Пользователи
  • PipPipPip
  • 228 сообщений
  • Пол:Мужчина

Отправлено 08 Октябрь 2012 - 10:51

Просмотр сообщенияRoman (08 Октябрь 2012 - 08:15) писал:

Этот момент можно решить, написав вычисление при сохранении в подчинённой таблице. При добавлении записи оно сработает и заполнит сразу же необходимые поля.

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

на вопрос выше по очистке поля ответите?

#15 Гость_Roman_*

  • Гости

Отправлено 08 Октябрь 2012 - 13:23

Попробуйте выполнить проверку пустого значения по-другому полю.
Вот этот ненужный кусок кода:
if (customer_val == "")
{
  document.getElementById("value112").value = "";
  document.getElementById("value112").value = "";
}
else....
замените на
if (document.getElementById("edit_value112").value != "")
  {
	$.ajax( ......


#16 nk

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

  • Пользователи
  • PipPipPip
  • 228 сообщений
  • Пол:Мужчина

Отправлено 08 Октябрь 2012 - 13:24

?

#17 Гость_Roman_*

  • Гости

Отправлено 08 Октябрь 2012 - 13:28

Отредактировано.

#18 nk

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

  • Пользователи
  • PipPipPip
  • 228 сообщений
  • Пол:Мужчина

Отправлено 08 Октябрь 2012 - 14:06

То что надо, спасибо!

#19 nk

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

  • Пользователи
  • PipPipPip
  • 228 сообщений
  • Пол:Мужчина

Отправлено 18 Октябрь 2012 - 07:50

Подскажите, пожалуйста, ещё одни момент: никак не могу очистить поле связи. Текстовые поля нормально очищаются командой

document.getElementById("value113").value = "";

а поле связи не очищается на самой форме - при сохранении ругается, что оно не заполнено, перевыбираешь - сохраняет

Прикрепленные изображения

  • Прикрепленное изображение: bug1.png

Сообщение отредактировал nk: 18 Октябрь 2012 - 07:57


#20 Гость_Roman_*

  • Гости

Отправлено 18 Октябрь 2012 - 08:14

Поле связи состоит из двух полей - видимое и скрытое. Видимое поле имеет ид вида "edit_value113", а скрытое - "value113". Соответственно, чтобы полностью очистить поле связи, необходим такой код
document.getElementById("value113").value = "";
document.getElementById("edit_value113").value = "";
Ваш код очищает только скрытое поле, в котором содержится ид целевой записи поля связи, поэтому поле считается не заполненным.





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

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