这部分代码用于在我申请学生学期成绩(课程分数)时将成绩授予学生分数。但是,只有特定等级被授予所有分数,大多数时候上传到学生数据库的最后结果被授予所有分数。当我把时期添加到等级,即
$grade .= 'A';
$grade .= 'B';
$grade .= 'C';
$grade .= 'D';
$grade .= 'E';
每栏重复所有等级。因此,假设某个学生在一个学期内完成了6门课程并且总共
3 A's , 2 B's , 1 C
六个课程的每一行都重复了所有6个等级。
在我正在生成的HTML表格中,我有以下列
Course_code
Course_title
Course_unit
Score
Grade
只有前四个来自数据库中已有的值,最后一个(成绩),每当我想要请求学生学期结果时,我就会生成。
while ($row8 = mysql_fetch_assoc ($query8)) {
if ($row8['score'] >= 70) {
$grade = 'A';
}
elseif ($row8['score'] >= 60) {
$grade = 'B';
}elseif ($row8['score'] >= 50) {
$grade = 'C';
}elseif ($row8['score'] >= 45) {
$grade = 'D';
}elseif($row8['score'] >= 40) {
$grade = 'E';
}else{
$grade = 'F';
}
}
Query8
$query8 = mysql_query("SELECT m. score
FROM maintable AS m
INNER JOIN students AS s ON
m.matric_no = s.matric_no
INNER JOIN courses AS c ON
m.course_code = c.course_code
WHERE m.matric_no = '".$matric_no."'
AND m.level = '".$level."'")
or die (mysql_error());
表格结构
MAINTABLE:
score_id
matric_no
session
semester_name
course_code
level
score
grade
COURSES:
course_id
course_code
course_title
course_unit
STUDENT
matric_no
first_name
last_name
other_name
level
感谢您的耐心和帮助。我非常感激。
感谢。
答案 0 :(得分:0)
最好这样试试,
while ($row8 = mysql_fetch_assoc ($query8)) {
echo "<td>$row['course_id']</td>";
echo "<td>$row['course_code']</td>";
echo "<td>$row['course_title']</td>";
echo "<td>$row['score']</td>";
echo "<td>";
if ($row8['score'] >= 70) {
$grade = 'A';
}
elseif ($row8['score'] >= 60) {
$grade = 'B';
}elseif ($row8['score'] >= 50) {
$grade = 'C';
}elseif ($row8['score'] >= 45) {
$grade = 'D';
}elseif($row8['score'] >= 40) {
$grade = 'E';
}else{
$grade = 'F';
}
echo $grade ."</td></tr>";
}
答案 1 :(得分:0)
你的问题不是那么清楚。这是一个建议。
通过matric_no
获取query8的查询结果 $lastid='-1';
$newgrade="";
while ($row8 = mysql_fetch_assoc($query8)) {
if ($row8['score'] >= 70) {
$grade = 'A';
}
elseif ($row8['score'] >= 60) {
$grade = 'B';
}elseif ($row8['score'] >= 50) {
$grade = 'C';
}elseif ($row8['score'] >= 45) {
$grade = 'D';
}elseif($row8['score'] >= 40) {
$grade = 'E';
}else{
$grade = 'F';
}
}
$mno=$row8['matric_no'];
if(($lastid!=$mno && $lastid!='-1')) {
echo "<tr><td>all db details</td><td>$newgrade</td></tr>"; //$newgrade has appended grades of student(identified by matric_no)
$newgrade="";
}
$newgrade.=$grade;
$lastid=$mno;
}
答案 2 :(得分:0)
编辑。
所以,根据您链接的Pastebin(如果我碰巧给出行号,它将是我在Pastebin上看到的行),我没有进入整个代码,但对于我们感兴趣的部分你的问题是你计算所有学生的成绩,并将其保存在同一个变量中。因此,当您尝试稍后在循环外打印时,该变量仅包含循环中传递的最后学生的成绩。
$query7
和$query8
相同,只是您不检索相同的字段。这是DB处理工作的两倍,所以最好只使用$query7
(包含分数),并删除$query8
(第122到130行)。
您的成绩计算(第141到155行)在$query8
上循环,您不需要它,因为您要为一个分数计算一个分数,而不是一次全部。所以,只需删除循环,保持内部。
所述循环的内部(第142到155行),把它放在一个函数中,就像我在第一篇文章中所做的那样:
function makeGrade($score) { //just a rewrite of your own code, exactly the same purpose
if($score>=70)
return 'A';
if($score>=60)
return 'B';
if($score>=50)
return 'C';
if($score>=45)
return 'D';
if($score>=40)
return 'E';
return 'F';
}
在第170至188行,您循环$query7
打印数据,在第182行打印$grade
。不要打印$grade
,只需使用$query7
中检索到的“得分”字段调用该函数:
echo makeGrade($row['Score']);
现在它应该为每个学生和每门课程提供合适的成绩。顺便说一句,这里您不需要数据库中的成绩字段,因此您可以将其删除。
另一种方法是在DB中包含等级(但无论如何你不需要$query8
)。首先,当代码使用相同的MAINTABLE
函数插入makeGrade()
(我猜想的其他文件)中的行时,你需要设置它(尽管在这种情况下你必须声明两个脚本都可以的函数)访问它,就像在包含文件中一样)。其次,对于现有行,您需要运行一系列UPDATE
,如下所示:
UPDATE MAINTABLE SET grade='A' WHERE score>=70;
UPDATE MAINTABLE SET grade='B' WHERE score>=60 AND score<70;
UPDATE MAINTABLE SET grade='C' WHERE score>=50 AND score<60;
UPDATE MAINTABLE SET grade='D' WHERE score>=45 AND score<50;
UPDATE MAINTABLE SET grade='E' WHERE score>=40 AND score<45;
UPDATE MAINTABLE SET grade='F' WHERE score<40;
然后,您只需在grade
的{{1}}部分添加$query7
,然后在第182行使用SELECT
。
做出选择:)