0

ユーザーが必要に応じてより多くのフィールドを入力できる GPA 計算機を作成しようとしています。すべてのフィールドに「grades[]」、すべてのフィールドに「units[]」という名前を付けました。データが送信されると、php ファイルは各フィールドをスキャンし、データを $GradeArray および $UnitsArray という名前の変数に入力し、これら 2 つの変数で必要なすべての計算を行います。

電卓が正常に動作するようになりましたが、バグがないかどうかをテストしました。フィールドをスキップして次のフィールドにデータを入力すると、結果は 0 または間違った答えになります。

これは、何がうまくいかないかの写真です。

ここに画像の説明を入力

しかし、フィールドを順番に入力すると、フィールドを欠落することなく、答えが正しく出てきます..

foreach() ステートメントに問題があると推測しています。とにかくここにコードがあります...あなたが助けてくれることを願っています!

追加の入力フィールドを動的に追加するJquery(読みやすくするために空白を追加しました):

$('#add').click(function() {
$('<div>
    <select  name = "grades[]">
        <option value = "0"> SELECT </option>
        <option value = "A"> A</option>
        <option value = "AMINUS"> A- </option>
        <option value = "BPLUS"> B+ </option>
        <option value = "B"> B </option> 
        <option value = "BMINUS"> B- </option> 
        <option value = "CPLUS"> C+ </option>
        <option value = "C"> C </option> 
        <option value = "CMINUS"> C- </option> 
        <option value = "DPLUS"> D+ </option> 
        <option value ="D"> D </option> 
        <option value = "DMINUS"> D-</option>
        <option value = "F"> F </option> 
   </select> <input name = "units[]"  />
 </div>  ').fadeIn('slow').appendTo('.inputs');
i++;
});

HTML:

<form method = "post" action = "process.php" name = "myform" id = "myform">
            <div class = "inputs">
                <select name = "grades[]">
                    <div><option value = "0"> SELECT </option></div>
                    <div><option value = "A" > A </option></div>
                    <div><option value = "AMINUS"> A-</option></div>
                    <div><option value = "BPLUS" > B+ </option></div>
                    <div><option value = "B"> B </option></div>
                    <div><option value = "BMINUS" > B- </option></div>
                    <div><option value = "CPLUS"> C+ </option></div>
                    <div><option value = "C" > C </option></div>
                    <div><option value = "CMINUS"> C- </option></div>
                    <div><option value = "DPLUS" > D+ </option></div>
                    <div><option value = "D"> D </option></div>
                    <div><option value = "DMINUS" > D- </option></div>
                    <div><option value = "F"> F </option> </div>
                </select>
                <input name = "units[]" type = "text"/>
                <br>
                <select name = "grades[]">
                    <div><option value = "0"> SELECT </option></div>
                    <div><option value = "A" > A </option></div>
                    <div><option value = "AMINUS"> A-</option></div>
                    <div><option value = "BPLUS" > B+ </option></div>
                    <div><option value = "B"> B </option></div>
                    <div><option value = "BMINUS" > B- </option></div>
                    <div><option value = "CPLUS"> C+ </option></div>
                    <div><option value = "C" > C </option></div>
                    <div><option value = "CMINUS"> C- </option></div>
                    <div><option value = "DPLUS" > D+ </option></div>
                    <div><option value = "D"> D </option></div>
                    <div><option value = "DMINUS" > D- </option></div>
                    <div><option value = "F"> F </option> </div>
                </select>
                <input name = "units[]" type = "text" />
                <br>
                <select name = "grades[]">
                    <div><option value = "0"> SELECT </option></div>
                    <div><option value = "A" > A </option></div>
                    <div><option value = "AMINUS"> A-</option></div>
                    <div><option value = "BPLUS" > B+ </option></div>
                    <div><option value = "B"> B </option></div>
                    <div><option value = "BMINUS" > B- </option></div>
                    <div><option value = "CPLUS"> C+ </option></div>
                    <div><option value = "C" > C </option></div>
                    <div><option value = "CMINUS"> C- </option></div>
                    <div><option value = "DPLUS" > D+ </option></div>
                    <div><option value = "D"> D </option></div>
                    <div><option value = "DMINUS" > D- </option></div>
                    <div><option value = "F"> F </option> </div>
                </select>
                <input name = "units[]" type = "text" />
                <br>
                <select name = "grades[]">
                    <div><option value = "0"> SELECT </option></div>
                    <div><option value = "A" > A </option></div>
                    <div><option value = "AMINUS"> A-</option></div>
                    <div><option value = "BPLUS" > B+ </option></div>
                    <div><option value = "B"> B </option></div>
                    <div><option value = "BMINUS" > B- </option></div>
                    <div><option value = "CPLUS"> C+ </option></div>
                    <div><option value = "C" > C </option></div>
                    <div><option value = "CMINUS"> C- </option></div>
                    <div><option value = "DPLUS" > D+ </option></div>
                    <div><option value = "D"> D </option></div>
                    <div><option value = "DMINUS" > D- </option></div>
                    <div><option value = "F"> F </option> </div>
                </select>
                <input name = "units[]" type = "text"/>

            </div>


                <input type = "submit" value = 'Submit' id = "Submit" style = "font-family:'HelveticaNeue-Light', 'Helvetica Neue Light', 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; width: 80px;background-color: #c5Da37; border: none; color: white;"/>
                <input type ="reset" style = "background-color: #0499ff; width: 90px; color: white;">
   </form>

PHP:

//ARRAYS
$GradeArray = array();
$UnitArray = array();
$GradePoints = array();


//INPUT GRADES (NUMERICAL) INTO GRADE ARRAY
foreach($_POST['grades'] as $grades)
{

    if ($grades == "A"){
        $GradeArray[] = 4.0;
    }
    else if ($grades == "AMINUS"){
        $GradeArray[] = 3.7;
    }
    else if ($grades == "BPLUS"){
        $GradeArray[] = 3.3;
    }
    else if ($grades == "B"){
        $GradeArray[] = 3.0;
    }
    else if ($grades == "BMINUS"){
        $GradeArray[] = 2.7;
    }
    else if ($grades == "CPLUS"){
        $GradeArray[] = 2.3;
    }
    else if ($grades == "C"){
        $GradeArray[] = 3.0;
    }
    else if ($grades == "CMINUS"){
        $GradeArray[] = 2.7;
    }
    else if ($grades == "DPLUS"){
        $GradeArray[] = 2.3;
    }
    else if ($grades == "D"){
        $GradeArray[] = 2.0;
    }
    else if ($grades == "DMINUS"){
        $GradeArray[] = 1.7;
    }
    else if ($grades == "F"){
        $GradeArray[] = 0;
    }
}

//INSERT VALUES FROM UNITS INTO UNITS ARRAY
foreach($_POST['units'] as $units)
{
    if ($units == NULL)
    {
        $UnitArray[] = 0;
    }

    $UnitArray[] = $units;
}

//CALCULATE GP
for ($i = 0; $i <= count($GradeArray); $i++)
{
    $GradePoints[$i] = $GradeArray[$i] * $UnitArray[$i];
}



//SUM UP GRADE POINTS
$sumGradePoints= 0; 
for($i = 0; $i != count($GradeArray); $i++)
{
    $currentItem = $GradePoints[$i];

    $sum = $sumGradePoints+$currentItem;

    $sumGradePoints = $sum;
}

//SUM UP CREDIT HOURS
$sumUnitPoints = 0;
for ($i = 0; $i <= count($UnitArray); $i++)
{
    $currentItem = $UnitArray[$i];

    $sum = $sumUnitPoints+$currentItem;

    $sumUnitPoints = $sum;
}

$result = $sumGradePoints/$sumUnitPoints;

echo $result;



?>
4

0 に答える 0