按价格顺序对数据库进行排序的单选按钮突然停止工作

时间:2011-12-06 22:54:02

标签: php html forms radio-button

我有一个网站,显示来自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 个答案:

答案 0 :(得分:2)

这确实是一个简单的错误。

显然,在更改元素名称之前,它们的名称为priceorderascpriceorderdesc。现在您将该名称更改为priceorder,但不是PHP在构建查询时检查的变量。你需要改变的是:

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

这样PHP就会检查新元素名称的值。

答案 1 :(得分:1)

获取名称为$_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";
}

无需检查是否设置了两次,空检查只是备份和可选。