Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2011, 20:33   #1
Andruhin
Пользователь
 
Регистрация: 16.10.2010
Сообщений: 48
По умолчанию Вывод из БД по сортировке

У меня есть на странице выпадающее меню,из него пользователь выбирает страну(country),город(city),и компанию(product) и ему в зависимости от выбранного выдаеться из базы список компаний,удолетворяющих данный запрос,но проблема в том,что у меня где-то в коде ошибка,у меня выводит,например если город и страна выбраны правильно а категория не правильно,то выводит всех кто соответсвтует городу и стране,категорию не учитывает,или если город из другой страны все правно правильно выводит, вот мой код:
Код:
if (isset($_POST['country'])) { $country = $_POST['country'];$result = mysql_query ("SELECT login FROM users WHERE country='$country'",$db);
 if ($country == '') { unset($country);} } 
if (isset($_POST['city'])) { $city = $_POST['city'];$result_2 = mysql_query ("SELECT login FROM `users` WHERE city='$city' ",$db); 
 if ($city == '') { unset($city);} } 
if (isset($_POST['product'])) { $product = $_POST['product']; $result_3 = mysql_query ("SELECT login FROM `users` WHERE product='$product' ",$db);
 if ($product == '') { unset($product);} }
echo "Компании удолетворяющие ваш запрос:</br>";
if (isset($product))
{
while ($to = mysql_fetch_array($result_3))
 {
echo $to['login']."</br>";
 }
}

elseif (isset($city))
{
while ($to = mysql_fetch_array($result_2))
 {
echo $to['login']."</br>";
 }
}

elseif (isset($country))
{
while ($to = mysql_fetch_array($result))
 {
echo $to['login']."</br>";
 }
}
Andruhin вне форума Ответить с цитированием
Старый 09.02.2011, 21:27   #2
KREGI
Форумчанин
 
Аватар для KREGI
 
Регистрация: 29.11.2008
Сообщений: 333
По умолчанию

имхо разумнее написать функцию, или уже избавиться от if c помощью case.
p.s. это не большое отступление
Если помог - Весы слева
KREGI вне форума Ответить с цитированием
Старый 09.02.2011, 22:07   #3
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

ну во первых с кодом действительно надо что-то делать, ибо это действительно нечто)))))
а если по сути, то выражение isset($_POST['product']) - скорее всего в любом случае чего-то возвращает если находится в одной форме с предыдущими полями, например пустую строку, и перекрывает вам предыдущие запросы.
P.S. перепишите все-таки свой код))) именно из-за того что в коде нету четкой и однозначной логики происходит большинство ошиок
Cronos20 вне форума Ответить с цитированием
Старый 13.02.2011, 18:20   #4
Andruhin
Пользователь
 
Регистрация: 16.10.2010
Сообщений: 48
По умолчанию

не получаеться переписать,не могу логику придумать,может кто с логикой поможет,а код я уже сам напишу,ну или подтолкните
Andruhin вне форума Ответить с цитированием
Старый 13.02.2011, 19:29   #5
VadikV
Форумчанин
 
Аватар для VadikV
 
Регистрация: 08.01.2011
Сообщений: 226
По умолчанию

Код:
if (!empty($_POST['country'])) 
{ 
	$country = $_POST['country'];
	$result = mysql_query ("SELECT login FROM users WHERE country='$country'",$db);
	if ($country == '') 
	{ 
		unset($country);
	} 
} 

if (!empty($_POST['city'])) 
{ 
	$city = $_POST['city'];
	$result_2 = mysql_query ("SELECT login FROM `users` WHERE city='$city' ",$db); 
	if ($city == '') 
	{ 
		unset($city);
	} 
} 

if (!empty($_POST['product'])) 
{ 
	$product = $_POST['product']; 
	$result_3 = mysql_query ("SELECT login FROM `users` WHERE product='$product' ",$db);
	if ($product == '') 
	{ 
		unset($product);
	} 
}

echo "Компании удолетворяющие ваш запрос:</br>";

if (!empty($product))
{
	while ($to = mysql_fetch_array($result_3))
 	{
		echo $to['login']."</br>";
 	}
}
elseif (!empty($city))
{
	while ($to = mysql_fetch_array($result_2))
 	{
		echo $to['login']."</br>";
 	}
}
elseif (!empty($country))
{
	while ($to = mysql_fetch_array($result))
 	{
		echo $to['login']."</br>";
 	}
}
icq 223-630-454
e-mail vysotskiy@list.ru
сайт http://www.big-library.net/
VadikV вне форума Ответить с цитированием
Старый 13.02.2011, 23:55   #6
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

Мда .... с логикой тут плохо дело
PHP код:
if (!empty($_POST['product'])) 
{
    
$cat "product";
    
$value $_POST['product'];
}
else if (!empty(
$_POST['city'])) 
{
    
$cat "city";
    
$value $_POST['city'];
}
else if (!empty(
$_POST['country'])) 
{
    
$cat "country";
    
$value $_POST['country'];
}

if (
$cat && $value){
    echo 
"Компании удолетворяющие ваш запрос:</br>";
    
$query mysql_query ("SELECT login FROM users WHERE ".$cat."='".mysql_real_escape_string($value)."'",$db);
    
    while (
$to mysql_fetch_array($query))
    {
        echo 
$to['login']."</br>";
    }

else {
    echo 
"Ошибка";

Cronos20 вне форума Ответить с цитированием
Старый 14.02.2011, 17:25   #7
Andruhin
Пользователь
 
Регистрация: 16.10.2010
Сообщений: 48
По умолчанию

Cronos20,без обид но ты только то и деалешь что критикуешь,и ничего по сути
Andruhin вне форума Ответить с цитированием
Старый 14.02.2011, 17:37   #8
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

А чего у меня в посте не суть изложена?
Тогда давайте свое видение сути.
Cronos20 вне форума Ответить с цитированием
Старый 14.02.2011, 18:52   #9
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Cronos20 Посмотреть сообщение
А чего у меня в посте не суть изложена?
Тогда давайте свое видение сути.
Вероятно ТС пытается нам сообщить,что ему нужен поиск по 3-м критериям одновременно:
$country - страна
$city - город
$product - ...чтобы это ни значило
Цитата:
У меня есть на странице выпадающее меню,из него пользователь выбирает страну(country),город(city),и компанию(product) и ему в зависимости от выбранного выдаеться из базы список компаний,удолетворяющих данный запрос
Т.е. выводиться должны компании,соответствующие всем 3-м параметрам.

В варианте Cronos20 поиск ведётся только по одному из параметров:
Цитата:
if (!empty($_POST['product']))
{
$cat = "product";
$value = $_POST['product'];
}
else if (!empty($_POST['city']))
{
$cat = "city";
$value = $_POST['city'];
}
else if (!empty($_POST['country']))
{
$cat = "country";
$value = $_POST['country'];
}
По сабжу - нужно объединить все три критерия - и добавить их в условие WHERE , примерно так:
PHP код:
if(!empty($country) && !empty($city) && !empty($product)){
    
$query "SELECT * FROM `table` 
                       WHERE `country` = '" 
mysql_real_escape_string($country) . "' 
                       AND `city` = '" 
mysql_real_escape_string($city) . "' 
                       AND `product` = '" 
mysql_real_escape_string($product) . "' ";
    
$result mysql_query($query);
    
// ....code....

PS: ну это в том случае,если я правильно понял невнятное описание задачи ТС...
Andkorol вне форума Ответить с цитированием
Старый 14.02.2011, 19:05   #10
Andruhin
Пользователь
 
Регистрация: 16.10.2010
Сообщений: 48
По умолчанию

Andkorol,ответ профессионала.
Я попробывал вот так вот переписать,оцените,может ошибаюсь:
Код:
if (isset($_POST['country'], $_POST['city'], $_POST['product']))
{
  $where = ' WHERE 1';

  if (!empty($_POST['country']))
    $where .= " AND `country`='" . mysql_real_escape_string($_POST['country']) . "'";

  if (!empty($_POST['city']))
    $where .= " AND `city`='" . mysql_real_escape_string($_POST['city']) . "'";

  if (!empty($_POST['product']))
    $where .= " AND `product`='" . mysql_real_escape_string($_POST['product']) . "'";

  $query = 'SELECT `login` FROM `users`' . $where;

  $res = mysql_query($query, $db) or die(mysql_error());

  while($user = mysql_fetch_assoc($res))
    echo $user['login'] . '<br />';
}

Последний раз редактировалось Andruhin; 14.02.2011 в 19:32.
Andruhin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Где ошибка в сортировке? vaan.sk Общие вопросы C/C++ 1 16.03.2010 23:33
О сортировке массивов в C++ Frame1992 Помощь студентам 6 28.10.2009 16:50
Вопрос по сортировке Ermiss БД в Delphi 5 17.02.2008 17:32
Ошибка в сортировке Veiron Общие вопросы Delphi 14 21.01.2008 21:35