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


Не могу разобраться с кодом


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

#1 arsenal

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

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

Отправлено 06 Май 2011 - 10:14

Имеем таблицу "Договора" и подчиненную таблицу 93 "Дополнительные соглашения". В таблице "Доп. соглашения" соответственно есть первое поле связи f994 с номером договора и поле f995 - номер доп. соглашения
Есть код для доп. действия в таблице "Договора" для добавления дополнительного соглашения к договору. Находим доп. соглашение с максимальным номером, которое уже есть по данному договору и добавляем новое с номером +1.
$dogov = data_table("Договора","id={ID}");
 // Выбираем запись в таблице "Доп. соглашения" с максимальным номером
$sqlQuery = "SELECT * FROM ".DATA_TABLE."93 WHERE status=0 AND f994='".$dogov['id']."' ORDER BY f995 desc LIMIT 0,1";
$result = mysql_query($sqlQuery) or user_error(mysql_error()."<br>".$sqlQuery."<br>", E_USER_ERROR);
$dop_max = mysql_fetch_array($result);

$data['№ договора'] = $dogov['ID'];
$data['№ ДС'] = $dop_max['№ ДС']+1;
$new_id = insert_query($data, "Дополнительные соглашения");
echo "<script>location.href='".$config["site_root"]."/view_line.php?table=93&line=".$new_id."'</script>";
Однако sql-запрос не находит ни одного доп. соглашения и все время создается ДС с номером 1
Пробовал f994={ID} - то же самое.
Что не правильно в запросе?

#2 CbCoder

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

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

Отправлено 06 Май 2011 - 10:45

$dop_max['№ ДС'] - такого элемента в данном массиве существовать не может. Вы путаете результат нашей функции data_table, которая выдает массив с внешними именами полей ("№ ДС" и т.д.), и результат функции mysql_fetch_array, которая выдает массив с внутренними именами ("f995"). Это совершенно разные вещи.

#3 arsenal

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

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

Отправлено 06 Май 2011 - 11:21

Просмотр сообщенияРазработчик (6.5.2011, 10:45) писал:

$dop_max['№ ДС'] - такого элемента в данном массиве существовать не может. Вы путаете результат нашей функции data_table, которая выдает массив с внешними именами полей ("№ ДС" и т.д.), и результат функции mysql_fetch_array, которая выдает массив с внутренними именами ("f995"). Это совершенно разные вещи.

Спасибо, заработало.
Но все таки хотелось бы разобраться, почему в запросе выражение вида f994={ID} работает, а f994='".$dogov['id']."' не работает? Пробовал f994='".$dogov['f1141']."' тоже не работает.

#4 CbCoder

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

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

Отправлено 06 Май 2011 - 11:37

"Пробовал f994='".$dogov['f1141']" - разумеется это не сработает по причине обратной выше (здесь наоборот результат функции data_table)

$dogov['id'] же не работает по той причине что внешнее имя поля "ID", а не "id". Регистр ключей массивов в PHP имеет значение.


Кстати и 'f1141' для поля "ID" - неверное внутреннее имя поля. У служебных полей имена свои, не вида fN:
ID - id
Кто добавил - user_id
Время добавления - add_time
Статус записи - status

Связано это с тем, что ранее служебные поля были скрыты и не прописаны во внешней структуре таблицы.





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

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