-1

1 回の提出で複数の成績を提出するためのコードです。
これは検証用の JavaScript コードです。

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

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

3 番目のエコー ダウンで可変グレードにアクセスしていない

<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 関数はブラウザーで実行されますが、フォームが Web サーバーに送信されるまで設定されない PHP 変数にアクセスしようとしています。

代わりにこれを試してください:

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()、フォームの送信イベントからそうすると思います。

入力された値が実際に数値であることを確認するコードも追加する必要があることに注意してください。また、ユーザーが JS をオフにしている場合 (またはブラウザー開発ツールを使用してバイパスする場合) に備えて、サーバー側の PHP コードで同じ検証を行う必要があります。あなたの検証)。

于 2013-05-20T11:27:47.157 に答える
0

最初のブロックで、次のことに気付きました。

xを文字列として設定しています...そして後でそれを数値/整数として比較しています。x を設定するときは、アポストロフィを削除してください。

2 番目のブロックでは、最初に設定 (およびサニタイズ) せずにクエリで $id を使用していることに気付きました。

于 2013-05-20T11:26:04.933 に答える