2012-10-23 43 views
1

我试图按价格对PHP生成的表单进行排序。我收到一条错误消息'Notice:Undefined index:PriceDesc/Asc'。我了解错误信息,但无法通过搜索找到任何相关信息,所以我想问问。我是新来的PHP,到目前为止,这是我的代码有:按价格对PHP生成的表单进行排序

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <!--[if IE]> 
    <link href="blueprint/ie.css" type="text/css" rel="stylesheet"> 
    <![endif]--> 
    <link href="blueprint/screen.css" type="text/css" rel="stylesheet"> 
    <link href="style.css" type="text/css" rel="stylesheet"> 

    <title>Enygma Peripherals</title> 
</head> 

<body> 
<div id="wrapper" class="container"> 
    <div id="top" class="span-24"> 
     <div id="logo" class="span-5"> 
      <a href="index.php"><img src="images/logo.png" alt="Enygma"></a> 
     </div> 
     <div id="nav" class="span-11 last"> 
      <ul> 
       <li><a href="index.php">HOME</a></li> 
       <li><a href="products.php">PRODUCTS</a></li> 
       <li><a href="about.php">ABOUT</a></li> 
       <li><a href="contact.php">CONTACT</a></li> 
      </ul> 
     </div> 

    </div> 
    <div id="mainContent" class="span-24"> 
     <h2>Products</h2> 
     <div id="left" class="span-8"> 
     </div> 
     <div id="right" class="span-15 last"> 
      <form method="get" name="sort"> 
       <select name="sort" id="sort"> 
        <option value="">--Select--</option> 
        <option value='PriceAsc'>Price: Highest First</option> 
        <option value='PriceDesc'>Price: Lowest First</option> 
       </select> 
       <input type="submit" value="Sort"/> 
      </form> 
      <?php 
       include("connection.php"); 

       $data = mysql_query("SELECT * FROM products"); 
       IF ($_GET['PriceAsc']){ 
        $orderby=" ORDER BY price ASC"; 
       } 
       IF ($_GET['PriceDesc']){ 
        $orderby=" ORDER BY price DESC"; 
       } 
       Print "<table border cellpadding=10>"; 
       while($info = mysql_fetch_array($data)) 
       { 
       Print "<tr>"; 
       Print "<th>Product Number:</th> <td>".$info['product_no'] . "</td> "; 
       Print "<th>Product:</th> <td>".$info['product_name'] . "</td> "; 
       Print "<th>Type:</th> <td>".$info['type'] . "</td> "; 
       Print "<th>Price:</th> <td>".$info['price'] . "</td> "; 
       Print "<th>Availability:</th> <td>".$info['availability'] . " </td></tr>"; 
       } 
       Print "</table>"; 
       ?> 
     </div>  
    </div> 
    <div id="footer" class="span-24"> 
     <a href="acknowledgements.html">Acknowledgments</a> 
    </div> 
</div> 

为了记录在案,我使用phpMyAdmin对我的后端d/b与最初提交的数据工作正常。

回答

0

更换

$data = mysql_query("SELECT * FROM products"); 
      IF ($_GET['PriceAsc']){ 
       $orderby =" ORDER BY price ASC"; 
      } 
      IF ($_GET['PriceDesc']){ 
       $orderby =" ORDER BY price DESC"; 
      } 

if (!empty($_GET['sort']) && $_GET['sort'] == 'PriceAsc') { 
    $orderby=" ORDER BY price ASC"; 
} 
if (!empty($_GET['sort']) && $_GET['sort'] == 'PriceDesc') { 
    $orderby=" ORDER BY price DESC"; 
} 

$data = mysql_query("SELECT * FROM products".$orderby); 

注意的变化,你需要用空()检查,如果表单提交并检查它的值。然后执行查询一次Order by SQL。

+0

你在哪里使用'$ orderby'?你需要把它放在查询中。 – mpen

+0

错误消息已消失。然而,数据仍然没有适当的排序。在phpMyAdmin中,'price'列的格式为'£ xx.xx'。这会影响它吗? – Ciaran

+0

@mark已更正 – xelber

0

您从未将$orderby变量附加到查询中。试试这个:

  $data1 ="SELECT * FROM products"; 
      IF ($_GET['PriceAsc']){ 
       $data1 .=" ORDER BY price ASC"; 
      } 
      IF ($_GET['PriceDesc']){ 
       $data1 .=" ORDER BY price DESC"; 
      $data = mysql_query($data1); 

.=追加字符串的$data

结束而你得到不确定的指数错误的原因是因为世界上没有PriceAsc可用!你试图$_GET不存在的东西。

你需要做的是:

IF ($_GET['sort'] == 'Price: Highest First'){ 
        $data1 .=" ORDER BY price ASC"; 
       } else { 
        $data1 .=" ORDER BY price DESC"; 
} 
+0

我仍然得到同样的错误消息“的通知:未定义指数:PriceAsc”通知:未定义指数:PriceDesc” – Ciaran

+0

如果网址中省略这些变量,这是通知ÿ你会得到。使用'array_key_exists'或'isset'来避免警告。 – mpen

+0

你确定你没有错过代码中的东西吗?因为你甚至从未将订单附加到查询中,所以mysql无法获取这些信息。 –

0

是在$排序追加到$数据如上

,你会需要这些查询字符串的URL

http://www/mypage.php?PriceAsc=true 

正确地进来,你会需要比较它正确

if ($_GET['PriceAsc']=='true'){ 
相关问题