[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вывод из БД по сортировке
Andruhaphp
У меня есть на странице выпадающее меню,из него пользователь выбирает страну(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>";

}

}




Спустя 1 минута, 59 секунд (10.02.2011 - 21:34) Invis1ble написал(а):
Andruhaphp
подсвети код тегами

Спустя 3 минуты, 11 секунд (10.02.2011 - 21:37) alex12060 написал(а):
Какая трашная логика, и незащищенность)

Ну да, светани)

php и /php

Спустя 18 минут, 40 секунд (10.02.2011 - 21:56) alex12060 написал(а):
А я пожалуй пока покритекую)

if (isset($_POST['country'])) { $country = $_POST['country'];$result = mysql_query ("SELECT login FROM users WHERE country='$country'",$db); if  ($country == '') { unset ($country);} } 


Интересно, сначала идет условие, если все норма, пишем в переменную, посылаем запрос, ТОЛЬКО ПОСЛЕ ЭТОГО проверяем, пустая ли переменная... Я в шоке...


if (isset($product)){while ($to = mysql_fetch_array($result_3)) {echo $to['login']."</br>"; }}


Как так?! Ты же сначала уже проверил, существует ли у тебя переменная! Но не факт, что у тебя зпрос пройдет, так как проверка на пустоту идет после запроса в БД (Оо)

Вердикт - у тебя сильно нарушена логика, поэтому ниччего не работает. Попробуй переписать код используя мои советы, и, я уверен, у тебя все получится.

З.Ы Обрамляй перед запуском в БД функцией
mysql_real_escape_string()

Спустя 2 дня, 20 часов, 19 минут, 14 секунд (13.02.2011 - 18:15) Andruhaphp написал(а):
alex12060-не помогли твои советы,нифига че-то у меня не получаеться.Может,кто с логикой в данном вопросе поможет,код то написать не проблема,ну вот логику дофига уже чего перепробывал ну не могу придать как сделать эхххх

Спустя 47 минут, 34 секунды (13.02.2011 - 19:02) Invis1ble написал(а):
1. У тебя поплыли все отступы в коде. Пользуйся пробелами, а не табуляцией.
2. mysql_fetch_array() замени на mysql_fetch_assoc()
3. </br> - это что за тег такой?
4. экстрасенсов тут нет, и какая структура БД у тебя - непонятно

Спустя 10 минут, 11 секунд (13.02.2011 - 19:13) Andruhaphp написал(а):
</br>-перевод на след. строку
структура такова есть таблица users(пользователи),в ней есть поля страна(country),город(city),и категория(product),у меня выбираються пользователи из базы по соответсвтию этим полям.Если пользователь соответсвует заданому городу или стране,или и том и тому,или городу и категории,то выводиться его имя(login)

Спустя 19 минут, 36 секунд (13.02.2011 - 19:32) Invis1ble написал(а):
Цитата
</br>-перевод на след. строку

этот тег правильно пишется <br />
Цитата
структура такова есть таблица users(пользователи),в ней есть поля страна(country),город(city),и категория(product),у меня выбираються пользователи из базы по соответсвтию этим полям.Если пользователь соответсвует заданому городу или стране,или и том и тому,или городу и категории,то выводиться его имя(login)

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 />';
}

как-то так :)

Спустя 23 часа, 34 минуты, 51 секунда (14.02.2011 - 19:07) Andruhaphp написал(а):
WHERE 1-а что это такое не совсем понял

Спустя 20 минут, 22 секунды (14.02.2011 - 19:27) inpost написал(а):
Invis1ble
$wheres = array();
$wheres[] = "`city`='" . mysql_real_escape_string($_POST['city']) . "'";
if(count($wheres))
$query = "SELECT `login` FROM `users` WHERE " . explode(' AND ',$wheres);
else
$query = "SELECT `login` FROM `users`";

Спустя 3 минуты, 7 секунд (14.02.2011 - 19:31) Andruhaphp написал(а):
Invis1ble - не работает твой вариант вообще ничего не выдает

Спустя 7 минут, 36 секунд (14.02.2011 - 19:38) Andruhaphp написал(а):
inpost,а эт куда прости?

Спустя 3 минуты, 43 секунды (14.02.2011 - 19:42) inpost написал(а):
Andruhaphp
Ты хоть скажи, что именно ты хочешь добиться, ато рассказал как выводит, я посмотрел скрипт - правда, так выводит, а как хочешь ты - не знаю!
А то лишь совет Инвизу, чтобы лишнее "WHERE 1" не писать.

Спустя 18 секунд (14.02.2011 - 19:42) Invis1ble написал(а):
inpost
может implode() ? Тогда да, но все равно еще проверки на пустоту делать нужно, поэтому код практически такой же получится, разве что where 1 можно избежать

Спустя 4 минуты, 36 секунд (14.02.2011 - 19:47) Invis1ble написал(а):
Andruhaphp
Цитата
не работает твой вариант вообще ничего не выдает

и ошибок никаких нет?

Спустя 2 минуты, 57 секунд (14.02.2011 - 19:50) Invis1ble написал(а):
inpost
и кстати, если ни одно условие не выполнится, то запрос получится ошибочным
select `login` from `users` where

Спустя 1 минута, 11 секунд (14.02.2011 - 19:51) Andruhaphp написал(а):
странно и почему у меня вообще ничего не выводит

Спустя 2 минуты, 13 секунд (14.02.2011 - 19:53) Invis1ble написал(а):
Andruhaphp
в коде, который я показал вставь между этими строчками
Цитата
  $query = 'SELECT `login` FROM `users`' . $where;

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

echo $query;

и покажи, что выдало

Спустя 4 минуты, 37 секунд (14.02.2011 - 19:58) Andruhaphp написал(а):
вообще ничего,пусто

Спустя 1 минута, 11 секунд (14.02.2011 - 19:59) Andruhaphp написал(а):
вот полный код,вместе с выпадающим меню:
echo "<div align='center'>";
echo "<form name=my_form method='post' action='all_users.php'>";
echo "<select class='input' type=text name=country>";
$res = mysql_query("SELECT DISTINCT name, id FROM `country` ");
echo "<option value='' disabled selected='selected'>Выберите страну</option>";
while($row = mysql_fetch_assoc($res))
{
echo '<option value="'. $row['id'] .'">'. $row['name'] .'</option>';
}

echo "</select>";
echo "<select class='input' type=text name=city>";
$res_1 = mysql_query("SELECT DISTINCT name, id FROM `city` ORDER BY `id` ");
echo "<option value='' disabled selected='selected'>Выберите город</option>";
while($row_1 = mysql_fetch_assoc($res_1))
{
echo '<option value="'. $row_1['id'] .'">'. $row_1['name'] .'</option>';
}
echo "</select>";

echo "<select class='input' type=text name=tovar>";
$res_2 = mysql_query("SELECT DISTINCT name, id FROM `product` ORDER BY `id` ");
echo "<option value='' disabled selected='selected'>Выберите категорию</option>";
while($row_2 = mysql_fetch_assoc($res_2))
{
echo '<option value="'. $row_2['id'] .'">'. $row_2['name'] .'</option>';
}
echo "</select><input type='submit' name='usershow' value='показать'></form></div>";

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;
echo $query;
$res = mysql_query($query, $db) or die(mysql_error());

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

Спустя 5 минут, 1 секунда (14.02.2011 - 20:04) Invis1ble написал(а):
и где у тебя тут значение product передается? и что это
Цитата
<select class='input' type=text

за бред?

Спустя 3 минуты, 39 секунд (14.02.2011 - 20:08) inpost написал(а):
Invis1ble
у меня count стоял, если 0, то запрос будет вообще без WHERE =) Ты не внимательно смотрел просто, и да, там implode вместо explode =)

Спустя 4 минуты, 30 секунд (14.02.2011 - 20:12) Andruhaphp написал(а):
поменял tovar на product и все норм-работает.
А можешь мне объяснить что означает Where 1,ато я гуглил так и не нашел

Спустя 8 минут (14.02.2011 - 20:20) Invis1ble написал(а):
inpost
Цитата
у меня count стоял, если 0, то запрос будет вообще без WHERE

да, провтыкал )

Andruhaphp
Цитата
А можешь мне объяснить что означает Where 1, ато я гуглил так и не нашел

в общем-то ничего (условие всегда будет выдавать true), это просто чтоб ошибки в синтаксисе не было в случае если ни одно условие на непустоту не выполнится. Можно сделать как inpost показал, тогда where 1 можно избежать

Спустя 4 минуты, 35 секунд (14.02.2011 - 20:25) Andruhaphp написал(а):
where 1,получаеться что where 1 плохой стиль в программировании?
if (isset($_POST['country'], $_POST['city'], $_POST['product']))
а сдесь не можно применить вместо isset, -empty
Например, если $_POST['country'] = 0; - то isset() её всё равно пропустит, но empty() не сработает - значит критерия поиска по стране у меня не будет - а запрос всё равно выполнится,и вернёт необъективный результат(без учёта страны).

Спустя 4 минуты, 27 секунд (14.02.2011 - 20:29) Invis1ble написал(а):
Andruhaphp
Цитата
where 1,получаеться что where 1 плохой стиль в программировании?

интересный вопрос, думаю он может привести к холивару ) имхо, да, плохой

Спустя 14 секунд (14.02.2011 - 20:29) inpost написал(а):
используй empty, если видишь в данном случае его необходимость =)
А WHERE 1 - он пустой, ненужный вообще.

Спустя 2 минуты, 6 секунд (14.02.2011 - 20:31) Andruhaphp написал(а):
а можно ещё вопрос не по теме,а вот у меня постоянно прибаляет id,набежало там уже пока я тестил за 100,а как обнулить id что бы снова считало сначала???

Спустя 1 минута, 45 секунд (14.02.2011 - 20:33) inpost написал(а):
то есть стереть все данные и начать заново? Только зачем? У меня по сайту знакомств конкретное условие было, чтобы ID начинались с 10 000.

Спустя 4 минуты, 7 секунд (14.02.2011 - 20:37) Andruhaphp написал(а):
так я даже когда удаляю все данные из таблицы,все равно потом начинаеться не сначала,когда вбиваю новые

Спустя 2 минуты, 43 секунды (14.02.2011 - 20:40) Invis1ble написал(а):
Andruhaphp
truncate table `table`

Спустя 9 минут, 25 секунд (14.02.2011 - 20:49) Andruhaphp написал(а):
Invis1ble ,огромное спасибо!

Спустя 13 минут, 13 секунд (14.02.2011 - 21:03) inpost написал(а):
Andruhaphp
Так и должно быть, дальше-дальше-дальше, старые не будут заменять новыми, а лишь записываться с новым идентификатором.

Спустя 5 минут, 43 секунды (14.02.2011 - 21:08) Andruhaphp написал(а):
то есть не получиться сделать что бы каждый день обнулялось id

Спустя 4 минуты, 38 секунд (14.02.2011 - 21:13) Invis1ble написал(а):
Andruhaphp
в подавляющем большистве случаев это попросту не нужно. Но если есть необходимость - юзай запрос, что я показал

Спустя 1 минута, 31 секунда (14.02.2011 - 21:15) inpost написал(а):
Andruhaphp
Ты можешь объяснить, зачем тебе это? Возможно ты просто неправильно кое-что понимаешь, поэтому у тебя и появилось желание обнулять!

Спустя 33 минуты, 43 секунды (14.02.2011 - 21:48) Andruhaphp написал(а):
ну смотри, на главной выводяться последние 5 запросов(сообщения),и выводяться они по полной,и вместе с id,ну и надо так что бы каждый день запросы,начинались с 1 id,что бы к концу дня по id последнего запроса,можно было увидеть сколько было сделано запросов,сегодня

Спустя 37 минут, 32 секунды (14.02.2011 - 22:26) Invis1ble написал(а):
Andruhaphp
такой подход в корне неверен. Добавляй в таблицу поле `posted_at`, а потом запросом
select count(*) from `table` where `posted_at`='сегодняшняя_дата'

получай кол-во постов за сегодняшний день

Спустя 33 минуты, 41 секунда (14.02.2011 - 22:59) Andruhaphp написал(а):
ясненько.
А что бы их ещё и по алфавиту пользователей из базы вывести.тут DESC и ASC не помогут
может есть какие идеи???

Спустя 14 минут, 15 секунд (14.02.2011 - 23:14) Invis1ble написал(а):
... order by `login` desc
Быстрый ответ:

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