以下のコードでは、2種類の検証があります。ユーザーが[コース]ドロップダウンメニューからコースを選択しなかった場合のエラーメッセージを表示するJavaScript検証を使用します。
次に、php検証があり、クエリの結果の行が含まれていない場合は、評価が見つからないことを示すメッセージが表示されます。
私が抱えている問題は、ユーザーが[コース]ドロップダウンメニューからコースを選択せずに送信ボタンをクリックすると、javascript検証とphp検証の両方が表示されることです。
これは正しくありません。何が起こるかは次のとおりです。
ユーザーがコースを選択していない場合は、JavaScriptの検証のみを表示し、phpの検証は表示しないようにする必要があります。
- ユーザーがドロップダウンメニューからコースを選択してフォームを送信したが、クエリの結果が見つからない場合は、php検証が表示されます。
私の質問は、両方の検証メッセージを同時に表示せず、表示する必要があるときに正しい検証メッセージのみを表示できるようにするために、コードを何を変更する必要があるかということです。
Javascript
function validation() {
var isDataValid = true;
var courseTextO = document.getElementById("coursesDrop");
var moduleTextO = document.getElementById("modulesDrop");
var errModuleMsgO = document.getElementById("moduleAlert");
if (courseTextO.value == "") {
$('#targetdiv').hide();
$('#assessmentForm').hide();
$('#updateForm').hide();
$('#submitupdatebtn').hide();
errModuleMsgO.innerHTML = "Please Select a Course";
isDataValid = false;
} else {
errModuleMsgO.innerHTML = "";
}
return isDataValid;
}
PHP / HTML
<?php
// connect to the database
include('connect.php');
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
die();
}
$sql = "SELECT CourseId, CourseNo, CourseName FROM Course ORDER BY CourseId";
$sqlstmt=$mysqli->prepare($sql);
$sqlstmt->execute();
$sqlstmt->bind_result($dbCourseId, $dbCourseNo, $dbCourseName);
$courses = array(); // easier if you don't use generic names for data
$courseHTML = "";
$courseHTML .= '<select name="courses" id="coursesDrop">' . PHP_EOL;
$courseHTML .= '<option value="">Please Select</option>' . PHP_EOL;
$outputcourse = "";
while($sqlstmt->fetch())
{
$course = $dbCourseId;
$courseno = $dbCourseNo;
$coursename = $dbCourseName;
$courseHTML .= "<option value='" . $course . "'>" . $courseno . " - " . $coursename . "</option>" . PHP_EOL;
if (isset($_POST['courses']) && ($_POST['courses'] == $course)) {
$outputcourse = "<p><strong>Course:</strong> " . $courseno . " - " . $coursename . "</p>";
}
}
$courseHTML .= '</select>';
?>
<form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post" onsubmit="return validation();">
<table>
<tr>
<th>Course: <?php echo $courseHTML; ?></th>
</tr>
</table>
<p>
<input id="moduleSubmit" type="submit" value="Submit Course and Module" name="moduleSubmit" />
</p>
<div id="moduleAlert"></div>
<div id="targetdiv"></div>
</form>
<?php
if (isset($_POST['moduleSubmit'])) {
$sessionquery = "
SELECT SessionId, SessionName, SessionDate, SessionTime, CourseId, SessionActive
FROM Session
WHERE (CourseId = ? AND SessionActive = ?)
ORDER BY SessionName
";
$active = 1;
$sessionqrystmt=$mysqli->prepare($sessionquery);
// You only need to call bind_param once
$sessionqrystmt->bind_param("si",$course, $active);
// get result and assign variables (prefix with db)
$sessionqrystmt->execute();
$sessionqrystmt->bind_result($dbSessionId,$dbSessionName,$dbSessionDate,$dbSessionTime, $dbCourseId, $dbSessionActive);
$sessionqrystmt->store_result();
$sessionnum = $sessionqrystmt->num_rows();
if($sessionnum == 0) {
echo "<p><span style='color: red'>Sorry, You have No Assessments under this Module</span></p>";
}
else
{
echo "";
}
...
}
?>