将动态列插入网站表?

时间:2013-01-31 14:55:19

标签: php html sql

我正在开发一个网站,其中包含一个包含12列的表格,其中显示了每行中有关学生的各种信息。我正在尝试添加第13列,显示PASSFAIL,或者如果学生尚未编写考试,则将其留给BLANK

在我的MSSQL数据库中,我有两个表。 T1(学生)包含有关学生的各种信息,并且有一个keyId(主键),这是网站表用于将学生划分为一起的行。一旦学生编写了考试,他就会在同一张表中分配一个学号(如果不是NULL)。此学号是第二个表中的主键,其值为PASSFAIL

编辑:第二个表格中的数据PASS或FAIL通过网站插入另一个标签,教师输入学生编号并选择通过或失败。

“状态”列的数据类型(通过或失败)是枚举(字符串)P& F。

<?php 

$objMSSQL = new cMSSQL(); 

//[...] 

for($i = 0; $i < $noOfRows; $i++)
    $noOfRows = $objMSSQL->getAffectedRows();

//[...]

$examStatus = $objMSSQL->getTable("
    SELECT * 
    FROM [Students] 
    INNER JOIN [Exams] ON Exams.studentNo = Students.studentNo
")

if ($examStatus[$i][Status] == 'PASS')
    echo '<td width="80px"> PASS </td>';
elseif ($examStatus[$i][Status] == 'FAIL')
    echo '<td width="80px"> FAIL </td>';
else
    echo '<td width="80px"></td>';

?>

我一直在寻找一个解决方案而且无法弄清楚为什么它在网站上没有正确显示(它显示通过或失败似乎是随机的,并且没有留下任何空白)。

3 个答案:

答案 0 :(得分:0)

在SQL查询中,您可以在那里添加13列。类似的东西:

SELECT *, CASE WHEN EXAM_SCORE > 70.00 then 'PASS'
               WHEN EXAM_SCORE < 70.00 then 'FAIL'
               else ''
               END EXAM_SCORE as PassFail
FROM [Students] INNER JOIN [Exams] ON Exams.studentNo=Students.studentNo

答案 1 :(得分:0)

编辑:我从上面复制了你的代码,并使用适当的函数添加了你需要的部分。 (根据需要调整/编辑/重命名以正常工作/显示)。

这是另一个例子:Creating a dynamic table with PHP

您可以将此作为示例在PHP中创建动态表:

<?php 

$objMSSQL = new cMSSQL(); 

//[...] 

for($i = 0; $i < $noOfRows; $i++)
    $noOfRows = $objMSSQL->getAffectedRows();

//[...]

$examStatus = $objMSSQL->getTable("
    SELECT * 
    FROM [Students] 
    INNER JOIN [Exams] ON Exams.studentNo = Students.studentNo
")

$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
       print '<tr>'
      .'<td>' . $row['col1'] . '</td>'
      .'<td>' . $row['col2'] . '</td>'
      .'<td>' . $row['col3'] . '</td>'
      .'<td>' . $row['colx'] . '</td>'
      .'</tr>';
}

?>

所以它基本上是循环查询结果。由于您正在加入学生表,您将可以访问通过/失败数据。您可能不想使用'*',而是列出每个表中您想要的列。

现在,我不确定你的其余代码是否正确或你需要什么(即FOR循环),需要WHILE循环来创建表并输出数据。

答案 2 :(得分:0)

如果您需要可变/动态数量的列,则应查看垂直表格布局