2014-01-10 69 views
1

它基本上从MySQL数据库显示的数据,并使用PHP未定义指数 - sortby

$sortby = $_GET['sort']; 

而我得到的错误是

Notice: Undefined index: sort in /home/4507408/public_html/list.php on line 8 

下面是完整的代码,任何想法? (8号线为$ sortby = $ _GET [ '排序'];)

为寻找谢谢:)

<?php 
$dbhost = 'localhost'; 
$dbuser = 'CU4507408'; 
$dbpass = 'adamadam1'; 
$dbname = 'CU4507408'; 
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die("Error connecting to  database"); 
mysql_select_db($dbname); 
$sortby = $_GET['sort']; 
?> 

那页面

<table border="1"> 

    <tr> 
     <th><a href="list.php?sort=name">Product Name:</a></th> 
     <th><a href="list.php?sort=price">Price £</a></th> 
     <th><a href="list.php?sort=manufacturer">Manufacturer</a></th> 
     <th><a href="list.php?sort=rating">Rating</a></th> 
     <th><a href="list.php?sort=categoryname">Category</a></th> 
    </tr> 
    <?php 
    $query = "SELECT p.productID, p.name, p.price, p.manufacturer, p.rating, c.categoryname FROM product p INNER JOIN category c WHERE p.categoryID=c.categoryID ORDER BY $sortby ASC;"; 
    $result = mysql_query($query) or die("failed!"); 
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
     ?> 
     <tr> 

      <td><a href="link.php?productID=<?= $row['productID'] ?>"><?= $row['name'] ?></a></td> 
      <td><?= $row['price'] ?></td> 
      <td><?= $row['manufacturer'] ?></td> 
      <td><?= $row['rating'] ?></td> 
      <td><?= $row['categoryname'] ?></td> 
     </tr> 
<? } ?> 
+1

mysql扩展已被弃用的顶部添加以下代码,而是使用mysqli或PDO_MySQL。 – Naeem

+0

你从哪里得到'sort'?似乎没有发送或定义在那里。做一个'echo $ _REQUEST'来看看它是怎么样的。 ;) – loveNoHate

+0

当你加载页面时,sort没有被定义,这是吐出错误的东西。 检查并创建默认值。正如hsz所建议的那样。 – 2014-01-10 12:14:37

回答

4

只是尝试的顶部:

$sortby = isset($_GET['sort']) ? $_GET['sort'] : 'default_value'; 

此外,如果您使用$_GET通过valriables你必须检查,如果它不是注入的东西值i你的查询。好的做法是:

$sortbyValues = array('price', 'manufacturer', 'rating', 'categoryname'); 
$sortby = isset($_GET['sort']) && in_array($sortby, $sortbyValues) ? $_GET['sort'] : 'default_value'; 
+0

非常感谢你,这工作完美:) – Adam91Holt

+0

@ user3181679如果你发现我的答案是正确的,记得用左边的勾号接受它。 – hsz

+0

我会做的,你的回答很快,我还不能哈哈!我会tho :) – Adam91Holt

1

问题发生是因为您的索引未在配置文件上设置。您可以使用任何下列选项:

@$sortby = $_GET['sort']; 

$sortby = isset($_GET['sort']) ? $_GET['sort'] : 'default_value'; 
+0

你复制我的答案? ;-) – hsz

+0

我已经给两个选项使用仍然我可以提到你的功劳:) –

+1

但是使用'@'不是一个好的做法。你应该避免错误/通知,而不是忽略它们。 – hsz

0

删除此行从您的代码

$sortby = $_GET['sort']; 

在你的代码

if (isset($_GET['sort']) && !empty($_GET['sort'])) { 
     $sortby = $_GET['sort']; 
    }else{ 
     /*in case value of $_GET['sort'] is not reterieved, Action can be done for error handling here. */ 
    } 
+0

为什么你留下其他代码空白它不是一个正确的方式 –

+0

因为我们可以定义其他值如果GET为空 – vivek