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


ошибка при получении данных из поля


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

#1 oknik

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

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

Отправлено 11 Январь 2017 - 02:37

таблица "цены доменов" содержит поля "регистратор" - "зона" - "цена продления"
связанная с ней таблица "домены" содержит поле "цена продления"

код:
// пишем цену из справочника
$result = data_select_field(791, "f11801 as cena_domena", "status=0 AND f11781=",$line['Регистратор']['id']," AND f11791=",$line['Зона']['id']," )
$row = sql_fetch_assoc($result);
$line['Цена продления'] = $row['cena_domena'];

выдает ошибку:

Цитата

18: $row = sql_fetch_assoc($result);
19: $line['f11071'] = $row['cena_domena'];

syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING)


#2 Dinak

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

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

Отправлено 11 Январь 2017 - 07:11

,$line['Зона']['id']," )


Лишняя кавычка с запятой в конце строки!

Сообщение отредактировал Dinak: 11 Январь 2017 - 07:11


#3 oknik

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

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

Отправлено 12 Январь 2017 - 01:04

ок, все заработало )
не понятно только вообще как это все здесь работает теперь, не понятно какие кавычки что открывают а какие закрывают:
почему тогда здесь они остаются
"status=0 AND f11781=",$line['Регистратор']['id']," AND f11791=",$line['Зона']['id']
а именно в конце не нужны?

и самое главное, что результат вычисления не записывается в поле, остается 0
$line['Цена продления'] = $row['cena_domena'];

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

#4 Dinak

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

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

Отправлено 12 Январь 2017 - 06:34

Как вариант, запихайте его в крон, отметьте галку запретить выполнение, напишите
$result = data_select_field(791, "f11801 as cena_domena", "status=0 AND f11781=",$line['Регистратор']['id']," AND f11791=",$line['Зона']['id'] )
$row = sql_fetch_assoc($result);
print($row);
Запустите крон вручную и увидите что содержится в массиве $row

Сообщение отредактировал Dinak: 12 Январь 2017 - 06:35


#5 oknik

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

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

Отправлено 17 Январь 2017 - 18:22

Просмотр сообщенияDinak (12 Январь 2017 - 06:34) писал:

Как вариант, запихайте его в крон, отметьте галку запретить выполнение, напишите
$result = data_select_field(791, "f11801 as cena_domena", "status=0 AND f11781=",$line['Регистратор']['id']," AND f11791=",$line['Зона']['id'] )
$row = sql_fetch_assoc($result);
print($row);
Запустите крон вручную и увидите что содержится в массиве $row

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

сделал так, просто заменил на реальные id:
$result = data_select_field(791, "f11801 as cena_domena", "status=0 AND f11781=17 AND f11791=1 )
$row = sql_fetch_assoc($result);
print($row);

получается так
Parse error: syntax error, unexpected end of file in public_html/include/functions1.php(6306) : eval()'d code on line 3

Сообщение отредактировал oknik: 17 Январь 2017 - 19:38


#6 Dinak

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

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

Отправлено 18 Январь 2017 - 08:04

Ошибка синтаксиса, попробуйте так!

$result = data_select_field(791, "f11801 as cena_domena", "`status`='0' AND `f11781`='17' AND `f11791`='1'" ) // кавычку не закрыли
$row = sql_fetch_assoc($result);
print $row['cena_domena'];


#7 CbCoder

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

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

Отправлено 31 Январь 2017 - 17:33

Цитата

не понятно только вообще как это все здесь работает теперь, не понятно какие кавычки что открывают а какие закрывают:
почему тогда здесь они остаются
"status=0 AND f11781=",$line['Регистратор']['id']," AND f11791=",$line['Зона']['id']
а именно в конце не нужны?

А вы элементарно подсчитать кавычки не можете? Их всегда должно быть четное число, как скобок, т.е. обязательно закрывающая и открывающая. Во-вторых, специально для невнимательных есть подсветка кода (это не оскорбление - мы все можем чего-то не заметить), и на ней, если вы посмотрите на свои же сообщения, явно видно, где забыта закрывающая кавычка: зеленые строки там их где быть не должно.


Цитата

получается так
Parse error: syntax error

Еще одна подсказка, что у вас синтаксическая ошибка в коде, значит что-то где то пропустили/опечатались.

Цитата

syntax error, unexpected ''

А тут даже прямо написано по английски, что кавычка не закрыта...

#8 oknik

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

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

Отправлено 11 Февраль 2017 - 19:36

Просмотр сообщенияCbCoder (31 Январь 2017 - 17:33) писал:

А вы элементарно подсчитать кавычки не можете? Их всегда должно быть четное число, как скобок, т.е. обязательно закрывающая и открывающая. Во-вторых, специально для невнимательных есть подсветка кода (это не оскорбление - мы все можем чего-то не заметить), и на ней, если вы посмотрите на свои же сообщения, явно видно, где забыта закрывающая кавычка: зеленые строки там их где быть не должно.




Еще одна подсказка, что у вас синтаксическая ошибка в коде, значит что-то где то пропустили/опечатались.



А тут даже прямо написано по английски, что кавычка не закрыта...

Я может быть каких то основ не понимаю. Как вообще код "читается" при выполнении и пр.

вот если разбить кавычки попарно, то какой вариант правильный?

такой
"status=0 AND f11781=",$line['Регистратор']['id']," AND f11791=",$line['Зона']['id']
или такой
"status=0 AND f11781=",$line['Регистратор']['id']," AND f11791=",$line['Зона']['id']

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

Сообщение отредактировал oknik: 11 Февраль 2017 - 19:57


#9 oknik

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

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

Отправлено 12 Февраль 2017 - 00:02

Просмотр сообщенияDinak (18 Январь 2017 - 08:04) писал:

Ошибка синтаксиса, попробуйте так!

$result = data_select_field(791, "f11801 as cena_domena", "`status`='0' AND `f11781`='17' AND `f11791`='1'" ) // кавычку не закрыли
$row = sql_fetch_assoc($result);
print $row['cena_domena'];

в кроне вот так все работает правильно
$result = data_select_field(791, "f11801 as cena_domena", "`status`='0' AND `f11781`='17' AND `f11791`='1'" );
$row = sql_fetch_assoc($result);
print $row['cena_domena'];

в вычислении вот так прописывает ноль
$result = data_select_field(791, "f11801 as cena_domena", "status=0 AND f11781=",$line['Регистратор']['ID']," AND f11791=",$line['Зона']['ID'] );
$row = sql_fetch_assoc($result);
$line['Цена продления'] = $row['cena_domena'];
f11781=",$line['Регистратор']['ID']," AND f11791=",$line['Зона']['ID']
здесь точно ничего не перепутано, перепроверял не один раз

Сообщение отредактировал oknik: 12 Февраль 2017 - 00:37


#10 CbCoder

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

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

Отправлено 13 Февраль 2017 - 13:43

Цитата

вот если разбить кавычки попарно, то какой вариант правильный?
такой
"status=0 AND f11781=",$line['Регистратор']['id']," AND f11791=",$line['Зона']['id']
или такой
"status=0 AND f11781=",$line['Регистратор']['id']," AND f11791=",$line['Зона']['id']

А в чем разница то? Кроме вашего выделения цветом? Если вы же имеете ввиду, существует ли вложенность, то разумеется нет, хотя бы потому что в отличие от скобок, открывающая и закрывающая кавычки никак не отличаются от друг от друга, поэтому различить где конец первой, а где якобы начало "вложенной" - невозможно. Поэтому четные всегда закрывают, а нечетные - открывают. Опять же, смотрите на подсветку кода, текст внутри кавычек всегда зеленый - это означает он обрабатывается интерпретатором как строковое выражение, а не как команда языка, переменная или функция.

Цитата

у меня как вы наверное догадываетесь, "калейдоскопическое знание" php и sql

У вас незнание базовых основ программирования (причем вообще, а не только PHP). У нас в документации специально прописано, что вычисления могут писать только люди, владеющие программированием.

Цитата

здесь точно ничего не перепутано, перепроверял не один раз

В любом случае или где-то все таки ошиблись, или просто в таблице 791 нет полей с такими значениями $line['Регистратор'] и $line['Зона']. Других версий не вижу.

#11 oknik

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

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

Отправлено 13 Февраль 2017 - 22:27

Просмотр сообщенияCbCoder (13 Февраль 2017 - 13:43) писал:

В любом случае или где-то все таки ошиблись, или просто в таблице 791 нет полей с такими значениями $line['Регистратор'] и $line['Зона']. Других версий не вижу.

вы правы, ошибка все таки есть
здесь наверное были лишние ID, их видимо не надо было писать(так я подумал), так как например поля f11781 и Регистратор - это связи одного и того же поля из третьей таблицы
наверное(подумал я) вот так надо:
$result = data_select_field(791, "f11801 as cena_domena", "status=0 AND f11781=",$line['f11041']," AND f11791=",$line['Зона'] );
$row = sql_fetch_assoc($result);
$line['Цена продления'] = $row['cena_domena'];
теперь пишет цены, но для всех одну и туже )
что теперь может быть не так?
когда запускаю через Cron то все работает правильно (но в кроне я прописываю конкретные id)

ps про программирование, да, вы правы, я плохо учился в техникуме )

Сообщение отредактировал oknik: 13 Февраль 2017 - 23:57


#12 CbCoder

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

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

Отправлено 14 Февраль 2017 - 10:33

У вас наверняка логическая ошибка в самом алгоритме. Т.е. вы просто не те значения подставляете в запрос. Опишите еще раз подробно вашу задачу, с пояснением что есть а)текущая таблица, б)таблица 791, куда вы обращаетесь запросом, в) поля Регистратор и Зона, если это поля связи, то с чем они связаны, г) поля f11781 и f11791 - опять же что это за поля, связи или нет, если связи то с чем

#13 oknik

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

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

Отправлено 15 Февраль 2017 - 22:47

Таблицы справочники:
таб. Доменные зоны
f11951 "Зона домена" (текст)
таб. Регистраторы доменов
f11561 "Регистратор домена" (текст)
таб. Цены на домены(791)
f11801 "Цена продления" - (число)
f11791 "Зона" - (связь c f11951)
f11781 "Регистратор" - (связь c f11561)

Целевая таблица в которой производится вычисление для поля "Цена продления":
таб. Домены
f11031 "Цена продления" (число)
f11811 "Зона" - (связь с f11951)
f11041 "Регистратор" - (связь с f11561)

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

  • Прикрепленное изображение: 711.png
  • Прикрепленное изображение: 771.png
  • Прикрепленное изображение: 791.png
  • Прикрепленное изображение: 811.png

Сообщение отредактировал oknik: 15 Февраль 2017 - 22:53


#14 CbCoder

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

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

Отправлено 17 Февраль 2017 - 15:00

Да, вроде как запрос верный, с учетом этих данных. Попробуйте что ли тогда, не знаю, такой вариант:

$result = data_select_field(791, "f11801 as cena_domena", "status=0 AND f11781=",$line['Регистратор']['raw']," AND f11791=",$line['Зона']['raw'] );
$row = sql_fetch_assoc($result);
$line['Цена продления'] = $row['cena_domena'];

Тут я заменил ID на raw, т.е. сырое значение поля связи из БД. Теоретически они должны быть идентичны (кроме случая когда связь нерабочая), но мало ли.

#15 oknik

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

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

Отправлено 11 Март 2017 - 02:29

Просмотр сообщенияCbCoder (17 Февраль 2017 - 15:00) писал:

Да, вроде как запрос верный, с учетом этих данных. Попробуйте что ли тогда, не знаю, такой вариант:

$result = data_select_field(791, "f11801 as cena_domena", "status=0 AND f11781=",$line['Регистратор']['raw']," AND f11791=",$line['Зона']['raw'] );
$row = sql_fetch_assoc($result);
$line['Цена продления'] = $row['cena_domena'];

Тут я заменил ID на raw, т.е. сырое значение поля связи из БД. Теоретически они должны быть идентичны (кроме случая когда связь нерабочая), но мало ли.
Извиняюсь за долгий ответ, попробовал ваш вариант, везде прописывается 0.
Прикрепляю скрины таблиц справочников, может что в них вам будет видно?
Прикрепленное изображение: доменные зоны.png Прикрепленное изображение: регистраторы доменов.png Прикрепленное изображение: цены на домены.png

#16 oknik

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

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

Отправлено 11 Март 2017 - 02:39

пример домена где пишет 120 вместо 125

это домен:
Прикрепленное изображение: пример домена.png

это фильтр в таблице "Цены на домены" (откуда вычисление должно по идее брать цену) с вручную настроенным фильтром(подтверждение что запись есть и она всего одна):
Прикрепленное изображение: фильтр по регу и зоне.png

как видно цена должна быть 125, но прописывается 120

Сообщение отредактировал oknik: 11 Март 2017 - 02:40






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

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