Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.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/3/html/69.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 在foreach循环中显示包含数据库值的表_Php_Html_Mysql - Fatal编程技术网

Php 在foreach循环中显示包含数据库值的表

Php 在foreach循环中显示包含数据库值的表,php,html,mysql,Php,Html,Mysql,我试图在while循环中显示一个表。。但是我已经在那里呆了两天了。有人能帮我吗 现在我将解释我在这里要做的事情。。我的数据库中有几个类别和几个主题。每个类别都有自己的主题。现在我需要以列表的形式显示类别及其主题。当在特定类别下显示主题时,我需要添加一个包含2列的HTML表来显示主题 这是我到目前为止所做的代码 $categoryIds = implode(',', $_SESSION['category']); $q = "SELECT c. category_id AS c

我试图在while循环中显示一个表。。但是我已经在那里呆了两天了。有人能帮我吗

现在我将解释我在这里要做的事情。。我的数据库中有几个类别和几个主题。每个类别都有自己的主题。现在我需要以列表的形式显示类别及其主题。当在特定类别下显示主题时,我需要添加一个包含2列的HTML表来显示主题

这是我到目前为止所做的代码

    $categoryIds = implode(',', $_SESSION['category']);

    $q = "SELECT  c. category_id AS ci, c.category_name AS cn, s.subject_name AS sn, s.subject_id AS si
            FROM    category AS c 
            INNER JOIN category_subjects AS cs ON cs.category_id = c.category_id
            INNER JOIN subjects AS s ON s.subject_id = cs.subject_id
          WHERE   c.category_id IN ($categoryIds)";

    $r = mysqli_query( $dbc, $q) ;

    $catID = false;
    $max_columns = 2;

    while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC))
    {
        $categoryId = $row['ci'];
        $category = $row['cn'];
        $subjects = $row['sn'];

        echo '<div>';

        //Detect change in category
        if($catID != $categoryId) 
        {

            echo "<h3>Category 01: <span>{$category}</span><span></span></h3>\n";

            foreach ( $subjects AS $sub ) {

                echo "<div class='container'>\n";
                //echo "<table><tr>\n"; 

                //echo $sub;

                echo "</div> <!-- End .container DIV -->\n";

            }           
            echo '</div>';          
        }               
        $catID = $categoryId;       
        echo '</div>';
   }
$categoryIds=内爆(',',$会话['category']);
$q=“选择c.类别\u id作为ci,c.类别\u名称作为cn,s.主题\u名称作为sn,s.主题\u id作为si
从c类开始
在cs.category\u id=c.category\u id上作为cs的内部联接category\u主题
在s.subject\u id=cs.subject\u id上将主题作为s进行内部连接
其中,c.类别id为($categoryIds)”;
$r=mysqli_查询($dbc,$q);
$catID=假;
$max_列=2;
而($row=mysqli\u fetch\u数组($r,mysqli\u ASSOC))
{
$categoryId=$row['ci'];
$category=$row['cn'];
$subjects=$row['sn'];
回声';
//检测类别中的更改
如果($catID!=$categoryId)
{
echo“类别01:{$Category}\n”;
foreach($sub作为$sub的主题){
回音“\n”;
//回音“\n”;
//echo$sub;
回音“\n”;
}           
回声';
}               
$catID=$categoryId;
回声';
}
在这里,类别名称正确显示在标记下。但问题是何时显示属于类别的主题。我正在尝试在.container Div中显示subjects表

请问有人能帮我解决这个问题吗

谢谢……

试试看

...
//Detect change in category
if($catID != $categoryId) 
{
    echo "<h3>Category 01: <span>{$category}</span><span></span></h3>";
    echo "<div class='container'>";
    echo "<table>"; 

    if (is_array($subjects))
    {
        foreach ($subjects as $sub) {
            echo "<tr>";
            echo "<td>";
            echo $sub;
            echo "</td>";
            echo "</tr>";
        }
    }
    else
    {
        echo "<tr><td>No subjects to display...<td/><tr/>";
    }
    echo "</table>"; 
    echo "</div> <!-- End .container DIV -->";
}
...
。。。
//检测类别中的更改
如果($catID!=$categoryId)
{
echo“类别01:{$Category}”;
回声“;
回声“;
if(is_数组($subjects))
{
foreach($sub作为$sub的主题){
回声“;
回声“;
echo$sub;
回声“;
回声“;
}
}
其他的
{
回显“没有要显示的主题…”;
}
回声“;
回声“;
}
...

更新 考虑更改从DB检索数据的方法。尝试此代码(代码未经测试,使用记事本键入),因此您可能需要对其进行一些修复…)

$categoryIds=内爆(',',$会话['category']);
$q=“选择c.类别\u id作为ci,选择c.类别\u名称作为cn
从c类开始
其中,c.类别id为($categoryIds)”;
$r=mysqli_查询($dbc,$q);
$catID=假;
$max_列=2;
而($row=mysqli\u fetch\u数组($r,mysqli\u ASSOC))
{
$categoryId=$row['ci'];
$category=$row['cn'];
回声';
echo“类别01:{$Category}\n”;
$qs=“选择s.subject\u名称作为序号,选择s.subject\u id作为si
来自类别(c)
在s.subject\u id=cs.subject\u id上将主题作为s进行内部连接
其中cs.category\u id=\'.$categoryId.'\';
$rs=mysqli_查询($dbc,$qs);
echo“类别01:{$Category}”;
回声“;
回声“;
而($rows=mysqli\u fetch\u数组($rs,mysqli\u ASSOC))
{
$sub=$rows['sn'];
回声“;
回声“;
echo$sub;
回声“;
回声“;
}
回声“;
回声“;
回声';
}
在这个循环中,我们首先获取类别,在循环中打印第一个类别名称,在循环中为当前类别获取适当的主题,然后打印下一个主题,依此类推……

尝试

...
//Detect change in category
if($catID != $categoryId) 
{
    echo "<h3>Category 01: <span>{$category}</span><span></span></h3>";
    echo "<div class='container'>";
    echo "<table>"; 

    if (is_array($subjects))
    {
        foreach ($subjects as $sub) {
            echo "<tr>";
            echo "<td>";
            echo $sub;
            echo "</td>";
            echo "</tr>";
        }
    }
    else
    {
        echo "<tr><td>No subjects to display...<td/><tr/>";
    }
    echo "</table>"; 
    echo "</div> <!-- End .container DIV -->";
}
...
。。。
//检测类别中的更改
如果($catID!=$categoryId)
{
echo“类别01:{$Category}”;
回声“;
回声“;
if(is_数组($subjects))
{
foreach($sub作为$sub的主题){
回声“;
回声“;
echo$sub;
回声“;
回声“;
}
}
其他的
{
回显“没有要显示的主题…”;
}
回声“;
回声“;
}
...

更新 考虑更改从DB检索数据的方法。尝试此代码(代码未经测试,使用记事本键入),因此您可能需要对其进行一些修复…)

$categoryIds=内爆(',',$会话['category']);
$q=“选择c.类别\u id作为ci,选择c.类别\u名称作为cn
从c类开始
其中,c.类别id为($categoryIds)”;
$r=mysqli_查询($dbc,$q);
$catID=假;
$max_列=2;
而($row=mysqli\u fetch\u数组($r,mysqli\u ASSOC))
{
$categoryId=$row['ci'];
$category=$row['cn'];
回声';
echo“类别01:{$Category}\n”;
$qs=“选择s.subject\u名称作为序号,选择s.subject\u id作为si
来自类别(c)
在s.subject\u id=cs.subject\u id上将主题作为s进行内部连接
其中cs.category\u id=\'.$categoryId.'\';
$rs=mysqli_查询($dbc,$qs);
echo“类别01:{$Category}”;
回声“;
回声“;
而($rows=mysqli\u fetch\u数组($rs,mysqli\u ASSOC))
{
$sub=$rows['sn'];
回声“;
回声“;
echo$sub;
回声“;
回声“;
}
回声“;
回声“;
回声';
}

在这个循环中,我们首先获取类别,在循环中打印第一个类别名称,然后在循环中为当前类别获取适当的主题,然后打印下一个主题,依此类推……

然后我可以得到这个错误..:为foreach()提供的参数无效,然后脚本转到其他部分。。else{echo“没有要显示的主题…”;}但使用此行
$subjects=$row['sn']
您一次只能获取一个主题,因此您不能将foreach与
$subjects
一起使用。我想,如果您可以调试,请检查“$subjects”的值