|
|
|
| Добрый вечер.
возникла проблема с выводом даннх из БД.
есть каталог продукции, при выводе всех позиций всё работает нормально.
надо сделать сортировку по двум параметрам, цена и производитель.
сделал простенькую, два выпадающих списка и кнопка сортировать.
но проблема в том, что по цене сортирует отлично, а когда надо сортировать по производителю или ни чего не сортирует или вообще ни чего не выводит.
я так понимаю, что ошибка в запросе, но где не могу найти.
<?php
/* диапазон цен*/
echo "<form >
<select name='price'>";
$arr2 = array("AND `price`<=1000"=>"до 1000",
"AND `price` BETWEEN 1000 AND 5000"=>"от 1000 до 5000",
"AND `price` BETWEEN 5000 AND 10000"=>"от 5000 до 10000",
"AND `price` >10000"=>"от 10000");
echo "<option></option>";
foreach($arr2 as $k=>$v)
echo "<option value='".$k."'>$v</option>";
echo "</select>";
/*список производителей*/
echo "<select name='producer'>";
$query1 = "SELECT DISTINCT `name_wares` FROM `wares`'";
$prod = mysql_query($query1);
if(!$prod) echo "<p class='error'>Ошибка при выводе названий производителя<br>".mysql_error()."</p>";
if(mysql_num_rows($prod) > 0){
echo "<option></option>";
while($producer = mysql_fetch_assoc($prod)){
/*$a = $producer['name_wares'];*/
echo "<option value='AND `name_wares` = ".$producer['name_wares']."'>".$producer['name_wares']."</option>";
}
}
echo "</select>
</form>";
/*данные о цене и производителе заносятся в переменные*/
$price /* цена */
$producer /* производитель*/
/* подставляются в запрос*/
/* переменная $where = "WHERE `id_section` = '$id_section'";*/
$obj = new pager_mysql("*","`wares`","".$where.$price.$producer."","",15,3,"");
?>
|
так вот, если оставить только переменные $where и $price, всё работает нормально, выводятся все позиции, а при выборе цены, выводятся позиции попадающие под заданный диапазо цен.
но как только подставляю $producer всё перестаёт работать, если убираю $price, то позиции товара выводятся, но не сортируются по производителю.
подскажите, пожалуйста, в чём моя ошибка | |
|
|
|
|
|
|
|
для: Slo_Nik
(27.10.2009 в 00:32)
| | какая замечательная иллюстрация к SQL-injection.
Скрипт исполняет инъекции. Прямым эффектом. Ничем другим не занимается.
Послушайте, как можно такое писать?
Ну неужели не сообразить, что если куски SQL-запроса берутся из формы, из запроса браузера, то кто угодно сможет своих собственных запросов понатолкать за милую душу! | |
|
|
|
|
|
|
|
для: Trianon
(27.10.2009 в 01:28)
| | ну сейчас вопрос не в этом, мне хочется знать почему не работает, в чём моя ошибка.
я думаю, что если была обработка данных, то это не заставило бы скрипт работать и сортировать так как мне надо.
тут и так для одного сообщения многовато написано, так зачем писать полностью код со всеми обработками?
я написал только то, что считаю важным. | |
|
|
|
|
|
|
|
для: Slo_Nik
(27.10.2009 в 01:46)
| | полагаю, что ошибка где-то здесь:
/*данные о цене и производителе заносятся в переменные*/
$price /* цена */
$producer /* производитель*/
/* подставляются в запрос*/
/* переменная $where = "WHERE `id_section` = '$id_section'";*/
|
Я не нашел ни одного оператора, который бы чего-то заносил в переменные.
А для того чтобы нащупать её, имеет смысл сборную солянку, перед тем как в функцию передавать, напечатать сперва. | |
|
|
|
|
|
|
|
для: Trianon
(27.10.2009 в 02:23)
| | так как данные передаются методом $_POST я присваивал значение переменным так
<?php
if(isset($_POST['sub'])){
/* цена */
if(!empty($_POST['price'])){
$price = $_POST['price'];
}
else{$price = "";}
/* производитель */
if(!empty($_POST['producer'])){
$producer = $_POST['producer'];
}
else {$producer = "";}
}
?>
/* перед подстановкой в запрос вывожу переменные, что бы видеть что им присвоено */
echo $where."<br>";// вижу WHERE `id_section` = '1'
echo $price."<br>";// вижу AND `price`<=1000
echo $producer; // вижу AND `name_wares` = Sorolamp
/* если переменным $price и $producer ни чего не присвоено, то ни чего не выводится, как и положено.
если выбрана одна из переменных, то выводится её значение, другая переменная пустая.
переменная $where всегда имеет значение. */
|
| |
|
|
|
|
|
|
|
для: Trianon
(27.10.2009 в 02:23)
| | так как данные передаются методом $_POST я присваивал значение переменным так
<?php
if(isset($_POST['sub'])){
/* цена */
if(!empty($_POST['price'])){
$price = $_POST['price'];
}
else{$price = "";}
/* производитель */
if(!empty($_POST['producer'])){
$producer = $_POST['producer'];
}
else {$producer = "";}
}
/* перед подстановкой в запрос вывожу переменные, что бы видеть что им присвоено */
echo $where."<br>";// вижу WHERE `id_section` = '1'
echo $price."<br>";// вижу AND `price`<=1000
echo $producer; // вижу AND `name_wares` = Sorolamp
/* если переменным $price и $producer ни чего не присвоено, то ни чего не выводится, как и положено.
если выбрана одна из переменных, то выводится её значение, другая переменная пустая.
переменная $where всегда имеет значение. */
?>
|
| |
|
|
|
|
|
|
|
для: Slo_Nik
(27.10.2009 в 02:55)
| | Весь запрос надо выводить.
Вот теперь выведите $where.$price.$producer
И увидите
WHERE `id_section` = '1'AND `price`<=1000AND `name_wares` = Sorolamp
|
И по-Вашему это можно выполнить? | |
|
|
|
|
|
|
|
для: Trianon
(27.10.2009 в 03:06)
| | переписал с
<?php
$obj = new pager_mysql("*","`wares`","".$where.$price.$producer."","",15,3,"");
?>
|
на
<?php
$obj = new pager_mysql("*","`wares`","".$where." ".$price." ".$producer."","",15,3,"");
?>
|
ни помогло | |
|
|
|
|
|
|
|
для: Slo_Nik
(27.10.2009 в 03:23)
| | Весь запрос надо выводить! | |
|
|
|
|
|
|
|
для: Slo_Nik
(27.10.2009 в 02:55)
| | >так как данные передаются методом $_POST я присваивал значение переменным так
>$producer = $_POST['producer'];
Где именно Вы их присваивали?
У Вас там переменная $producer применяется всяко не с той целью. И не с тем значением. | |
|
|
|
|
|
|
|
для: Trianon
(27.10.2009 в 03:08)
| | >У Вас там переменная $producer применяется всяко не с той целью. И не с тем значением.
а с какой?
$producer присваивается значение $_POST['producer']
или что то я упустил? | |
|
|
|
|
|
|
|
для: Slo_Nik
(27.10.2009 в 03:26)
| | здесь:
while($producer = mysql_fetch_assoc($prod)){ | |
|
|
|
|
 2.8 Кб |
|
|
для: Trianon
(27.10.2009 в 03:44)
| | поменял имя переменной, просмотрел всё в который раз, но так и не добился результата....
с сортировкой по цене ни каких проблем, а вот с сортировкой по производителю.... ни как не могу заставить работать,а веренее не знаю как.
может опять что то упустил.
прикрепил файл. | |
|
|
|
|
|
|
|
для: Trianon
(27.10.2009 в 03:44)
| | всё, дошло до меня, правда тут возникает вопрос на тему о которой Вы писали выше - безопастность....
заработало после того, как я переписал строку
<?php
// БЫЛО
echo "<option value=' AND `name_wares` = ".$producer['name_wares']." '>".$producer['name_wares']."</option>";
// ПЕРЕПИСАЛ
echo "<option value=' AND `name_wares` = \"".$producer['name_wares']."\" '>".$producer['name_wares']."</option>";
?>
|
когда подставлял в запрос, пришлось применить к переменной $prodr stripslashes() после этого заработало, хотя, как я понимаю это не правильно.
но пока, самое главное, что работает, теперь надо довести всё до ума... | |
|
|
|
|
|
|
|
для: Slo_Nik
(27.10.2009 в 05:40)
| | У Вас тема называется "сортировка" , в чуть ли не каждом сообщении сортировку упоминаете...
Где сортировка-то? | |
|
|
|
|
|
|
|
для: Trianon
(27.10.2009 в 12:42)
| | ну а как бы Вы назвали то, что мне нужно? | |
|
|
|