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


Ошибка сохранения в подчиненной таблице


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

#1 DarkNight

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

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

Отправлено 21 Май 2010 - 09:34

версия 1.7.1

есть таблица "клиенты", у нее есть подчиненная "отчеты"

если из позиции клиента внизу на вкладке отчеты создавать новый отчет, то первый сохраняется нормально, а второй не сохраняется. По нажатию кнопки "сохранить", открывается чистая страница.

В логах нашел такое,
PHP Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /srv/www/htdocs/view_line.php(231) : eval()'d code on line 3
PHP Fatal error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\xf1\xee\xf2\xf0\xf3\xe4\xed\xe8\xea\xe0' at line 1<br>UPDATE f_data44 SET id=id WHERE id=\xd4\xc8\xce \xf1\xee\xf2\xf0\xf3\xe4\xed\xe8\xea\xe0<br> in /srv/www/htdocs/view_line.php on line 146

#2 CbCoder

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

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

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

Ошибка в ваших "вычислениях таблицы", которые вы судя по сему добавили в таблицу "отчеты"

#3 DarkNight

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

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

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

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

Ошибка в ваших "вычислениях таблицы", которые вы судя по сему добавили в таблицу "отчеты"

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

#4 CbCoder

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

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

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

Ошибка в любом случае в вашем вычислении - об этом говорят ваши же логи. То что она в одном случае проявляется а в другом нет - еще ни о чем не говорит. Выложите лучше код вычисления здесь.

#5 DarkNight

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

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

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

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

Выложите лучше код вычисления здесь.
$table = data_table("Отчет","id={ID}");
  $gr = data_table("Подразделения","`Менеджер` like '%-".$table['ФИО сотрудника']."-%'");
  $row = mysql_fetch_row($gr);
  if ($row = 1)
	{
	 $table['Подразделение']=$gr['Код'];
	 update_table($table,"Отчет","id={ID}");
	}


#6 CbCoder

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

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

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

Вы неправильно используете функцию data_table. Вам нужно либо использовать стандартную mysql_query в сочетании с вашей mysql_fetch_row, либо переделать код на проверку того заполняется ли массив $gr и убрать вообще mysql_fetch_row, которая здесь "не в тему"

#7 CbCoder

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

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

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

Сейчас проверил как работает функция data_table - в текущей реализации затруднительно проверять возвращает ли вообще запрос строку, точнее там вообще нет такой проверки. Я переделал эту функцию, теперь она возвращает false в случае отсутствия результата. Замените файл include/function2.php приложенным ниже и переделайте свой код на следующий:
$table = data_table("Отчет","id={ID}");
  $gr = data_table("Подразделения","`Менеджер` like '%-".$table['ФИО сотрудника']."-%'");
  if ($gr!=false)
	{
	 $table['Подразделение']=$gr['Код'];
	 update_table($table,"Отчет","id={ID}");
	}

Прикрепленный файл  functions2.php   7,44К   179 Количество загрузок:

#8 DarkNight

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

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

Отправлено 21 Май 2010 - 12:18

Результат тот же, такая же ошибка

#9 CbCoder

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

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

Отправлено 21 Май 2010 - 12:31

Понятно, первая ошибка из вашего лога была обусловлена тем что я написал выше - и ее больше выходить не должно, если вы исправили свой код. Но фатальный останов вызывает действительно не она, а вторая. Здесь без вашей бд уже не разобраться. Вышлите бэкап базы на support@clientbase.ru.

http://clientbase.ru...?showtopic=1787

#10 DarkNight

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

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

Отправлено 21 Май 2010 - 16:03

Бекап выслал.

#11 CbCoder

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

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

Отправлено 21 Май 2010 - 17:30

Вторую ошибку вызывает тоже ваше вычисление. Правда эта ошибка уже не так очевидна как первая. Дело в том что вы определяете свою переменную $table:

$table = data_table("Отчет","id={ID}");
которая вступает в конфликт с одноименной переменной в коде ядра программы, вернее подменяет ее. Вам необходимо заменить эту переменную на другую, например $otchet

В ближайшее время мы скорее всего исправим программу так чтобы пользовательские переменные не конфликтовали с переменными ядра. Пока желательно избегать давать своим переменным простые имена типа "table", "field", "$user" и т.д.





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

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