2014-01-10 68 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