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


Добавление записи через вычисление


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

#181 Bart

    Участник

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

Отправлено 19 Май 2018 - 02:23

Здравствуйте. Текущее вычисление срабатывает при добавлении новой записи в таблицу Счета (запись А). Как сделать так, чтобы после того, как через insert_query я создал еще одну запись (запись Б) в другой таблице, записать ID этой записи Б в поле "ID проекта" записи А?

пробовал такой код, в запись с номером 199 записывается все, кроме ID записи Б (может я ошибся с переменной $new_id и она за другое отвечает?). А вместо 199 еще не понимаю какую переменную указать, чтобы именно в текущую создаваемую запись А все прописывалось

if ($line['Создать проект'] == "Да")
{
$data['Описание проекта'] = $line['Описание проекта'];
$data['Срок сдачи'] = $line['Срок сдачи'];
insert_query($data,"Проекты");
}
$data['ID проекта'] = "$new_id";
update_query($data, "Счета", "`id`= 199");

Сообщение отредактировал Bart: 19 Май 2018 - 10:59


#182 maksbazhin

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

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

Отправлено 19 Май 2018 - 22:39

Попробуйте:
if ($line['Создать проект'] == "Да")
{
$data['Описание проекта'] = $line['Описание проекта'];
$data['Срок сдачи'] = $line['Срок сдачи'];
$new_id = insert_query($data,"Проекты");

$data['ID проекта'] = $new_id;
update_query($data, "Счета", "`id`= 199");
}

$new_id возвращает insert_query
и вместо `id`= 199 должна быть переменная

#183 Bart

    Участник

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

Отправлено 20 Май 2018 - 09:02

запись в "Проекты" создалась, но в 'ID проекта' ничего не записалось

Цитата

и вместо `id`= 199 должна быть переменная
да, весь вопрос в том - какая переменная подходит? Здесь должен быть id создаваемой записи в "Счета" (Запись А)

#184 maksbazhin

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

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

Отправлено 20 Май 2018 - 11:41

Просмотр сообщенияBart (20 Май 2018 - 09:02) писал:

запись в "Проекты" создалась, но в 'ID проекта' ничего не записалось


да, весь вопрос в том - какая переменная подходит? Здесь должен быть id создаваемой записи в "Счета" (Запись А)
по идее $lline['ID'] т. е. ид текущей записи откуда запускается вычисление, $new_id в кавычки попробуйте.

#185 Bart

    Участник

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

Отправлено 20 Май 2018 - 14:18

если использую $lline['ID'] (в разных вариантах, в кавычках, без), то ругается: syntax error, unexpected T_VARIABLE

#186 maksbazhin

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

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

Отправлено 20 Май 2018 - 16:49

там беда кавычки в кавычках
как вариант $id=$line['ID']; и вставить $id,
можно взять в фигурные скобки {$line['ID']}.

#187 Bart

    Участник

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

Отправлено 20 Май 2018 - 17:12

Цитата

можно взять в фигурные скобки {$line['ID']}.
это эффекта не дало(

Цитата

$id=$line['ID']
заменил "`id`= {$line['ID']}" на "$id=$line['ID']", ругается: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING

Сообщение отредактировал Bart: 20 Май 2018 - 17:15


#188 maksbazhin

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

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

Отправлено 20 Май 2018 - 17:32



Имя:


data_update


Описание:


Обновление строк в таблице dataN (запрос "UPDATE").


Параметры:


$table_id - id таблицы
$data - массив данных (ключи - имена полей)
3й и последующие параметры - условия отбора записей

Вторым аргументом может быть специальное значение EVENTS_ENABLE, в этом случае при обновлении будут запущены вычисления при изменении полей.


Примеры:


data_update(111, array('f22'=>'Измененный клиент'), "id=", 2); // без вычислений
data_update(111, EVENTS_ENABLE, array('f22'=>'Измененный клиент'), "id=", 2); // с запуском вычислений


#189 maksbazhin

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

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

Отправлено 20 Май 2018 - 17:34

пример из штатного вычисления: data_update(290, EVENTS_ENABLE, array('status' => 2), 'status = ', $line['Статус записи'], ' AND f4730 = ', $line['ID']);

#190 Bart

    Участник

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

Отправлено 20 Май 2018 - 18:38

к сожалению у меня не хватает познаний, чтобы понять, что вы написали((( я "методом тыка" разобрался со своим кодом, более менее, понимаю как он работает, и опытным путем установил, что если вместо $new_id я вписываю просто число, то вычисление корректно срабатывает, понять бы почему с переменной не срабатывает. Или у у меня код принципиально некорректный и тут по другой логике нужно вычисления строить?

#191 maksbazhin

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

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

Отправлено 20 Май 2018 - 19:20

Просмотр сообщенияBart (20 Май 2018 - 18:38) писал:

к сожалению у меня не хватает познаний, чтобы понять, что вы написали((( я "методом тыка" разобрался со своим кодом, более менее, понимаю как он работает, и опытным путем установил, что если вместо $new_id я вписываю просто число, то вычисление корректно срабатывает, понять бы почему с переменной не срабатывает. Или у у меня код принципиально некорректный и тут по другой логике нужно вычисления строить?
:) я тем же методом. data_update - штатная функция обновления строки.
update_query не нашел поэтому синтаксис не подскажу.

#192 Bart

    Участник

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

Отправлено 20 Май 2018 - 19:57

Почти разобрался. Жирным выделили изменения, которые я внес


if ($line['Создать проект'] == "Да")
{
$data['По компании'] = $ID;
$data['Описание проекта'] = $line['Описание проекта'];
$data['Срок сдачи'] = $line['Срок сдачи'];
insert_query($data,"Проекты");
$new_id = insert_query($data,"Проекты");
$data['ID проекта'] = $new_id;
update_query($data, "Счета", "`id`=$ID");
}

Все работает корректно, за одним исключением: функция insert_query срабатывает два раза. То есть, в таблице "Проекты" создается 2 записи =(

Сообщение отредактировал Bart: 20 Май 2018 - 22:29


#193 Bart

    Участник

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

Отправлено 20 Май 2018 - 22:17

Помогите пожалуйста разобраться с еще одной проблемой. Вот код:

if ($line['ID проекта'] != 0)
{
if ($line['Оплачено'] == $line['Сумма к оплате'])
{
$data['Принято заказчиком'] = "Да";
update_query($data, "Проекты", $line['ID проекта']);
}}

При этом, если я третьим аргументом в update_query задаю вручную "`id`=81", то все работает корректно, а если я задаю переменную (как в примере моего кода выше), в которой это значение лежит, то в таблице "Проекты" в поле 'Принято заказчиком' значение "Да" прописывается каждой содержащейся в таблице записи, но ведь должно же только по одной, или я не прав?

Почему через переменную - всем записям значения присваиваются, а если вручную id записи прописываю, то корректно срабатывает - только по одной заданной записи?

При этом, в переменную кладется корректное значение, я проверял, дело тут в чем-то другом, почему может многократно срабатывать скрипт?

#194 maksbazhin

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

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

Отправлено 20 Май 2018 - 23:25

создается 2 записи - возможно вычисление стартует два раза или в таблице настроено сохранение при добавлении.
по второму $line['ID проекта'] и ID разные поля

#195 Bart

    Участник

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

Отправлено 21 Май 2018 - 00:48

Цитата

создается 2 записи - возможно вычисление стартует два раза или в таблице настроено сохранение при добавлении.
методом тыка причину нашел:

вот эта строчка лишняя:
insert_query($data,"Проекты");

Цитата

по второму $line['ID проекта'] и ID разные поля
указывал так:
update_query($upd_data, "Проекты", "id=$line['ID проекта']");
не помогает

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

Сообщение отредактировал Bart: 21 Май 2018 - 08:51


#196 CbCoder

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

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

Отправлено 21 Май 2018 - 10:35

Правильно так: update_query($upd_data, "Проекты", "id=".$line['ID проекта']); Переменная не должна быть внутри кавычек, иначе это не переменная уже, а строковые данные.

#197 Bart

    Участник

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

Отправлено 21 Май 2018 - 10:48

спасибо, помогло





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

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