Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从mysql表中分离逗号分隔的值_Php_Mysql_Checkbox - Fatal编程技术网

Php 从mysql表中分离逗号分隔的值

Php 从mysql表中分离逗号分隔的值,php,mysql,checkbox,Php,Mysql,Checkbox,我有一个命名相关产品的表格 在哪里 产品\u id是主要产品 -------------------------------------------- | products_id | related_products_ids | | ----------------------------------------- | 1 | 1,2,3,4,6, | | --------------------------------------

我有一个命名相关产品的表格

在哪里
产品\u id
是主要产品

--------------------------------------------
|   products_id   |   related_products_ids |
| -----------------------------------------
|    1            |  1,2,3,4,6,            |
| -----------------------------------------
|    2            |   1,2,3,                |
| -----------------------------------------
|    3            |   1,2,                  |
-------------------------------------------
相关产品\u id
由与主产品相关的产品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
但是,它没有显示任何内容

我的代码错了吗

请帮忙,我不知道怎么做。
谢谢。

首先,您的复选框不应具有相同的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 . ">
}
更新:要显示逗号分隔id的值,并且使用当前(可能是不灵活的)存储逗号分隔关系的方法,您必须在while循环中使用额外的
foreach($lst\u rp as$rp\u id)
循环,在foreach循环中为每个相关产品执行SQL选择,例如

$query = "SELECT products_id, products_name FROM ".TABLE_PRODUCTS_DESCRIPTION." WHERE products_id=" . $rp_id;
更新:如果你有新的问题,你可能应该发布一个新的问题,并链接到这一个作为参考,否则这可能会永远持续下去

试试这个代码。如果产品id是SQL int(),则在查询中不得使用引号:

$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'];
}

您的方法不是特别可伸缩的,相关产品数据的开销随着每10次幂的增加而增加。我建议您改为每个产品\u id有多行。然后您可以使用in\u array()来查找与产品相关的键是否在您现在拥有的结果中


如果您坚持使用当前的方法,请查看explode(),它会将您的值完美地分割成一个数组,然后您可以使用上面描述的in_array()。

产品范围是否仅为
6
?假设我只有6个产品。您是否在服务器端生成
输入
复选框(如
HTML
)?您使用的是
jQuery
?不要使用逗号分隔关系。使用
id、product\id、related\u product\id
products
创建一个表
products
related\u-products\u-id
,列
products,related\u-id
都是表
products
的外键。作为HTML,先生。我不使用jQuery。先生,先生请看我上面编辑过的帖子。如果你的代码可以应用,那就行了!谢谢。现在我有另一个问题..如何用逗号分隔的ID显示值?因为我想显示这些相关的产品?@Ken:我添加了一些提示。谢谢你Stefan..这是一个很大的帮助。你好,请再次查看我上面更新的帖子。我还有另一个问题。非常感谢。
$rp_sql = "select products_id, products_name, related_products_ids from ".TABLE_PRODUCTS_DESCRIPTION." order by products_id";
$query = "SELECT products_id, products_name FROM ".TABLE_PRODUCTS_DESCRIPTION." WHERE products_id=" . $rp_id;
$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'];
}