Переключатели, сортирующие базу данных по цене, неожиданно перестали работать - PullRequest
2 голосов
/ 07 декабря 2011

У меня есть сайт, который отображает данные о туристических продуктах из базы данных MySQL.Выше есть переключатели, чтобы пользователь мог выбрать, хотят ли они отображать результаты в порядке возрастания цены или в порядке убывания цены.

Это работало нормально, пока я не попытался сделать его более аккуратным на странице, поместивэто в таблице.Мне также пришлось изменить теги name, чтобы они оба были одинаковыми, чтобы пользователь не мог выбрать как восходящие, так и нисходящие параметры и испортить запрос.Я думаю, что один из них привел к тому, что он все испортил.

Раньше он идеально сортировал товары по цене, когда пользователь нажимал соответствующую радиокнопку и затем кнопку поиска рядом с ней.Но сейчас это ничего не делает.Очень признателен, если кто-то может помочь.Вероятно, простая ошибка.

HTML:

<form action="ayia-napa-holidays.php" method="get">
            <table width="280" height="25" >

                <tr><td width="61"><p>Sort by:</p></td>
                <td width="72" height="24"><p>Lowest price</p></td>
                <td width="28"><input name="priceorder" type="radio" value="priceorderasc" /></td>

                <td width="75" height="24"><p>Highest price</p></td>
                <td width="20"><input name="priceorder" type="radio" value="priceorderdesc" /></td>

            </tr></table>
            <input name="searchform1" type="submit" value="Search" class="moreinfobutton" />
            </form>

PHP:

<?php 

            //connect
                include ("db.connect.php");

                $pages_query = mysql_query("SELECT COUNT('id') FROM `holidaytable` WHERE brandname = 'Cyprus'");
                $count = mysql_result($pages_query, 0);


                echo '<p>There are '.$count.' holidays<hr></p>';                    
                //construct query and insert values

                $sql = "SELECT * FROM holidaytable WHERE brandname = 'Cyprus'";


                if (isset($_GET['priceorderasc'])) $sql .= " ORDER BY buynow ASC";
                if (isset($_GET['priceorderdesc'])) $sql .= " ORDER BY buynow DESC";


                $query = mysql_query($sql) or die(mysql_error());

            include("dbresults.php");

        ?>

Ответы [ 2 ]

2 голосов
/ 07 декабря 2011

Это действительно простая ошибка.

По-видимому, до того, как вы изменили имена элементов, им были присвоены имена priceorderasc и priceorderdesc.Теперь вы изменили это имя на priceorder, но не на переменные, которые проверяет PHP при построении запроса.Вам необходимо изменить:

if ($_GET['priceorder'] == 'priceorderasc') $sql .= " ORDER BY buynow ASC";
if ($_GET['priceorder'] == 'priceorderdesc') $sql .= " ORDER BY buynow DESC";

, чтобы PHP проверял значение имени нового элемента.

1 голос
/ 07 декабря 2011

Получаемое имя $_GET['priceorder'] (то есть вы используете метод GET на <from> для радио. Итак, вам понадобится что-то вроде этого, используя ваш текущий код:

if(isset($_GET['priceorder']) && !empty($_GET['priceorder']))
{
  if ($_GET['priceorder'] == 'priceorderasc') $sql .= " ORDER BY buynow ASC";
  if ($_GET['priceorder'] == 'priceorderdesc') $sql .= " ORDER BY buynow DESC";
}

Нет необходимости проверять, установлен ли он дважды, пустая проверка - это просто резервная копия и необязательна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...