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


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


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

#1 oknik

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

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

Отправлено 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
  • 191 сообщений
  • Пол:Мужчина
  • Город:Новосибирск

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

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


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

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


#3 oknik

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

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

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

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

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

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

#4 Dinak

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

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

Отправлено 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
  • 42 сообщений

Отправлено 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
  • 191 сообщений
  • Пол:Мужчина
  • Город:Новосибирск

Отправлено 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 228 сообщений
  • Пол:Мужчина
  • Город:Казань

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

Цитата

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

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


Цитата

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

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

Цитата

syntax error, unexpected ''

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

#8 oknik

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

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

Отправлено 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
  • 42 сообщений

Отправлено 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 228 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 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
  • 42 сообщений

Отправлено 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 228 сообщений
  • Пол:Мужчина
  • Город:Казань

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

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

#13 oknik

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

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

Отправлено 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 228 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 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, т.е. сырое значение поля связи из БД. Теоретически они должны быть идентичны (кроме случая когда связь нерабочая), но мало ли.





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

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