【问题标题】:Returning a default grade from a score value从分值返回默认成绩
【发布时间】:2012-03-13 21:02:01
【问题描述】:

这是我的问题。我上传了一个包含两列(学生人数和分数)的 csv 文件。但是当我从数据中形成一个 HTML 表时,我希望有一个列根据上传的分数显示一个成绩......而且所有分数 >40 的课程都应该放在另一个表中。下面是我正在尝试制作的循环,但它并没有让我靠近它。

感谢您的帮助。我最欣赏它。谢谢

while ($row4 = mysql_fetch_assoc($query4)) {
    if ($row4['score'] >= 70) {
        $grade = A;
    } 
    elseif ($row4['score'] >= 60) {
        $grade = B;
    }
    elseif ($row4['score'] >= 50) {
        $grade = C;
    }
    elseif ($row4['score'] >= 45) {
        $grade = D;
    }
    elseif($row4['score'] >= 40) {
        $grade = E;
    }
    elseif($row4['score'] >= 40) {
        $grade = F;
    }else {
        $grade = AR;
    }
}

【问题讨论】:

  • 请提供 CSV 文件和 SQL 查询。
  • 请问“提供 CSV 文件”是什么意思?
  • but it's not getting me anywhere near it。你能不能扩展一下。你有错误吗?
  • @vascowhite .... 不,当我将这段代码放在我的查询之后时,我没有收到错误。
  • @dotman14 除非你所有的成绩都被定义为常数,否则你应该会收到很多警告。

标签: php mysql html loops


【解决方案1】:

如果我理解正确,以下应该可以满足您的要求。我假设您的课程 ID 和学生 ID 在数据库行中,但如果不是,您需要更新它们。

<?php

define('GRADE_A_MIN', 70);
define('GRADE_B_MIN', 60);
define('GRADE_C_MIN', 50);
define('GRADE_D_MIN', 45);
define('GRADE_E_MIN', 40);
define('GRADE_F_MIN', 35);

$table_one_values = array(); // Used to create table for students with scores 40+
$table_two_values = array();


while ($row4 = mysql_fetch_assoc($query4)) {
    $score = $row4['score'];
    $destination_table = 'two';

    if ( $score >= GRADE_A_MIN ) {
        $grade = 'A';
        $destination_table = 'one';

    } elseif ( $score >= GRADE_B_MIN ) {
        $grade = 'B';
        $destination_table = 'one';

    } elseif ( $score >= GRADE_C_MIN ) {
        $grade = 'C';
        $destination_table = 'one';

    } elseif ( $score >= GRADE_D_MIN ) {
        $grade = 'D';
        $destination_table = 'one';

    } elseif ( $score >= GRADE_E_MIN ) {
        $grade = 'E';
        $destination_table = 'one';

    } elseif ( $score >= GRADE_F_MIN ) {
        $grade = 'F';

    } else {
        $grade = 'AR';

    }

    $table = 'table_'.$destination_table.'_values';
    $$table[] = array(
        'course_id'     => $row4['course_id'],
        'student_id'    => $row4['student_id'],
        'score'         => $score,
        'grade'         => $grade
    );
}

【讨论】:

    【解决方案2】:

    一些问题:

    • 您的$grade 变量在循环中被覆盖,因此您只有最后一个值。由于您的行也包含一个学生编号,您可以执行以下操作:$grade[$row4['number']] = 'A'; 将该特定年级链接到特定学生编号。请注意,您将在循环之前设置数组:$grade = array();
    • 你的赋值是错误的,除非AB等是常量。它可能应该是'A' 而不是A 等。所以:$grade[$row4['number']] = 'C'; 等。

    【讨论】:

    • 注意:学号只是一个ID,与分数的分配没有任何关系。谢谢。
    • @dotman14 您需要展示其余代码。 $query4 返回多少行,每个学生一个?
    • www.pastebin.com/VhwMXyym .. 这是我完整代码的粘贴。我正在使用 Query8 来提取我的成绩数据。因此 $row8 等。我可以添加另一列带有成绩但不知道如何为其添加标题,它被添加到右侧。此外,当我更新分数时,成绩不会改变。它仍然保留初始分数的等级
    猜你喜欢
    • 2021-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多