switch语句中的绑定参数

时间:2018-04-21 08:28:35

标签: php

我的脚本需要一点帮助。正如标题所暗示的那样,它是关于参数的。我有这段代码:

if (isset($_GET['sendit'])) {
    $theusersname = $_GET['theusersname'];
    $totalmarks   = $_GET['totalmarks'];
    $mathsobt     = $_GET['mathsobt'];
    $physicsobt   = $_GET['physicsobt'];
    $chemistryobt = $_GET['chemistryobt'];
    $computerobt  = $_GET['computerobt'];
    $englishobt   = $_GET['englishobt'];


    $totalobt = $mathsobt + $physicsobt + $chemistryobt + $computerobt + $englishobt;

    $modulo = ($totalobt / $totalmarks) * 100;

    $grade = "";

//for grades

    switch ($modulo, $grade) {
        case 'A-1'://100% ro 80%
            if ($modulo >= 79.5 && $modulo <= 100){
                $grade = "A-1";
            } 
            break;
        case 'A'://79% to 70%
            if ($modulo >= 69.5 && $modulo <= 79.4) {
                $grade = "A";
            }
            break;
        case 'B'://69 to 60
            if ($modulo >= 59.5 && $modulo <= 69.4){
                $grade = "B";
            }
            break;
        case 'C'://59 to 50
            if ($modulo >= 49.5 && $modulo <= 59.4){
                $grade = "C";
            }
            break;
        case 'D'://49 to 40
            if ($modulo >= 39.5 && $modulo <= 49.4){
                $grade = "D";
            }
            break;
        case 'F'://32 to rest
            if ($modulo >= 33 && $modulo <= 39.4){
                $grade = "F";
            }
        default:
            if ($modulo >= 0 && $modulo <= 32.9){
                $grade = "N/A";
            }
            break;
    }

//for remarks

     switch ($grade) {
        case '':

            break;

        default:

            break;
     }  



    $query = "INSERT INTO `report`(`name`, `grade`, `total`, `mathsobt`, `physicsobt`, `chemistryobt`, `computerobt`, `englishobt`, `totalobt`, `modulo`, `remarks`) VALUES ('$theusersname', '$grade', '$totalmarks', '$mathsobt', '$physicsobt', '$chemistryobt', '$computerobt', '$englishobt', '$totalobt', '$modulo', '$remarks')";

    $result = mysqli_query($mysqliConn, $query);
    //  if (mysqli_query($mysqliConn, $query)) {
    //        echo "New record created successfully";
    //  } else {
    //  echo "Error: " . $query . "<br>" . mysqli_error($mysqliConn);
     $mysqliConn->close();
// } 

评分开关语句不起作用。因为我无法得到我需要提供的参数。同样的评论也是如此。代码可能很糟糕,并且没有消毒(在这种情况下我不需要)。对于我传给案件的字符串,我也有点混淆。我的意思是它对整体有影响吗?

谢谢。

PS:如果已经有类似的答案,我很遗憾,我没有找到,我已准备好查看该链接。请发表一点解释性评论。

2 个答案:

答案 0 :(得分:1)

$modulo && $grade是一个布尔表达式。其值为TRUEFALSE(而不是'A''B''C')。

但PHP是一种松散类型的语言,它在使用之前根据需要更改其值的类型。因此,'A' == TRUE'' == FALSE以及您的代码仅生成'A-1''N/A'等级。

switch在这里没有帮助。您应该使用一系列级联if s:

if ($modulo >= 79.5) {
    $grade = "A-1";
} elseif ($modulo >= 69.5) {
    $grade = "A";
} elseif ($modulo >= 59.5) {
    $grade = "B";
} elseif ($modulo >= 49.5) {
    $grade = "C";
} elseif ($modulo >= 39.5) {
    $grade = "D";
} elseif ($modulo >= 33) {
    $grade = "F";
} else {
    $grade = "N/A";
}

阅读PHP compare values of different types的方式并了解switch control structure的工作原理。

答案 1 :(得分:0)

你去吧

    $theusersname = 'theusersname';
    $totalmarks   = 500;
    $mathsobt     = 87;
    $physicsobt   = 82;
    $chemistryobt = 75;
    $computerobt  = 79;
    $englishobt   = 91;

    $totalobt   = $mathsobt + $physicsobt + $chemistryobt + $computerobt + $englishobt;
    $modulo     = ($totalobt / $totalmarks) * 100;

    switch ($modulo) {
        case $modulo >= 33 && $modulo < 39.5:
            $grade = "F";
            break;
        case $modulo >= 39.5 && $modulo < 49.5:
            $grade = "D";
            break;
        case $modulo >= 49.5 && $modulo < 59.5:
            $grade = "C";
            break;
        case $modulo >= 59.5 && $modulo < 69.5:
            $grade = "B";
            break;
        case $modulo >= 69.5 && $modulo < 79.5:
            $grade = "A";
            break;
        case ($modulo >= 79.5 && $modulo <= 100 ):
            $grade = "A-1";
            break;
        default:
            $grade = "N/A";
            break;
    }

    switch ($grade) {
        case 'A-1':
            $remarks = "You have got A-1 ";
            break;
        case 'A':
            $remarks = "You have got A ";
            break;
        case 'B':
            $remarks = "You have got B ";
            break;
        case 'C':
            $remarks = "You have got C ";
            break;
        case 'D':
            $remarks = "You have got D ";
            break;
        case 'F':
            $remarks = "You have got F ";
            break;
        default:
            $remarks = "You have got nothing";
            break;
    }
    echo $query = "INSERT INTO `report`
                        (`name`, `grade`, `total`, `mathsobt`, `physicsobt`,
                        `chemistryobt`, `computerobt`, `englishobt`, `totalobt`,
                        `modulo`, `remarks`)
                    VALUES ('$theusersname', '$grade', '$totalmarks', '$mathsobt',
                        '$physicsobt', '$chemistryobt', '$computerobt', '$englishobt',
                        '$totalobt', '$modulo', '$remarks')";

<强>输出

INSERT INTO `report`
   (`name`, `grade`, `total`, `mathsobt`, `physicsobt`,
   `chemistryobt`, `computerobt`, `englishobt`, `totalobt`,
   `modulo`, `remarks`)
VALUES ('theusersname', 'A-1', '500', '87', '82', '75', '79',
 '91', '414', '82.8', 'You have got A-1 ')