2016-03-26 7 views
0

$グレードと$備考は常に$ totalの最後の値(つまりwhere($ check_ss == "Ss"))で評価されますが、ifのすべてのインスタンスで値を取得したい条件。どのように私は Egが第一の条件で行うのですか、それはグレードと発言同じの値を取得し、その後の状況について またはステートメントスイッチステートメントの設定でヘルプが必要

//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文を含めるhavetoありません成績と発言データを保持する配列。このような何か:

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 =「' records'のVALUES(NULL、 '$のSID'。INSERT INTO、 '英語'、 '$ ENT1'、 '$ ENT2'、 '$ ENT3'、「$ ENT4 '、' $ enexm '、' $ ot_en '、$ gradesAlongTheWay [' En '] [' grade '] '、' Poor ')"; if(mysqli_query($ conn、$ sql1)){ エコー "値が挿入されました"; } else { echo "失敗" .mysqli_error($ conn); } ' – 4Jean

+0

' $ gradesAlongTheWay ['En'] ['grade'] ' – 4Jean

+0

に条件を一致させましたか?それ以外の場合、そのインデックスは設定されません。 – Ohgodwhy

関連する問題