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


Поиск основанный на сессиях


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

#1 wondertalik

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

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 06 Май 2013 - 15:09

Имеется код, до перехода на 197 работал. Теперь выдает ошибку

    if ($_GET['napravl'] == 'yes') {
	    $_SESSION[$ses_id]['search'][93][0]['field'] = 1221;
	    $_SESSION[$ses_id]['search'][93][0]['term'] = "period";
	    $_SESSION[$ses_id]['search'][93][0]['value_field'] = form_local_time($_GET['d1'] . " 00:00");
	    $_SESSION[$ses_id]['search'][93][0]['value_field2'] = form_local_time($_GET['d2'] . " 23:59");
	    $_SESSION[$ses_id]['search'][93][0]['union'] = " and ";
	    $_SESSION[$ses_id]['search'][93][1]['field'] = 1919;
	    $_SESSION[$ses_id]['search'][93][1]['term'] = "=";
	    $_SESSION[$ses_id]['search'][93][1]['value_field'] = $_GET['v'];

	    header("Location: " . $config["site_root"] . "/fields.php?table=93");

Ошибка:

SQL error in
SELECT count(*) as total_rec FROM f5_data93 WHERE status=0 and ((left(f1221,10)>='0000-00-00' and left(f1221,10)<='9999-99-99') and f1919=''f2419'')
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 'f2419'')' at line 1
In function:
/home/s/smartmedia/1.smartmd.ru/public_html/fields.php(950) : sql_query()
Ревизия последняя. Что делать?

#2 Гость_Roman_*

  • Гости

Отправлено 06 Май 2013 - 15:48

Используйте функцию set_filter(). Пример работы можно посмотреть в отчётах из стандартной конфигурации. Механизм поиска в версии 1.9.7 поменялся.

#3 wondertalik

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

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 06 Май 2013 - 15:49

в 198 механизм меняться будет или останется таким же?
Что такое reset_filter()? Какой параметр передается туда?

Сообщение отредактировал wondertalik: 06 Май 2013 - 16:00


#4 Гость_Roman_*

  • Гости

Отправлено 06 Май 2013 - 16:01

Механизм может изменится, поэтому лучше устанавливать поиск через функцию. Такой способ будет работать на всех версиях.
reset_filter($field_id) - сброс поиска по полю.
reset_filters($table_id) - сброс поиска по всей таблице.
В set_filter() последний параметр - условие объединения. Если его опустить, то будет "and". Функцию можно вызывать многократно, соответсвтвенно количеству условий. Все вышеперечисленные функции доступны для просмотра в файле functions2.php папки include.

#5 wondertalik

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

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 06 Май 2013 - 17:41

Цитата

поле "Дата оплаты" с 01.04.2012 по 30.04.2012 и поле "Менеджер" "Тина" и поле "Менеджер" "" и поле "юр.название2" "ОАО “АК БАРС” БАНК"

set_filter(1221, "period", form_local_time($_GET['d1'] . " 00:00"), form_local_time($_GET['d2'] . " 23:59"));
set_filter(1847, " = ", $_GET['v']);
set_filter(1547, " = ", 'ДР');
set_filter(1918, " != ", 'ОАО “АК БАРС” БАНК');
Почему условие " != " не срабатывает?

Сообщение отредактировал wondertalik: 06 Май 2013 - 17:55


#6 Гость_Roman_*

  • Гости

Отправлено 07 Май 2013 - 08:13

Лишние пробелы в условии. У Вас и "=" не срабатывает.

#7 wondertalik

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

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 07 Май 2013 - 09:42

$men = 'id=30 OR id=32 OR id=1 OR id=89 OR id=100 OR id=81 OR id=77 OR id=86 OR id=47 OR id=94 OR id=99'; 
 reset_filters(85);
  set_filter(1006, "period", form_local_time($_GET['d1'] . " 00:00"), form_local_time($_GET['d2'] . " 23:59"));

  $sqlQuery = "SELECT `id` from " . USERS_TABLE . " WHERE ".$men;
  $r = mysql_query($sqlQuery) or die(mysql_error()."<br>".$sqlQuery);
  while($user_itogo = mysql_fetch_assoc($r)) {
   set_filter(994, "=", $user_itogo['id'], "or");
  }


  set_filter(1942, "<=", 500);
Как задать условия или "or" - не срабатывает.

Сообщение отредактировал wondertalik: 07 Май 2013 - 09:43


#8 Гость_Roman_*

  • Гости

Отправлено 07 Май 2013 - 10:10

set_filter(994, "=", $user_itogo['id'], "or");
Пропустили параметр.
set_filter(994, "=", $user_itogo['id'], "",  "or");


#9 wondertalik

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

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 07 Май 2013 - 10:12

Поправил и получил
SQL error in
SELECT count(*) as total_rec FROM f5_data85 WHERE status=0 and (`f1449`!='0') and ((left(f1006,10)>='2012-01-01' and left(f1006,10)<='2012-01-31') and abs(f994)='1'orabs(f994)='30'orabs(f994)='32'orabs(f994)='47'orabs(f994)='77'orabs(f994)='81'orabs(f994)='86'orabs(f994)='89'orabs(f994)='94'orabs(f994)='99'orabs(f994)='100'orf1942<='500')
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 'orabs(f994)='30'orabs(f994)='32'orabs(f994)='47'orabs(f994)='77'orabs(f994)='81'' at line 1
In function:
/home/s/smartmedia/1.smartmd.ru/public_html/fields.php(951) : sql_query()


#10 Гость_Roman_*

  • Гости

Отправлено 07 Май 2013 - 10:23

В Вашем случае операнды стоит ограничить пробелами - " or ".





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

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