2013-04-20 49 views
0

感謝您的支持!MySQL查詢並獲取id值

我想爲我的學校項目做一個電子商務網站。目的是用數據庫中的內容填充我的網頁,並且1個特定的條件似乎不會記錄爲我能夠從數據庫中提取數據以在網站上呈現:

我的主要頁我對駐留在側邊欄的代碼:這導致了PHP頁面來檢索他們的產品類別

<ul class="left_menu"> 
    <li class="odd"><a href="categories.php?catno=10familia">Familia Originals</a></li> 
    <li class="even"><a href="categories.php?catno=20familia">Ready to Cook</a></li> 
    <li class="odd"><a href="categories.php?catno=30familia">Siomai and Buns</a></li> 
    <li class="even"><a href="categories.php?catno=40familia">Pork Snacks</a></li> 
    <li class="odd"><a href="categories.php?catno=50familia">Ready Made Dishes</a></li> 
    </ul> 

所有產品的基礎,我有這樣的代碼/頁會介紹其產品的產品基地通過使用(id)catno =來引用應顯示的類別。

// Sanitize the $_GET['catno'] and match with the correct category: 
$sanitize = mysqli_real_escape_string($dbc, $_GET['catno']); 

//match cases according to the product category 
if ($sanitize == '10familia') { 
$catid = 1; 
} elseif ($sanitize == '20familia') { 
$catid = 2; 
} elseif ($sanitize == '30familia') { 
$catid = 3; 
} elseif ($sanitize == '40familia') { 
$catid = 4; 
} elseif ($sanitize == '50familia') { 
$catid = 5; 
} else { 
$cat_error = '<div class="center"><h2>There are no products in this category. Please try again later.</h2></div>'; 
} 
?> 
<div class="center_content"> 
<div class="center_title_bar">Latest Products</div> 
<div class="scroll_box_tall"> 
    <? 
    $query = "SELECT product_id, name, price, thumbnail FROM products WHERE category_id = '$catid' ORDER BY product_id ASC"; 
    $request = mysqli_query($dbc, $query); 

    if (mysqli_affected_rows($dbc) == 1) { 
     while ($row = mysqli_fetch_array($request, MYSQLI_NUM)) { 
      $item_id = $row[0]; // Assign product_id to $item_id to be passed on the href 
      $item_name = $row[1]; // Assign name to var $item_name 
      $item_price = $row[2]; // Assign price to var $item_price 
      $item_thumb = $row[3]; // Assign thumbnail to $item_thumb 
      // echo item name 
      $div1 = '<div class="prod_box"><div class="top_prod_box"></div><div class="center_prod_box"><div class="product_title">' . $item_name . '</div>'; 
      // echo the thumbnail 
      $div2 = '<div class="product_img"><a href="show_product.php?idno=' . $item_id . '"><img src="product/thumb/' . $item_thumb . '" alt="' . $item_name . '"/></a></div>'; 
      // echo the price 
      $div3 = '<div class="prod_price"><span class="price">RRP &pound; ' . $item_price . '</span></div></div><div class="bottom_prod_box"></div></div>'; 
      echo "$div1$div2$div3"; 
     } 
    } else { // Say an error message if there is no products in the category or the query is unsuccessful 
     echo '<div class="center"><h2>There are no products in this category. Please try again later.</h2></div>'; 
    } ?> 
</div> 

的條件句的if/else工作正常,並在檢索的產品和在網頁上展示它完美。 (類別($ catid)2,3,4,5 - 工作正常,如果他們各自的鏈接被點擊)我主要的問題是,所有條件if/else記錄的值除了第一個:

if ($sanitize == '10familia') { 
$catid = 1; 
} 

值爲$ catid = 1的記錄不會被查詢以從數據庫中的類別1中提取所有產品。

我不知道爲什麼這個特定條件將無法正常工作,但其他四個是相同的作品..

注:我剛開始PHP和我道歉,如果有更好的方式,如果做 - 我用if/elseif方法做了。

謝謝大家。 :)

回答

0

只是一個猜測,因爲有您的測試數據中沒有的信息,但是這看起來可疑:

if (mysqli_affected_rows($dbc) == 1) { 

這檢查,看看是否只有一行由查詢返回。您的測試數據可能有2行至5行的一行,1行有多行?嘗試將邏輯更改爲:

if (mysqli_affected_rows($dbc) > 0) { 
+0

感謝您的回答@Ed ..這讓我清楚瞭解我的代碼正在發生什麼。乾杯! :) – GitKidd 2013-04-20 02:45:28

2

mysqli_real_escape_string($dbc,$string)用於清理輸入。您不想在PHP中使用它之前使用它。它專門用於MySQL,這就是它需要數據庫連接的原因。

$catno = $_GET['catno']; 

相反的,如果(這仍然是好的),你可以使用一個switch()聲明:

switch($catno){ 

    case '10familia': 
    $catid = 1; 
    break; 

    case '20familia': 
    $catid = 2; 
    break; 

    case '30familia': 
    $catid = 3; 
    break; 

    case '40familia': 
    $catid = 4; 
    break; 

    case '50familia': 
    $catid = 5; 
    break; 

    default: 
    $cat_error = '<div class="center"><h2>There are no products in this category. Please try again later.</h2></div>'; 
    $cat_id=-1; 
    echo $cat_error; 
} 

我要離開這裏了代碼的HTML部分爲簡潔。

因爲我們甚至不使用$catno查詢數據庫,沒有必要做一個mysqli_real_escape_string()就可以了,因爲我們現在有一個變種($cat_id),將有可能插入到我們已經數據庫的SQL語句設定自己。這通常是你會清理任何用戶提供的變量以供插入的地方。

現在我們來看看這個var是否是正數。如果前面的var沒有正確傳遞,我們期望它是負的。

if($cat_id > -1){ 

正如喜好,我喜歡拉數查詢,檢查簡單的事情,比如表的存在之前,我試圖使MySQL通過大量的箍跳,看是否有加入是要一路下跌失敗該線。這是一個額外的查詢,但它可以節省大量查詢並傳遞錯誤的統計信息。如果你不追蹤大量的交叉表失敗,那麼追捕也更容易。

$count = mysql_result(mysqli_query($dbc, "select count(*) from products where category_id='$catid'"),0); 

if ($count == 1){ 
$query = "SELECT product_id, name, price, thumbnail FROM products WHERE category_id = '$catid' ORDER BY product_id ASC"; 
$request = mysqli_query($dbc, $query); 
while ($row = mysqli_fetch_array($request)) { 

在這些我喜歡實際設置我拉的列的名稱。一旦你進入更大的表格,這將有助於你不必弄清楚第45列是什麼。此外,它可以讓那些可能與你一起工作或繼承項目的人更容易。

 $item_id = $row['product_id']; // Assign product_id to $item_id to be passed on the href 
     $item_name = $row['name']; // Assign name to var $item_name 
     $item_price = $row['price']; // Assign price to var $item_price 
     $item_thumb = $row['thumbnail']; // Assign thumbnail to $item_thumb 
     // echo item name 

收穫的人的習慣是創造之類的div後新行,這樣就可以在前端解決您的HTML代碼。

 $nl = "\n"; 

     $div1 = '<div class="prod_box">'.$nl.'<div class="top_prod_box"></div>'.$nl.'<div class="center_prod_box">'.$nl.'<div class="product_title">'.$item_name.'</div>'.$nl; 
     // echo the thumbnail 
     $div2 = '<div class="product_img"><a href="show_product.php?idno='.$item_id.'"><img src="product/thumb/'.$item_thumb.'" alt="'.$item_name.'"/></a></div>'.$nl; 
     // echo the price 
     $div3 = '<div class="prod_price"><span class="price">RRP &pound; ' . $item_price . '</span></div>'.$nl.'</div>'.$nl.'<div class="bottom_prod_box"></div>'.$nl.'</div>'.$nl; 
     echo "$div1$div2$div3"; 
    } 

} else { // Say an error message if there is no products in the category or the query is unsuccessful 
    echo '<div class="center"><h2>There are no products in this category. Please try again later.</h2></div>'; 
} ?> 
+0

感謝@Absolute!這真的很有幫助,我肯定會記下這些提示。這是我從頭開始的第一個定製項目,您的建議爲我編寫代碼提供了更好的視角。再次感謝。 :) – GitKidd 2013-04-20 03:00:02