2012-03-28 98 views
0

值I有一個表命名related_products,獨立逗號分隔從MySQL表

哪裏 ​​是主要的產物。

related_products_ids由與主要產品相關的產品ID組成。

-------------------------------------------- 
| products_id | related_products_ids | 
| ----------------------------------------- 
| 1   | 1,2,3,4,6,   | 
| ----------------------------------------- 
| 2   | 1,2,3,    | 
| ----------------------------------------- 
| 3   | 1,2,     | 
------------------------------------------- 

我有複選框,

<input value="1" type="checkbox" name="rp_product[]" id="in-category"> Microsoft IntelliMouse Pro 1 
<input value="2" type="checkbox" name="rp_product[]" id="in-category"> Microsoft IntelliMouse Pro 2 
<input value="3" type="checkbox" name="rp_product[]" id="in-category"> Microsoft IntelliMouse Pro 3 
<input value="4" type="checkbox" name="rp_product[]" id="in-category"> Microsoft IntelliMouse Pro 4 
<input value="5" type="checkbox" name="rp_product[]" id="in-category"> Microsoft IntelliMouse Pro 5 
<input value="6" type="checkbox" name="rp_product[]" id="in-category"> Microsoft IntelliMouse Pro 6 

複選框被由PHP生成,

<?php 
    echo '<div class="categorydiv"><div id="category-all" class="tabs-panel"><ul id="categorychecklist" class="list:category categorychecklist form-no-clear">'; 
    $rp_sql = "select products_id, products_name from ".TABLE_PRODUCTS_DESCRIPTION." order by products_id"; 
    $rp_1 = mysql_query($rp_sql); 
    while($rp_2 = mysql_fetch_array($rp_1)) { 
    echo "<li id=\"category-".$rp_2['products_id']."\" class=\"popular-category\"><label class=\"selectit\"><input value=\"".$rp_2['products_id']."\" type=\"checkbox\" name=\"rp_product[]\" id=\"in-category-1\"> ".$rp_2['products_name']."</label></li>"; 
    } 
    mysql_free_result($rp_1); 
    echo '</ul></div></div>'; 
    ?> 

如何添加checked以取決於related_products_ids值這些複選框。例如,產品ID爲1的im。

另一件事:我也希望在產品頁面中顯示這些相關產品。怎麼做? 例如,在​​爲1的產品頁面中,我想從table_name1,related_products_ids顯示產品。

UPDATE: 我已經使用了顯示數據的代碼,

$sql = "SELECT related_products_ids FROM ".TABLE_RELATED_PRODUCTS." where products_id = '" . (int)$_GET["products_id"]."'"; 
$result = mysql_query($sql); 
$row = mysql_fetch_array($result); 
$lst_rp = explode(',', $row['related_products_ids']); 
foreach($lst_rp as $rp_id) { 
$res = "SELECT products_id, products_name FROM ".TABLE_PRODUCTS_DESCRIPTION." WHERE products_id='" . $rp_id . "'"; 
} 
$result1 = mysql_query($res); 
while($row1 = mysql_fetch_array($result1)) { 
echo $row1['products_name']; 
} 

但是,它不顯示任何..

是我的代碼錯了嗎?

請幫忙,因爲我不知道該怎麼做。 謝謝。

+0

是產品範圍只是'6'? – 2012-03-28 11:24:32

+0

可以說我只有6個產品.. – Ken 2012-03-28 11:26:10

+0

您是否在服務器端生成輸入複選框(如HTML)?你使用'jQuery'嗎? – 2012-03-28 11:27:55

回答

0

首先,您的複選框不應該有相同的ID。

做這樣的事情:

foreach ($lst_product_ids as $product_id) { 
    $checked = ''; 
    $lst_rel_prods = explode(',', $arr_related_product_ids[$product_id]); 
    if (in_array($product_id, $lst_rel_prods)) 
     $checked = " checked"; 
    echo "<input value='" . $product_id . "' type='checkbox' name='rp_product[]'" . $checked . "> 
} 

顯然,假設你有$ lst_product_ids =陣列(1,2,3,4,5,6)和$ arr_related_product_ids =陣列(1 =>「1, 2,3,4,6',2 =>等)

UPDATE: 你的代碼改成這樣(編輯:後也選擇 'related_products_ids'):

while($rp_2 = mysql_fetch_array($rp_1)) { 
    $checked = ''; 
    $lst_rp = explode(',', $rp_2['related_products_ids']); 
    if (in_array($rp_2['products_id'], $lst_rp)) $checked = " checked"; 
    echo "<li id=\"category-".$rp_2['products_id']."\" class=\"popular-category\"><label class=\"selectit\"><input value=\"".$rp_2['products_id']."\" type=\"checkbox\" name=\"rp_product[]\" id=\"\"" . $checked . "> ".$rp_2['products_name']."</label></li>"; 
} 

還要記得爲每個chec使用不同的ID KBOX。

編輯:你也應該選擇「related_products_ids」:

$rp_sql = "select products_id, products_name, related_products_ids from ".TABLE_PRODUCTS_DESCRIPTION." order by products_id"; 

UPDATE:要爲逗號分隔的編號顯示值,並與存儲逗號分隔的關係,當前的(可能不靈活)的方法,你會必須使用while循環中的額外foreach($lst_rp as $rp_id)循環,foreach循環裏面做一個SQL選擇每個相關的產品,像

$query = "SELECT products_id, products_name FROM ".TABLE_PRODUCTS_DESCRIPTION." WHERE products_id=" . $rp_id; 

UPDATE:如果你有新的問題,你應該發佈新問題和鏈接以此作爲參考,否則這可能會永遠持續下去。

試試看看這個代碼。你打的每個電源

$sql = "SELECT related_products_ids FROM ".TABLE_RELATED_PRODUCTS." where products_id = " . $_GET["products_id"]; // I MADE CHANGES HERE 
$result = mysql_query($sql); 
$row = mysql_fetch_assoc($result); // I MADE A CHANGE HERE 
$lst_rp = explode(',', $row['related_products_ids']); 
foreach($lst_rp as $rp_id) { 
    $query = "SELECT products_id, products_name FROM ".TABLE_PRODUCTS_DESCRIPTION." WHERE products_id=" . $rp_id; 
    $result1 = mysql_query($res); // THIS AND THE FOLLOWING MUST STAY INSIDE THE LOOP 
    $row1 = mysql_fetch_assoc($result1); 
    echo $row1['products_name']; 
} 
+0

先生,請看我上面編輯過的帖子。如果你的代碼可以應用。 – Ken 2012-03-28 11:34:45

+0

@Ken:查看更新。 – Stefan 2012-03-28 11:53:04

+0

它的工作原理!謝謝。現在我有另一個問題..我如何顯示值由這些逗號分隔ID?因爲我想展示這些相關產品? – Ken 2012-03-28 12:05:59

1

你的方法不是特別可擴展性,開銷爲您辦理相關產品的數據增長:如果您的產品ID是一個SQL INT(),那麼你一定不能在查詢中使用引號10.我推薦的是你每個product_id有多行。然後,您可以使用in_array()來查找產品相關密鑰是否在您現有的結果中。

如果你堅持使用你當前的方法,看看explode(),它將你的值完美地分離到一個數組中,然後你可以像上面描述的那樣使用in_array()。