在下面的代码中,我有两种类型的验证。我使用 javascript 验证,当用户在课程文本输入中没有输入任何内容时,它会显示错误消息。
然后我有一个php验证,如果它不包含查询结果的行,该查询检查用户在课程文本输入中输入的课程中是否有任何评估,然后它会显示一条消息,说明没有找到评估。
我遇到的问题是,如果用户没有在“课程”文本输入中输入任何内容并且他们单击提交按钮,它会同时显示 javascript 验证和 php 验证。
这是不正确的,应该发生的是:
如果用户在课程文本输入中没有写任何东西,那么它应该只显示 javascript 验证而不是 php 验证。
- 如果用户在课程文本输入中写了一些东西并提交了表单,但是它无法从查询中找到任何结果,那么它应该只显示 php 验证。
 
我的问题是我需要在代码中进行哪些更改才能不能同时显示两个验证消息,并且在应该显示正确的验证消息时只显示它们?
换句话说,如果 javascript 验证失败,我如何阻止表单提交?然后很明显我如何确保如果javascript验证成功,那么它确实提交了表单。
Javascript
function validation() {
    var isDataValid = true;
    var courseTextO = document.getElementById("coursesDrop");
    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 .= '<input type="text" name="courses" id="coursesDrop" />' . PHP_EOL; 
?>
<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 "";
    }
    ...
}
?>