2012-03-28 67 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()。