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