[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Фильтр данных
drlipodron
На сайте происходит обращение к базе данных, врезультате чего формируется таблица. Таблица, в зависимости от страницы, может быть очень большой (до 100-200, а м.б. и больше) строк; таблица делится на страницы по 10 строк на каждой. Пользователю неудобно. Нужно обеспечить возможность фильтрации таблицы.
Возможно ли это? Надо, например, при выборе элемента из списка отобразить только соответствующие этому элементу значения. Например, выбрав одну из клиник из списка клиник, получить записи, относящиеся только к ней.

работающий php-код, в целом, выглядит так:

<?php
print $body;
if(!($node = menu_get_object()))
return;

$count_per_page = 10;
$sql = "SELECT Название, Фирма, Цена FROM Таблица WHERE Имя='%s' ORDER BY Фирма";
$sql_count = "SELECT COUNT(*) FROM Таблица WHERE Имя='%s'";
$result = pager_query($sql,$count_per_page, 0, $sql_count, $node->title);

$rows = array();
while($row = db_fetch_object($result)){
$header = array('Название по прайсу', 'Мед. компания', 'Цена услуги');
$rows[] = array($row->Название, $row->Фирма, $row->Цена);
}

$output = theme('table', $header, $rows, array());
$output .= theme('pager', NULL, $count_per_page, 0);
print $output;
?>


Пример страницы (списка как такового пока нет):
http://www.medorginfo.ru/clinic/f_ds/exxray



Спустя 2 часа, 41 минута (1.06.2010 - 22:02) vagrand написал(а):
Ну а почему нет? Добавляй в условие where дополнительные параметры фильтрации и будет тебе счастье

Спустя 7 минут, 18 секунд (1.06.2010 - 22:09) drlipodron написал(а):
я не совсем понял; в программировании не силен; я умею, конечно, where указать, но это будет "статично", а надо, чтоб пользователь "щелкал" по названию клиники - и происходила фильтрация; а так - сколько ж мне сраниц придется создавать...

не обязательно (даже этого вовсе не нужно) по клинике в ячейке таблицы; клиники могут быть вынесены в "выпадающий" список. Или просто, сбоку от таблицы будут перечислены.

Спустя 54 минуты, 55 секунд (1.06.2010 - 23:04) Gabriel написал(а):
drlipodron
ну почему сразу статически?
допустим название клиники является ссылкой при клике на ссылку добавляется параметр в урл который следом экранируется и запихивается в условия запросов.

Спустя 1 час, 34 минуты, 50 секунд (2.06.2010 - 00:39) drlipodron написал(а):
Вот, что получается...

<form method='post'>
<
select name="clinic"> <!--выпадающий список-->
<
option value="Клиника1">Клиника2</option>
<
option value="Клиника2">Клиника2</option>
<
option value="Клиника3">Клиника3</option>
</
select>
<
input name="Submit" type='submit' value='Отправить'>
</
form>

<?php
if (!empty($_POST['clinic'])) { echo $_POST['clinic']; };
if(!($node = menu_get_object()))
return;

$count_per_page = 10;
$sql = "SELECT Название, Фирма, Цена FROM Таблица WHERE Имя='%s' and WHERE Фирма='$clinic' ORDER BY Фирма";
$sql_count = "SELECT COUNT(*) FROM Таблица WHERE Имя='%s' and WHERE Фирма='$clinic'";
$result = pager_query($sql,$count_per_page, 0, $sql_count, $node->title);

$rows = array();
while($row = db_fetch_object($result)){
$header = array('Название по прайсу', 'Мед. компания', 'Цена услуги');
$rows[] = array($row->Название, $row->Фирма, $row->Цена);
}

$output = theme('table', $header, $rows, array());
$output .= theme('pager', NULL, $count_per_page, 0);
print $output;
?>


Но где-то ошибка. Не работает.

Спустя 1 день, 17 часов, 8 минут, 10 секунд (3.06.2010 - 17:47) drlipodron написал(а):
"Бьюсь" третий день. Помогите, плиз!
Мне кажется, подобных форм на сайтах довольно много (хотя, м.б. я и не прав), м.б. кто-нибудь сталкивался, знает, как они делаются? user posted image

Спустя 11 часов, 30 минут, 35 секунд (4.06.2010 - 05:17) andrey написал(а):
А что выводит, какую-то ошибку? Или вообще ничего?

Может стоит прописать перед запросом:
$clinic=$_POST['clinic'];

Спустя 13 минут, 26 секунд (4.06.2010 - 05:31) drlipodron написал(а):
Да, я уже прописывал. Сечас еще раз проверил - пустая страница. точнее, только выпадающий список имеется. даже при первой загрузке страницы. выбор элемента, Нажатие на кнопку приводит только к перезагрузке страницы и появлению соответствующей надписи под списком (это ожидалось), а вот самой таблицы как не было, так и нет.

Спустя 4 минуты, 54 секунды (4.06.2010 - 05:36) drlipodron написал(а):
<form method='post'>
<select
name="clinic"> <!--выпадающий список-->
<option value="Клиника1">Клиника1</option>
<option
value="Клиника2">Клиника2</option>
<option
value="Клиника3">Клиника3</option>
</select>
<input
name="Submit" type='submit' value='Отправить'>
</form>

<?php

if (!empty($_POST['clinic'])) { echo $_POST['clinic']; };
if(!($node = menu_get_object()))
return;
$clinic=$_POST['clinic'];
$count_per_page = 10;
$sql = "SELECT Столбец1, Столбец2, Столбец3 FROM Таблица WHERE Столбец5='%s' and WHERE Столбец2='$clinic' ORDER BY Столбец2";
$sql_count = "SELECT COUNT(*) FROM Таблица WHERE Столбец5='%s' and WHERE Столбец2='$clinic'";
$result = pager_query($sql,$count_per_page, 0, $sql_count, $node->title);

$rows = array();
while($row = db_fetch_object($result)){
$header = array('Медицинская&nbspуслуга' , 'Мед.&nbspкомпания' , 'Цена&nbspуслуги');
$rows[] = array($row->Столбец1, $row->Столбец2, $row->Столбец3);
}
$output = theme('table', $header, $rows, array());
$output .= theme('pager', NULL, $count_per_page, 0);
print $output;
?>


Такой вот кодик...

Спустя 4 часа, 29 минут, 21 секунда (4.06.2010 - 10:05) SlavaFr написал(а):
не хочу вдаватся в пхп-код, но я такой БД не знаю где бы это работало

....WHERE Столбец5='%s' and WHERE Столбец2='$clinic' .....


тоесть
Цитата (drlipodron)
я умею, конечно, where указать, ...

не совсем соответствует действительности.

Спустя 6 часов, 13 минут, 20 секунд (4.06.2010 - 16:18) drlipodron написал(а):
почему нет? в таблице есть значение, равное параметру clinic (создан список); заполнитель '%s' прекрасно отрабатывается, если нет второго "where".
а вот второе "where" без заполнителя s не отрабатывается - запрос тоже "не проходит" - отображается только мой выпадающий список...

на грамотное составление запроса (самостоятельное) я, конечно, не претендую - есть достаточно много статей, взглянув на которые запрос можно написать (т.е. видоизменить запрос "под себя");

а вот что быть с передачей параметра в запрос? он-то не передается! а почему? что не правильно? БД можно и не знать, но факт: запрос
<?php
print $body;
if(!($node = menu_get_object()))
return;

$count_per_page = 10;
$sql = "SELECT Название, Фирма, Цена FROM Таблица WHERE Имя='%s' ORDER BY Фирма";
$sql_count = "SELECT COUNT(*) FROM Таблица WHERE Имя='%s'";
$result = pager_query($sql,$count_per_page, 0, $sql_count, $node->title);

$rows = array();
while($row = db_fetch_object($result)){
$header = array('Название по прайсу', 'Мед. компания', 'Цена услуги');
$rows[] = array($row->Название, $row->Фирма, $row->Цена);
}

$output = theme('table', $header, $rows, array());
$output .= theme('pager', NULL, $count_per_page, 0);
print $output;
?>


отрабатывается прекрасно. как еще, кроме передачи параметра clinic, можно решить задачу - фильтрация???
если это поможет, то cms drupal.

P.S. да, насчет второго слова "where",вроде, лишнее. убрал. но результат тот же...

Спустя 2 часа, 31 минута, 56 секунд (4.06.2010 - 18:50) Gabriel написал(а):
также при отправке пост запроса можно попробовать вывести содержание самого запроса и посмотреть чего там в нем.
попробовать провести его в БД через консоль/какй-то интерфейс и сравнить результаты.
ЗЫ можно попробовать добавит в форму action="" хоть и пустой.

Спустя 3 часа, 19 минут, 33 секунды (4.06.2010 - 22:10) drlipodron написал(а):
Gabriel, т.е., по сути, Вы считаете, что код правилен?
Я-то связываю его нерабочесть с наличием какой-то ошибки. Но я - не спец; это лишь мое предположение.

Если правилен, то м.б. логика запроса нарушена (?):
грузится страница, на которой есть форма. по умолчанию на ней уже выбран какой-то элемент, напимер "Клиника1". Я так понимаю, до нажатия кнопки, он в запрос отправлен не будет - в запросе будет "ноль". М.б. это и есть камень преткновения?
Но далее я ведь делаю попытку фильтрации: нажимаю кнопку - и ничего не меняется. М.б. в связи с тем, что отбиралось "из ничего", т.к. на первом этапе уже "ноль" был?
Если все связано с "нулем", когда страница загружена первый раз, то как обработать в запросе отсутствие параметра? т.е. сделать так, что если он выбран - запрос шел одним путем, т.е. с параметром clinic; а если нет - то без него.

Спустя 48 минут, 7 секунд (4.06.2010 - 22:58) Igrok написал(а):
Может быть попробовать так:

<form method='post'>
<
select name="clinic"> <!--выпадающий список-->
<
option value="Клиника1">Клиника2</option>
<
option value="Клиника2">Клиника2</option>
<
option value="Клиника3">Клиника3</option>
</
select>
<
input name="Submit" type='submit' value='Отправить'>
</
form>

<?php
$and = '';
if (!empty($_POST['clinic']))
{
echo $_POST['clinic'];
$and = " AND Фирма='$clinic' ";
};
if(!($node = menu_get_object()))
return;

$count_per_page = 10;
/* $sql = "SELECT Название, Фирма, Цена FROM Таблица WHERE Имя='%s' and WHERE Фирма='$clinic' ORDER BY Фирма"; */
$sql = "SELECT Название, Фирма, Цена FROM Таблица WHERE Имя='%s'".$and." ORDER BY Фирма";
/* $sql_count = "SELECT COUNT(*) FROM Таблица WHERE Имя='%s' and WHERE Фирма='$clinic'"; */
$sql_count = "SELECT COUNT(*) FROM Таблица WHERE Имя='%s'".$and;

$result = pager_query($sql,$count_per_page, 0, $sql_count, $node->title);

$rows = array();
while($row = db_fetch_object($result)){
$header = array('Название по прайсу', 'Мед. компания', 'Цена услуги');
$rows[] = array($row->Название, $row->Фирма, $row->Цена);
}

$output = theme('table', $header, $rows, array());
$output .= theme('pager', NULL, $count_per_page, 0);
print $output;
?>

Спустя 54 минуты, 21 секунда (4.06.2010 - 23:52) drlipodron написал(а):
При пустом параметре clinic - обычный вывод таблицы. А как только отправляю "post - только форма выбора остается.

Спустя 1 час, 28 минут, 38 секунд (5.06.2010 - 01:21) twin написал(а):
Вооот. К вопросу о пользе всякой ереси. которую так принято восхвалять. А именно про фреймворки, друпалы, дле, и прочее г дерьмо. Вместе с ООП подходом и PDO принципами.
Не вникал сильно - ибо кака. Но как то так наверняка.
  $sql_count = "SELECT COUNT(*) FROM Таблица WHERE Столбец5='%s' AND  Столбец2='%s'";
$result = pager_query($sql,$count_per_page, 0, $sql_count, $node->title, $clinic);
или что то рядом.

Спустя 6 часов, 45 минут, 20 секунд (5.06.2010 - 08:06) Игорь_Vasinsky написал(а):
ну что ты мучаешься... говорят же - организуй поиск с запросами ко всем возможным столбцам - если в какой либо запрос пустой - игнорируй его.. чем больше юзер задаст данных - тем точнее результат он получить.. хочет - пускай ищет сразу и по названию и по адресу и по цене.. - он же сам формирует запрос..кого винить то..

т.е. как те и описали выше делай запрос с условием and (мож и or - для вывода схожих результатов)

where name = "$name" and where citi = "$citi" and where price = "$price"

Спустя 1 час, 37 минут, 3 секунды (5.06.2010 - 09:43) drlipodron написал(а):
да я поиск и хочу организовать. но вот что-то не получается. при передаче параметра из списка (то же, наверняка и из строки, набранной пользователем было бы) выдается сам список+то, что набрал/выбрал пользователь, под списком; без таблицы. если уж по одному столбцу не ищется, то по нескльким что будет...

перепробовал все варианты. итог один...
на всякий случай, напишу последний. м.б. где-то не то сделал, а сам не вижу...
сама "тестовая страница" находится по адр. medoginfo<dot>ru/node/1666

<form method='post'>
<
select name="clinic">
<
option value="Клиника1">Клиника1</option>
<
option value="Клиника2">Клиника2</option>
<
option value="Клиника3">Клиника3</option>
</
select>
<
input name="Submit" type='submit' value='Отправить'>
</
form>

<?php
$and = '';
if (!empty($_POST['clinic']))
{
echo $_POST['clinic'];
$and = " AND Фирма='$clinic' ";
};
if(!($node = menu_get_object()))
return;

$count_per_page = 10;
$sql = "SELECT Название, Фирма, Цена FROM Таблица WHERE Имя='%s'".$and." ORDER BY Фирма";
$sql_count = "SELECT COUNT(*) FROM Таблица WHERE Имя='%s' AND Фирма='%s'";
$result = pager_query($sql,$count_per_page, 0, $sql_count, $node->title, $clinic);

$rows = array();
while($row = db_fetch_object($result)){
$header = array('Название по прайсу', 'Мед. компания', 'Цена услуги');
$rows[] = array($row->Название, $row->Фирма, $row->Цена);
}

$output = theme('table', $header, $rows, array());
$output .= theme('pager', NULL, $count_per_page, 0);
print $output;
?>

Спустя 12 часов, 10 минут, 38 секунд (5.06.2010 - 21:54) Igrok написал(а):
drlipodron
А точно $clinic соответствует Фирма в таблице результата запроса?
Может быть идет какое-то переопределение, например, в функции pager_query.

Можно попробовать выполнить код с учетом проверки соответствия $clinic и Фирма:

<form method='post'>
<
select name="clinic"> <!--выпадающий список-->
<
option value="Клиника1">Клиника2</option>
<
option value="Клиника2">Клиника2</option>
<
option value="Клиника3">Клиника3</option>
</
select>
<
input name="Submit" type='submit' value='Отправить'>
</
form>

<?php
$and = '';
if (!empty($_POST['clinic']))
{
echo $_POST['clinic'];
$and = " AND Фирма='$clinic' ";
$clinic=$_POST['clinic'];
}
if(!($node = menu_get_object()))
return;

/* Проверка на соответствие префикс CH */
$CHdb = mysql_connect("имя_сервера", "логин", "пароль") or die("MySQL Error: ".mysql_error()); // Соединнение с базой.
mysql_select_db("имя базы данных",$CHdb)or die("ERROR: Не удалось выбрать базу даных!!!"); // Выбор базы данных
$CHcheck = mysql_query("SELECT DISTINCT Фирма FROM Таблица WHERE Имя='%s'",$CHdb); // Запрос

$CHfirms = mysql_fetch_assoc($CHcheck);

if(in_array($clinic, $CHfirms))
echo "Найдено соответствие";
else
echo "Не найдено соответствие";
///////////////////////////////////


$count_per_page = 10;
/* $sql = "SELECT Название, Фирма, Цена FROM Таблица WHERE Имя='%s' and WHERE Фирма='$clinic' ORDER BY Фирма"; */
$sql = "SELECT Название, Фирма, Цена FROM Таблица WHERE Имя='%s'".$and." ORDER BY Фирма";
/* $sql_count = "SELECT COUNT(*) FROM Таблица WHERE Имя='%s' and WHERE Фирма='$clinic'"; */
$sql_count = "SELECT COUNT(*) FROM Таблица WHERE Имя='%s'".$and;

$result = pager_query($sql,$count_per_page, 0, $sql_count, $node->title);



$rows = array();
while($row = db_fetch_object($result)){
$header = array('Название по прайсу', 'Мед. компания', 'Цена услуги');
$rows[] = array($row->Название, $row->Фирма, $row->Цена);
}

$output = theme('table', $header, $rows, array());
$output .= theme('pager', NULL, $count_per_page, 0);
print $output;
?>


Если выйдет "Найдено соответствие", то скорее всего где-то идет переопределение. Возможно имеет смысл проанализировать функцию pager_query. А если "Не найдено соответствие", то $clinic не соответстует Фирма в Таблица.

Спустя 13 минут, 1 секунда (5.06.2010 - 22:07) drlipodron написал(а):
Спасибо за анализ!
"Не найдено соответствие"...
Странно. Названия клиник точь-в-точь скопированы с таблицы.
Параметр clinic, ведь берется из списка, да? И устанавливается равным значению "Фирма" из таблицы. Как может не быть соответствия?..
Может, это соответствие должно как-то в коде определяться иначе?
думал, кодировка м.б. подводит. но, вроде, не должна - все в utf-8


Поигрался с одинарными кавычками - если убрать все, то сообщение о соответствии не выводится. Но добиться "найдено соответсвие" пока не смог.

Спустя 34 минуты, 23 секунды (5.06.2010 - 22:41) Igrok написал(а):
Немного не там вставил проверку.
При первом проходе $clinic пуста.
Поэтому может выдать несоответствие.
Правильнее втавить вот так:
<form method='post'>
<
select name="clinic"> <!--выпадающий список-->
<
option value="Клиника1">Клиника2</option>
<
option value="Клиника2">Клиника2</option>
<
option value="Клиника3">Клиника3</option>
</
select>
<
input name="Submit" type='submit' value='Отправить'>
</
form>

<?php
$and = '';
if (!empty($_POST['clinic']))
{
echo $_POST['clinic'];
$and = " AND Фирма='$clinic' ";
$clinic=$_POST['clinic'];

/* Проверка на соответствие префикс CH */
$CHdb = mysql_connect("имя_сервера", "логин", "пароль") or die("MySQL Error: ".mysql_error()); // Соединнение с базой.
mysql_select_db("имя базы данных",$CHdb)or die("ERROR: Не удалось выбрать базу даных!!!"); // Выбор базы данных
$CHcheck = mysql_query("SELECT DISTINCT Фирма FROM Таблица WHERE Имя='%s'",$CHdb); // Запрос

$CHfirms = mysql_fetch_assoc($CHcheck);

if(in_array($clinic, $CHfirms))
echo "Найдено соответствие";
else
echo "Не найдено соответствие";
///////////////////////////////////
}
if(!($node = menu_get_object()))
return;

$count_per_page = 10;
/* $sql = "SELECT Название, Фирма, Цена FROM Таблица WHERE Имя='%s' and WHERE Фирма='$clinic' ORDER BY Фирма"; */
$sql = "SELECT Название, Фирма, Цена FROM Таблица WHERE Имя='%s'".$and." ORDER BY Фирма";
/* $sql_count = "SELECT COUNT(*) FROM Таблица WHERE Имя='%s' and WHERE Фирма='$clinic'"; */
$sql_count = "SELECT COUNT(*) FROM Таблица WHERE Имя='%s'".$and;

$result = pager_query($sql,$count_per_page, 0, $sql_count, $node->title);



$rows = array();
while($row = db_fetch_object($result)){
$header = array('Название по прайсу', 'Мед. компания', 'Цена услуги');
$rows[] = array($row->Название, $row->Фирма, $row->Цена);
}

$output = theme('table', $header, $rows, array());
$output .= theme('pager', NULL, $count_per_page, 0);
print $output;
?>


Если выйдет несоответствие. Не могу точно сказать почему.
Я недавно начал изучать php. Самому еще многое непонятно. Может быть я где-то ошибся в коде.

Спустя 41 минута, 22 секунды (5.06.2010 - 23:23) drlipodron написал(а):
Несоответствие сохраняется. По таблице все верно. "Фирма" точно содержит те названия, которые передаются параметром "clinic".
  $CHdb = mysql_connect("имя_сервера", "логин", "пароль") or die("MySQL Error: ".mysql_error()); // Соединнение с базой.
mysql_select_db("имя базы данных",$CHdb)or die("ERROR: Не удалось выбрать базу даных!!!"); // Выбор базы данных

этот кусок кода я убирал, т.к. без подключенной базы сайт просто не работает; она подключается в настройках. Таблица БД выбирается ниже.

Спустя 10 часов, 10 минут, 57 секунд (6.06.2010 - 09:34) Igrok написал(а):
Цитата
этот кусок кода я убирал, т.к. без подключенной базы сайт просто не работает; она подключается в настройках. Таблица БД выбирается ниже.

Да, все правильно.
Цитата
Параметр clinic, ведь берется из списка, да? И устанавливается равным значению "Фирма" из таблицы. Как может не быть соответствия?..

Посмотрел страницу вашего сайта http://www.medorginfo.ru/clinic/f_ds/exxray

В выводимой таблице в колонке "Мед.компания" (насколько понял это и есть Фирма из таблицы Таблица) встречаются такие названия как:
Городская Покровская больница
Дорожная клиническая больница
СПб ГУЗ Городская Мариинская больница
СПб Медицинская Академия Последипломного Образования
и т.д.

В то время как в списке "Клиники" (насколько понял из него берется параметр $clinic) названия несколько другие:
Гинекология
Дерматология
Хирургия
и т.д.

Если я понял все правильно, то соответствие не наблюдается.

Спустя 2 минуты, 43 секунды (6.06.2010 - 09:36) drlipodron написал(а):
Нет, меню "Клиники" и параметр clinic не связаны между собой никак. Фирма=Мед.компания, это верно. А параметр clinic берется из выпадающего меню, которое видно на др. странице - medoginfo<dot>ru/node/1666 (так, для теста создана).

Просто сам клик на меню "клиники" выводит список клиник.
А там уже - подразделы, на которые разбиты все выполняемые им услуги. Это так, для объяснения логики. В любом случае, пункты меню сайта в создаваемом коде не принимает никакого участия.

Спустя 1 час, 28 минут, 25 секунд (6.06.2010 - 11:05) drlipodron написал(а):
хорошо. пусть с этим не выходит ничего.
а если сделать так:
разместить в блоке список компаний (опять-таки выпадающий может быть, а м.б. и нет - не суть; список-то изначально определн); по клику на одной из них пользователь переходит на ДРУГУЮ страницу, где отображаются записи, относящиеся только к ней.
Т.е. я хочу к уже выполненному запросу добавить "where Фирма='Клиника1'", без всяких параметров (ну, чтоб не было путаницы, на моей тестовой страницы это соответствовало бы, скажем "where Фирма='Городская Покровская больница'".

Не знаю, понятно ли объяснил, что хочу. Пока не знаю как это сделать. Буду "копать", только не знаю "докопаюсь" ли; поэтому заранее прошу помощи. Просто невозможно без этого. Надо.

Спустя 34 минуты, 19 секунд (6.06.2010 - 11:39) Igrok написал(а):
У вас опечатка в ссылке на тестовую страницу medorginfo<dot>ru/node/1666
А если вывести полученный массив фирм, чтобы посмотреть его наполнение:
print_r($CHfirms);

Т.е. получается такой код:
<form method='post'>
<
select name="clinic"> <!--выпадающий список-->
<
option value="Клиника1">Клиника2</option>
<
option value="Клиника2">Клиника2</option>
<
option value="Клиника3">Клиника3</option>
</
select>
<
input name="Submit" type='submit' value='Отправить'>
</
form>

<?php
$and = '';
if (!empty($_POST['clinic']))
{
echo $_POST['clinic'];
$and = " AND Фирма='$clinic' ";
$clinic=$_POST['clinic'];

/* Проверка на соответствие префикс CH */
$CHcheck = mysql_query("SELECT DISTINCT Фирма FROM Таблица WHERE Имя='%s'",$CHdb); // Запрос

$CHfirms = mysql_fetch_assoc($CHcheck);
print_r($CHfirms);

if(in_array($clinic, $CHfirms))
echo "Найдено соответствие";
else
echo "Не найдено соответствие";
///////////////////////////////////
}
if(!($node = menu_get_object()))
return;

$count_per_page = 10;
/* $sql = "SELECT Название, Фирма, Цена FROM Таблица WHERE Имя='%s' and WHERE Фирма='$clinic' ORDER BY Фирма"; */
$sql = "SELECT Название, Фирма, Цена FROM Таблица WHERE Имя='%s'".$and." ORDER BY Фирма";
/* $sql_count = "SELECT COUNT(*) FROM Таблица WHERE Имя='%s' and WHERE Фирма='$clinic'"; */
$sql_count = "SELECT COUNT(*) FROM Таблица WHERE Имя='%s'".$and;

$result = pager_query($sql,$count_per_page, 0, $sql_count, $node->title);



$rows = array();
while($row = db_fetch_object($result)){
$header = array('Название по прайсу', 'Мед. компания', 'Цена услуги');
$rows[] = array($row->Название, $row->Фирма, $row->Цена);
}

$output = theme('table', $header, $rows, array());
$output .= theme('pager', NULL, $count_per_page, 0);
print $output;
?>


И Фирма в таблице Таблица какой имеет тип?

Спустя 10 минут, 18 секунд (6.06.2010 - 11:50) drlipodron написал(а):
да, опечатался....
сейчас проверю.
Фирма: тип = "text"


Опять что-то не то: список (массив фирм) вообще не выводится.

Спустя 1 час, 22 минуты, 34 секунды (6.06.2010 - 13:12) Igrok написал(а):
Можно попробовать вместо print_r($CHfirms);

var_dump($CHfirms);
И если получится: var_dump($CHcheck);

Спустя 1 минута, 48 секунд (6.06.2010 - 13:14) drlipodron написал(а):
ответ на
var_dump($CHfirms);:
bool(false)

а на var_dump($CHcheck); :
resource(94) of type (mysql result)

Спустя 27 минут, 17 секунд (6.06.2010 - 13:41) Igrok написал(а):
Странно, тогда лучше оставить print_r($CHfirms);

А запрос можно переписать с четким условием и посмотреть что будет выведено
$CHcheck = mysql_query("SELECT Фирма FROM Таблица WHERE Фирма ='%Helix, Лабораторная служба Хеликс%'",$CHdb); // Запрос


Может кто-то из форумчан что подскажет?
Понятно, что код написан не совсем хорошо.
Но в чем ошибка? По идее все должно отрабатывать правильно.

Спустя 1 минута, 22 секунды (6.06.2010 - 13:43) drlipodron написал(а):
а, запрос я уже переписывал. правда, на вывод, а не на проверку. вывелось все, что надо.
сейчас посмотрим как с проверкой будет.

Спустя 4 минуты, 28 секунд (6.06.2010 - 13:47) drlipodron написал(а):
вывод тот же:
bool(false)
Не найдено соответствие

а вот без %:
Helix, Лабораторная служба ХеликсArray ( [CompanyName] => Helix, Лабораторная служба Хеликс ) resource(94) of type (mysql result) Найдено соответствие
а, ну, вроде, правильно ведь: % - для оператора Like ведь, а тут "=".
но таблицы нет.
хотя, если в $and подставить название лаборатории, то все выводится правильно.

Спустя 1 час, 10 минут, 37 секунд (6.06.2010 - 14:58) Igrok написал(а):
Да, вместо "=" надо было LIKE написать.
А если выполнить этот код:
<form method='post'>
<
select name="clinic"> <!--выпадающий список-->
<
option value="Клиника1">Клиника2</option>
<
option value="Клиника2">Клиника2</option>
<
option value="Клиника3">Клиника3</option>
</
select>
<
input name="Submit" type='submit' value='Отправить'>
</
form>

<?php
$and = '';
if (!empty($_POST['clinic']))
{
$clinic=trim($_POST['clinic']);
echo $clinic;
$and = " AND Фирма='$clinic' ";

/* Проверка на соответствие префикс CH */
$CHcheck = mysql_query("SELECT DISTINCT Фирма FROM Таблица WHERE Имя='%s'",$CHdb); // Запрос

$CHfirms = mysql_fetch_assoc($CHcheck);
print_r($CHfirms);

if(in_array($clinic, $CHfirms))
echo "Найдено соответствие";
else
echo "Не найдено соответствие";
///////////////////////////////////
}
if(!($node = menu_get_object()))
return;

$count_per_page = 10;
/* $sql = "SELECT Название, Фирма, Цена FROM Таблица WHERE Имя='%s' and WHERE Фирма='$clinic' ORDER BY Фирма"; */
$sql = "SELECT Название, Фирма, Цена FROM Таблица WHERE Имя='%s'".$and." ORDER BY Фирма";
/* $sql_count = "SELECT COUNT(*) FROM Таблица WHERE Имя='%s' and WHERE Фирма='$clinic'"; */
$sql_count = "SELECT COUNT(*) FROM Таблица WHERE Имя='%s'".$and;

$result = pager_query($sql,$count_per_page, 0, $sql_count, $node->title);



$rows = array();
while($row = db_fetch_object($result)){
$header = array('Название по прайсу', 'Мед. компания', 'Цена услуги');
$rows[] = array($row->Название, $row->Фирма, $row->Цена);
}

$output = theme('table', $header, $rows, array());
$output .= theme('pager', NULL, $count_per_page, 0);
print $output;
?>

Спустя 10 минут, 2 секунды (6.06.2010 - 15:08) drlipodron написал(а):
"Не найдено соответствие"...

Спустя 3 минуты, 52 секунды (6.06.2010 - 15:12) drlipodron написал(а):
Проблема, я так понял, в обмене данными между Post и запросом - не отсылается он почему-то туда:
  • пост принимает параметр и выводит данные на экран
  • параметр $and написан верно - прямое указание лаборатории/клиники выводит данные только о ней.
  • если вместо прямого указания поставить то, что содержит post, запрос не выполняется.

Ребята, спасибо, что пытаетесь помочь. Цены Вам нет!

Спустя 3 часа, 56 минут, 9 секунд (6.06.2010 - 19:08) Igrok написал(а):
Почему-то $clinic не соответствует Фирма в Таблица.
Может быть попробовать искать по LIKE
Т.е.
$and = " AND Фирма LIKE '%$clinic%' "; 


Если не получится, то попробовать добавить:
$clinic=trim($_POST['clinic']);
$clinic=substr($clinic,5,5);

Если не получится, то возможно что-то с кодировкой
(может использовать функцию convert_cyr_string)

Спустя 26 минут, 18 секунд (6.06.2010 - 19:34) drlipodron написал(а):
да, я тоже уже подумываю о кодировке. но может ли быть такое, если сайт настроен на выдачу в utf-8, таблица сохранена в utf-8, а php работает в другой кодировке (т.е. в post данные хранятся не в utf-8)? надо посмотреть, возможно, задам вопрос провайдеру - php же его, вроде.

не, я уже взглянул - выдается, что utf-8 и в Local Value, и в Master Value. Единственно, везде (в БД) стоит utf8_unicode_ci, а в php - utf-8

Спустя 3 часа, 12 минут, 8 секунд (6.06.2010 - 22:46) Igrok написал(а):
Может попробовать после соединения с БД
mysql_query("SET NAMES utf8");

Спустя 9 минут, 40 секунд (6.06.2010 - 22:56) drlipodron написал(а):
без динамики... user posted image

Спустя 28 минут, 34 секунды (6.06.2010 - 23:24) Igrok написал(а):
А если написать
CHcheck = mysql_query("SELECT DISTINCT Фирма FROM Таблица",$CHdb); // Запрос
$CHfirms = mysql_fetch_assoc($CHcheck);

Что выводит
print_r($CHfirms);
?

Спустя 8 минут, 51 секунда (6.06.2010 - 23:33) drlipodron написал(а):
Helix, Лабораторная служба ХеликсArray ( [CompanyName] => СПб ГУЗ Городская Мариинская больница ) Не найдено соответствие

Вот это забавно! Как так получается???

Спустя 6 минут, 55 секунд (6.06.2010 - 23:40) Igrok написал(а):
Странно.
А если написать
CHcheck = mysql_query("SELECT * FROM Таблица",$CHdb); // Запрос
$CHfirms = mysql_fetch_assoc($CHcheck);

Что выводит
print_r($CHfirms);

?

Спустя 7 минут, 16 секунд (6.06.2010 - 23:47) drlipodron написал(а):
Выводится 1я строка моей таблицы. И ничего больше. Названия столбцов и значения.

Спустя 11 часов, 56 минут, 2 секунды (7.06.2010 - 11:43) Igrok написал(а):
Ошибся.
mysql_fetch_assoc - обрабатывает ряд результата запроса и возвращает ассоциативный массив.

Т.е. обрабатыавет только один ряд.
А для обхода и отображения всего результата запроса необходимо делать это в цикле:
CHcheck = mysql_query("SELECT DISTINCT Фирма FROM Таблица",$CHdb); // Запрос
while ($CHfirms = mysql_fetch_assoc($CHcheck))
{
print_r($CHfirms);
}

Спустя 1 минута, 37 секунд (7.06.2010 - 11:45) drlipodron написал(а):
а, понял. я как раз начал читать про ассоциативные массивы; но насчет "одного ряда" еще не прочитал.

перечислило все фирмы, но "Не найдено соответствие"

Спустя 1 час, 1 секунда (7.06.2010 - 12:45) drlipodron написал(а):
что-то сообщения лишние не удалить....

Спустя 9 часов, 16 минут, 16 секунд (7.06.2010 - 22:01) Igrok написал(а):
Попробуйте следующее.
Первой строкой написать:
<form action="" method="post">

Переменной $and присвоить:
$and = " AND Фирма LIKE '%$clinic%' "; 

И вывести текст запроса:
$sql = "SELECT Название, Фирма, Цена FROM Таблица WHERE Имя='%s'".$and." ORDER BY Фирма";
echo $sql;

Напишите что будет выведено.

Спустя 26 минут, 40 секунд (7.06.2010 - 22:28) drlipodron написал(а):
Helix, Лабораторная служба ХеликсНе найдено соответствиеSELECT Название, Фирма, Цена FROM Таблица WHERE Имя='%s' AND Фирма LIKE '%%' ORDER BY Фирма

Спустя 12 минут, 37 секунд (7.06.2010 - 22:41) Igrok написал(а):
А если так
$and = " AND Фирма = ".$clinic; 
echo $and;

И вывести текст запроса:
$sql = "SELECT Название, Фирма, Цена FROM Таблица WHERE Имя='%s'".$and." ORDER BY Фирма";
echo $sql;

Спустя 4 минуты, 48 секунд (7.06.2010 - 22:45) drlipodron написал(а):
Helix, Лабораторная служба Хеликс AND Фирма = Не найдено соответствие
SELECT Название, Фирма, Цена FROM Таблица WHERE Имя='%s' AND Фирма = ORDER BY Фирма

Спустя 30 минут, 17 секунд (7.06.2010 - 23:16) drlipodron написал(а):
Все! Класс. Спасибо. ПОлучилось!
Мы переписывали код друг с друга:
if (!empty($_POST['clinic']))
{
echo $_POST['clinic'];
$and = " AND Фирма='$clinic' ";
[
b] $clinic=$_POST['clinic'];[/b]

/* Проверка на соответствие префикс CH */
$CHdb = mysql_connect("имя_сервера", "логин", "пароль") or die("MySQL Error: ".mysql_error()); // Соединнение с базой.
mysql_select_db("имя базы данных",$CHdb)or die("ERROR: Не удалось выбрать базу даных!!!"); // Выбор базы данных
$CHcheck = mysql_query("SELECT DISTINCT Фирма FROM Таблица WHERE Имя='%s'",$CHdb); // Запрос

$CHfirms = mysql_fetch_assoc($CHcheck);

if(in_array($clinic, $CHfirms))
echo "Найдено соответствие";
else
echo "Не найдено соответствие";
///////////////////////////////////
}


А надо сначала переменную объявить, а потом запрос писать)))) Потому и значение clinic пустым оказалось.
if (!empty($_POST['clinic']))
{
echo $_POST['$clinic'];
[
b]$clinic=$_POST['clinic'];[/b]
$and = " AND CompanyName = '$clinic'";
/*echo $and;*/


/* Проверка на соответствие префикс CH */

$CHcheck = mysql_query("SELECT DISTINCT CompanyName FROM TabClinNode"); // Запрос
while ($CHfirms = mysql_fetch_assoc($CHcheck))
{
/* print_r($CHfirms);*/
}
if(in_array($clinic, $CHfirms))
echo "Найдено соответствие";
else
echo "Не найдено соответствие";
///////////////////////////////////
}

На каком-то определенном этапе понял, что рядом "топчемся", но что ТАК...

Спустя 1 минута, 12 секунд (7.06.2010 - 23:17) drlipodron написал(а):
Еще раз спасибо за помощь. Без Вас я бы точно не справился.

Спустя 5 минут, 47 секунд (7.06.2010 - 23:23) Gabriel написал(а):
echo $_POST['$clinic'];
странный кускок какойто smile.gif
 if(in_array($clinic, $CHfirms))    echo "Найдено соответствие";  else    echo "Не найдено соответствие";  ///////////////////////////////////  }

а использовать mysql_num_rows() низя использовать?

Спустя 6 часов, 43 минуты, 34 секунды (8.06.2010 - 06:06) drlipodron написал(а):
Так, по минимуму у меня все готово.
Вот с "динамикой" только не могу никак разобраться.
Выводится array (вместо списка) - и все тут... Помогите, еще раз, пожалуйста.
Страница тестовая та же.
P.S. Post я заменил на Get, т.к. иначе при "листании" страниц фильтр сбивается.
<title>Выбор мед. компании</title>
<
body bgcolor="#ffffff" text="#000000" Iink="#cbda74" vlink="#808040" alink="#808040">
<?
$list = db_query("SELECT Distinct Фирма from Таблица where Имя='%s' ORDER BY Фирма", $node->title);
$firms = array();
while($firm = db_fetch_object($list)){
$firms[] = array($firm->Фирма);
}
print
"<form method='GET'><select name='clinic'><option>Выберите мед. компанию:</option>";

$x = 0;
while ( $x < sizeof ($firms) ) {
print "<option value=";
echo "{$firms[$x]}";
print ">";
echo "{$firms[$x]}";
print "</option>";
$x++;
}
?>
</select>
<
input type="submit" value="Выбрать">
</
form>

Спустя 5 часов, 28 минут, 50 секунд (8.06.2010 - 11:35) SlavaFr написал(а):
<<<Выводится array (вместо списка) - и все тут... Помогите, еще раз, пожалуйста.>>>
ты же сам туда array вводишь
$firms[] = array($firm->Фирма);


а в общем советую в принудительном порядке включить
error_reporting(E_ALL)
и mysql_error() использовать.

http://phpforum.ru/index.php?showtopic=2459

http://de3.php.net/manual/en/function.mysql-error.php
так как это является первой помощю при поиске ошибок.

Спустя 1 час, 33 минуты, 1 секунда (8.06.2010 - 13:08) Gabriel написал(а):
$firms[] = $firm->Фирма;

Спустя 1 час, 29 минут, 56 секунд (8.06.2010 - 14:38) Igrok написал(а):
Понятно.
Пожалуйста smile.gif

Спустя 2 часа, 19 минут, 15 секунд (8.06.2010 - 16:57) drlipodron написал(а):
Цитата (Gabriel @ 8.06.2010 - 10:08)
$firms[] = $firm->Фирма;

Так форма заполняется правильно, но фильтрация не идет - пропадает вся таблица, вместе с формой.

Спустя 6 минут, 50 секунд (8.06.2010 - 17:04) Gabriel написал(а):
Цитата
Так форма заполняется правильно
!==
Цитата
но фильтрация не идет - пропадает вся таблица, вместе с формой

тоесть форма есть но ее кабэ нету?

Спустя 3 часа, 35 минут, 28 секунд (8.06.2010 - 20:40) drlipodron написал(а):
ну да, вроде.
так, как у меня было, можно было через
  $output = theme('table', $header, $firms, array());
print $output;


вывести в таблицу список компаний в таблице.
а так - отсутствие этого списка.

Спустя 2 часа, 35 минут, 6 секунд (8.06.2010 - 23:15) drlipodron написал(а):
готово.
изменил формирование самого списка (списал с какого-то сайта):
   $x = 0;
while
( $x < sizeof ($firms) ) :
print
"<option value='$firms[$x]'>$firms[$x]";
$x++;
endwhile;


Сразу все заработало как надо. Оставил, как и посоветовали (т.к. мой "вариант", если его можно таковым назвать, просто не работает):
$firms[] = $firm->Фирма;


Спасибо всем еще раз.
user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.