2016-03-26 51 views
0

$ Grade和$ Remark总是以$ total的最后一个值(即where($ check_ss ==“Ss”))来计算,但我希望它能在每个if条件。我该怎么做 例如,在第一种情况它会档次和言论的价值同为后续条件 还是我haveto包括内部的每个if语句在Switch语句设置中需要帮助

//Logic and Calc 

if ($check_en=="En"){ 
    $ot_en = $ent1 + $ent2 + $ent3 + $ent4 + $enexm; 
    $total = $ot_en; 
} 
if ($check_ms=="Ms"){ 
    $ot_ms = $mst1 + $mst2 + $mst3 + $mst4 + $msexm; 
    $total = $ot_ms; 
} 
if ($check_ss=="Ss"){ 
    $ot_ss = $sst1 + $sst2 + $sst3 + $sst4 + $ssexm; 
    $total = $ot_ss; 
} 
$ot= $ot_ms + $ot_ss + $ot_en; 

    switch ($total) { 

     case $total > 70: 
      $grade = "A"; 
      $remark = "Excellent"; 
      break; 
     case $total >= 60 && $total <= 69: 
      $grade = "B"; 
      $remark = "Very Good"; 
      break; 
     case $total >= 50 && $total <= 59: 
      $grade = "C"; 
      $remark = "Good"; 
      break; 
     case $total >= 45 && $total <= 49: 
      $grade = "D"; 
      $remark = "Pass"; 
      break; 
     case $total >= 40 && $total <= 44: 
      $grade = "E"; 
      $remark = "Poor"; 
      break; 
     case $total <= 39: 
      $grade = "F"; 
      $remark = "Fail"; 
      break; 
    } 
    if ($total == 0) { 
     $grade = "F"; 
     $remark = "Fail"; 

回答

1

让你的switch语句进入一个函数的switch语句,还可以使用一个数组来保存等级和备注数据。事情是这样的:

function checkGrade($total) 
{ 
    $ret = array(); 
    switch ($total) { 

     case $total > 70: 
      $ret['grade'] = "A"; 
      $ret['remark'] = "Excellent"; 
      break; 
     case $total >= 60 && $total <= 69: 
      $ret['grade'] = "B"; 
      $ret['remark'] = "Very Good"; 
      break; 
     case $total >= 50 && $total <= 59: 
      $ret['grade'] = "C"; 
      $ret['remark'] = "Good"; 
      break; 
     case $total >= 45 && $total <= 49: 
      $ret['grade'] = "D"; 
      $ret['remark'] = "Pass"; 
      break; 
     case $total >= 40 && $total <= 44: 
      $ret['grade'] = "E"; 
      $ret['remark'] = "Poor"; 
      break; 
     case $total <= 39: 
      $ret['grade'] = "F"; 
      $ret['remark'] = "Fail"; 
      break; 
    } 

    return $ret; 
} 

现在,您可以轻松地将if()条件范围内使用,并取回各点的等级。

$gradesAlongTheWay = array(); 
if ($check_en=="En"){ 
    $ot_en = $ent1 + $ent2 + $ent3 + $ent4 + $enexm; 
    $total = $ot_en; 
    $gradesAlongTheWay['En'] = checkGrade($total); 
} 
if ($check_ms=="Ms"){ 
    $ot_ms = $mst1 + $mst2 + $mst3 + $mst4 + $msexm; 
    $total = $ot_ms; 
    $gradesAlongTheWay['Ms'] = checkGrade($total); 
} 
if ($check_ss=="Ss"){ 
    $ot_ss = $sst1 + $sst2 + $sst3 + $sst4 + $ssexm; 
    $total = $ot_ss; 
    $gradesAlongTheWay['Ss'] = checkGrade($total); 
} 

然后,您可以转储出gradesAlongTheWay()以查明每个特定点的等级。这将是一个多维数组有3个主要指标:

Array(
    'En' => array(
     'grade' => 'Some Letter', 
     'remark' => 'Some notation' 
    ), 
    'Ms' => array(
     'grade' => 'Some Letter', 
     'remark' => 'Some notation' 
    ), 
    'Ss' => array(
     'grade' => 'Some Letter', 
     'remark' => 'Some notation' 
    ) 
) 

现在,我们可以很容易地通过索引来访问每个点上的成绩和他们的等级,thussly:

echo $gradesAlongTheWay['En']['grade']; // produces the letter from this check 

echo $gradesAlongTheWay['Ss']['remark']; //produces the notation/message from this check 

你也可以循环在他们身上。

foreach($gradesAlongTheWay as $type => $gradeArray) 
{ 
    echo 'For Check '. $type .' you received an: '. $gradeArray['grade'] .'. '. $gradeArray['remark']; 
} 

编辑

你得到,因为在你的PHP代码'撇号的SQL错误被注入到你的MySQL的代码。相反,您需要使用mysqli prepared statements

$stmt = mysqli_prepare($conn, "INSERT INTO records VALUES (NULL, '?', 'English Language', '?', '?', '?', '?', '?', '?', ?, 'Poor'"); 

mysqli_stmt_bind_param($stmt, "ssssssss", $sid, $ent1, $ent2, $ent3, $ent4, $enexm, $ot_en, $gradesAlongTheWay['En']['grade']); 

mysqli_stmt_execute($stmt); 

这将确保您的数据正确消毒。

Please read more into mysqli prepared statements here

+0

'$ SQL1 =“INSERT INTO'records' VALUES(NULL, '$ SID', '英语', '$ ENT1', '$ ENT2', '$ ent3',“$ ent4 ','$ enexm','$ ot_en','$ gradesAlongTheWay ['En'] ['grade']','Poor')“; if(mysqli_query($ conn,$ sql1)){ echo“Values Inserted”; } else { echo“Failed”.mysqli_error($ conn); }' – 4Jean

+0

尝试插入数据库时​​出现错误''grades gradesAlongTheWay ['En'] ['grade']' – 4Jean

+0

它是否符合该条件?否则,该索引不会被设置。 – Ohgodwhy