-1

这是在一次提交中提交多个等级的代码
这是用于验证的 javascript 代码

function validateForm() {
    var x='<?php echo ($grade);?>';

    if (x>100) {
        alert("Invalid Data Entry");
        return false;
    }

它没有在第三次回显中访问变量等级

<form name="form1" method="post" action="insertgradeac.php"onsubmit="return validateForm()" method="post">

<?php
    $con = mysql_connect($server, $username, $password);
    mysql_select_db($database);

    $query_fetch5 = "SELECT ass_class FROM assess WHERE ass_ID LIKE '$id'";
    $result_fetch5 = mysql_query($query_fetch5);
    $row5 = mysql_fetch_row($result_fetch5);
    $row5_0 = $row5[0];

    $query_fetch = "SELECT st_ID, st_name FROM student WHERE class_ID LIKE '$row5_0'";
    $result_fetch = mysql_query($query_fetch);

    while ($row = mysql_fetch_row($result_fetch)) {
        echo "<tr>\n";

        echo "<td>$row[0]<input type=\"hidden\" name=\"stt_ID[]\" value=\"$row[0]\" /></td>\n";
        echo "<td>$row[1]<input type=\"hidden\" name=\"student[]\" value=\"$row[1]\" /></td>\n";
        echo "<td><input type=\"text\" name=\"grade[]\" /></td>\n";
        echo "</tr>\n";
    }


    mysql_close($con);
?>
4

2 回答 2

1

该 JS 函数将在浏览器中运行,但它正在尝试访问一个 PHP 变量,该变量在表单提交到 Web 服务器之前不会设置。

试试这个:

function validateForm()
{
  var grades = document.getElementsByName("grade[]");
  for (var i = 0; i < grades.length; i++) {
     if (Number(grades[i].value) > 100) {
        alert("Grades cannot be more than 100.");
        return false;
     }
  }
  return true;
}

我已经使用该getElementsByName()方法获取所有grades[]元素的列表,然后循环遍历它们测试它们的值并在值不好时显示警报。

你实际上并没有说你是如何调用validateForm()的,但我假设你是从表单的提交事件中这样做的。

请注意,您还应该添加一些代码以确认输入的值实际上是一个数字,并且您需要在服务器端 PHP 代码中进行相同的验证,以防用户关闭 JS(或使用浏览器开发工具绕过您的验证)。

于 2013-05-20T11:27:47.157 回答
0

在第一个块中,我注意到:

您将 x 设置为字符串...然后将其作为数字/整数进行比较。设置 x 时删除撇号。

在第二个块中,我注意到您在查询中使用 $id 而没有首先设置(和清理)它。

于 2013-05-20T11:26:04.933 回答