-4

我在让表单验证正常工作时遇到了一些麻烦。我正在使用 PHP,我认为这与我使用 $_POST 访问表单的方式有关。我正在使用该操作并将其附加到单独的页面。

HTML

<html>
<head>

<title>Grade Calculator</title>
</head>
<body>

<form name="myForm" method="post" id="myForm" action="processForm.php" >
<table width="400" border="1" cellspacing="4" cellpadding="4">
<tbody><tr>
  <td>Assignments:</td>
  <td><input type="text" name="assGrade" id="assGrade" value="0" /></td>
</tr>
<tr>
  <td>Mid Term: </td>
  <td><input type="text" name="midGrade" id="midGrade" value="0" /></td>
</tr>
<tr>
  <td>Final: </td>
  <td><input type="text" name="finGrade" id="finGrade" value="0" /></td>
</tr>
<tr>
    <td colspan="2" align="center"><input type="submit" name="btnSubmit" id="btnSubmit" value="Calculate" /></td>
</tr>
</tbody>
</table>
</form>
</body>
</html>

php`

 <?php
    $assGrade = $_POST[document.myForm.assGrade.value];
    $midGrade = $_POST[document.myForm.midGrade.value];
    $finGrade = $_POST[document.myForm.finGrade.value];

    $avg = ($assGrade + $midGrade + $finGrade) / 3;

    $grade = '';

    switch($avg){
        case($avg >=90):
            $grade = 'A';
            break;
        case($avg >=80):
            $grade ='B';
            break;
        case($avg >=70):
            $grade ='C';
            break;
        case($avg >=60):
            $grade ='D';
            break;
        default;
            $grade ='F';
    };
    echo "Your average is ".$avg.'<br/>';
    echo "Your letter Grade is " .$grade;
?>
4

5 回答 5

2

以下

$assGrade = $_POST[document.myForm.assGrade.value];
$midGrade = $_POST[document.myForm.midGrade.value];
$finGrade = $_POST[document.myForm.finGrade.value];

应该改为:

$assGrade = $_POST['assGrade'];
$midGrade = $_POST['midGrade'];
$finGrade = $_POST['finGrade'];
于 2013-04-02T22:50:18.553 回答
2

你有几个问题。该数组与HTML字段$_POST中的属性直接相关。此外,switch 语句并不意味着以您使用它的方式使用。使用 if/elseif/else:nameinput

 <?php
    $assGrade = $_POST['assGrade'];
    $midGrade = $_POST['midGrade'];
    $finGrade = $_POST['finGrade'];

    $avg = ($assGrade + $midGrade + $finGrade) / 3;

    $grade = '';

    if ($avg >= 90) {
        $grade = 'A';
    }
    elseif ($avg >= 80) {
        $grade = 'B';
    }
    elseif ($avg >= 70) {
        $grade = 'C';
    }
    elseif ($avg >= 60) {
        $grade = 'D';
    }
    else {
        $grade = 'F';
    }

    echo "Your average is ".$avg.'<br/>';
    echo "Your letter Grade is " .$grade;
?>

从技术上讲,您的 switch 语句可能有效,但它有点讨厌和不直观。假设您的$avgis 85($avg >= 90)将返回false,将其与$avg(85) 进行比较将导致以下条件(false == true)返回 false。您的开关的第二部分将是($avg >= 80)which would be true,并将其与$avgwould cause进行比较(true == true)

所以从技术上讲,你的 switch 语句可以工作,但它需要一些奇怪的转换并且可能难以理解。如果您需要 switch 语句,我会做switch(true)并将其与case您的 's 进行比较。

我建议只坚持使用switch语句进行非常基本的一对多比较,并使用if语句进行其他所有比较。

于 2013-04-02T22:51:08.253 回答
1

替换此块:

$assGrade = $_POST[document.myForm.assGrade.value];
$midGrade = $_POST[document.myForm.midGrade.value];
$finGrade = $_POST[document.myForm.finGrade.value];

和:

$assGrade = $_POST["assGrade"];
$midGrade = $_POST["midGrade"];
$finGrade = $_POST["finGrade"];

并阅读:http ://www.w3schools.com/php/php_post.asp

于 2013-04-02T22:51:35.960 回答
0

您无权访问 PHP 中的 DOM。您可以像$_POST['assGrade'];使用参数名称一样访问 $_POST 变量。

于 2013-04-02T22:50:30.190 回答
0

尝试这个

$assGrade = 0;
$midGrade = 0;
$finGrade =0


  if isset($_POST['assGrade'])
  $assGrade = $_POST['assGrade'];
  if isset($_POST['midGrade'])
  $midGrade = $_POST['midGrade'];
  if isset($_POST['finGrade'])
  $finGrade = $_POST['finGrade'];

而不是你的屁股!

$assGrade = $_POST[document.myForm.assGrade.value];
$midGrade = $_POST[document.myForm.midGrade.value];
$finGrade = $_POST[document.myForm.finGrade.value];
于 2013-04-02T22:51:56.440 回答