PHP AJAX更新无效

时间:2015-10-28 16:48:50

标签: php jquery ajax database sql-update

理念

  1. 用户将从下拉列表中选择检查日期,该列表中填充了数据库中的数据。
  2. 选择日期后,系统将根据所选日期显示审查员列表。
  3. 用户现在可以为每个学生编码成绩。
  4. 对成绩进行编码后,用户将点击“保存”。系统将保存到数据库的按钮。 (多次更新)
  5. 这是用户选择考试日期的代码。

    <?php
    include '../configuration.php';
    
    $queryselect = mysql_query("SELECT examdateno, examdate from tbl_examdate ORDER BY examdate DESC");
    ?>
    <!DOCTYPE html>
    
     <html>
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>SPORT Qualifying Exam System</title>
        <link rel="stylesheet" type="text/css" href="../css/style.css">
        <link rel="stylesheet" type="text/css" href="../css/component.css" />
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>         
        <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
        <script src="//code.jquery.com/jquery-1.10.2.js"></script>
    
        <script>
            function showUser(str) {
                if (str == "") {
                    document.getElementById("txtHint").innerHTML = "";
                    return;
                } else {
                    if (window.XMLHttpRequest) {
                        // code for IE7+, Firefox, Chrome, Opera, Safari
                        xmlhttp = new XMLHttpRequest();
                    } else {
                        // code for IE6, IE5
                        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
                    }
                    xmlhttp.onreadystatechange = function () {
                        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                            document.getElementById("txtHint").innerHTML = xmlhttp.responseText;
                        }
                    }                    
                    xmlhttp.open("GET", "encodeinterviewajax.php?q=" + str, true);
                    xmlhttp.send();
    
                }
            }
        </script>
    </head>
    <body>
        <header>
            <img src="../images/qes_logob.png" alt="logo">
            <button class="hamburger">&#9776;</button>
            <button class="cross">&#735;</button>
        </header>
        <div class="menu">
            <ul>
                <a href="encodeinterview.php">
                    <li>Encode Grades</li>
                </a> 
                <a href="viewinterview.php">
                    <li>View Grades</li>
                </a>               
                <a href="../index.php">
                    <li>Logout</li>
                </a>  
            </ul>
        </div>
    
    
        <script>
            $(".cross").hide();
            $(".menu").hide();
            $(".hamburger").click(function () {
                $(".menu").slideToggle("slow", function () {
                    $(".hamburger").hide();
                    $(".cross").show();
                });
            });
    
            $(".cross").click(function () {
                $(".menu").slideToggle("slow", function () {
                    $(".cross").hide();
                    $(".hamburger").show();
                });
            });
        </script>
    
        <div id="content">
            <form>
                    <h1>Exam Dates</>
                       <select name="examdate" id="examDate" onchange="showUser(this.value)">
                            <option>Select Exam Date</option>
                            <?php
                             while ($row = mysql_fetch_array($queryselect)) {
                                echo "<option value={$row['examdateno']}>{$row['examdate']}</option>\n";
                            }
                            ?>
                        </select>
                </form>
            </div>
                <div id="txtHint">Examinees will be listed here</div>
    
    
    </body>
    </html>
    

    这是显示和更新的地方。

    <?php
    include '../configuration.php';
    ?>
    <!DOCTYPE html>
    
    <html>
    <head>
    <link rel="stylesheet" type="text/css" href="../css/component.css" />
    <link rel="stylesheet" type="text/css" href="../css/style.css">
    <link rel="stylesheet" type="text/css" href="../css/grid.css">
    </head>
    <body>
    
    <?php
    $q = intval($_GET['q']);
    
    
    $sql = mysql_query("select s.sno, s.fname, s.lname, s.examdate, s.interviewgrade, s.gwa from student s inner join tbl_examdate e on s.examdate=e.examdate where e.examdateno=$q");
    
    
    ?>
    <div class="as_wrapper">    
        <div class="as_grid_container">
            <div class="as_gridder" id="as_gridder"></div> <!-- GRID LOADER -->
            <form method="post" action="">
                <table class="as_gridder_table">
                    <tr class="grid_header">
                        <td><div class="grid_heading">Student No.</div></td>
                        <td><div class="grid_heading">First Name</div></td>
                        <td><div class="grid_heading">Last Name</div></td>
                        <td><div class="grid_heading">Exam Date</div></td>
                        <td><div class="grid_heading">Interview Grade</div></td>
                        <td><div class="grid_heading">GWA</div></td>
                    </tr>
    
                    <?php
                    while ($row = mysql_fetch_array($sql)) {
                        ?>
                        <tr class="<?php
                        $i+=1;
                        if ($i % 2 == 0) {
                            echo 'even';
                        } else {
                            echo 'odd';
                        }
                        ?>">
                            <td><?php $sno[]=$row['sno'];echo $row['sno']; ?></td>
                            <td><?php $fname[]=$row['fname']; echo $row['fname']; ?></td>
                            <td><?php $lname[]=$row['lname'];echo $row['lname']; ?></td>
                            <td><?php echo $row['examdate']; ?></td>
                            <td><input type="text" size="3" maxlength="3" name="interview[]"></td>
                            <td><input type="text" size="3" maxlength="3" name="gwa[]"></td>
                        </tr>
                        <?php
                    }
                    ?>
                    <tr>
                        <td colspan="6"><button id="btnUpdate">Save</button>
                    </tr>
                </table>
            </form>
            <?php
    
            if (isset($_POST['btnUpdate'])){
                for($i=0;$i<sizeof($sno);$i++){
                    $interview = $_POST['interview'][$i];
                    $gwa = $_POST['gwa'][$i];
                    $sql1=  mysql_query("UPDATE student SET gwa='$gwa', interviewgrade='$interview' where fname='$fname[$i]' AND lname='$lname[$i]' ");
                    header('Location: encodeinterview.php');
                }
            }           
            ?>
        </div>
    </div>
    </body>
    

1 个答案:

答案 0 :(得分:0)

正如我在评论中提到的那样,我不确定究竟什么不适合你,但我可以帮助你做一些我猜想做你的家庭作业的事情。

首先,始终包装所有影响DOM元素的jQuery操作,或者将eventListeners添加到document.ready函数中的DOM元素。当页面的所有HTML都已加载到DOM时,将触发此函数。添加事件监听器或尝试&#34; .hide()&#34;和元素加载到DOM之前将失败。调用document.ready函数有很长的路要走:

$(document).ready(function(){
    .... Code to manipulate the DOM goes here ...
});

和简写函数调用完全相同:

$(function(){
    .... Code to manipulate the DOM goes here ...
});

如果您需要等到加载所有其他资源(例如图片),您可以使用:

$(window).load(function(){
    .... Your code goes here ....
});

加载所有资源时会触发此功能。因此,如果您希望获得包含图像的元素或元素大小的位置,则最好等到图像加载完毕。否则,一旦加载图像,位置或大小可能会改变。

所以你的jQuery块需要像这样包装:

 <script>
    $(function(){
        $(".cross").hide();
        $(".menu").hide();
        $(".hamburger").click(function () {
            $(".menu").slideToggle("slow", function () {
                $(".hamburger").hide();
                $(".cross").show();
            });
        });

        $(".cross").click(function () {
            $(".menu").slideToggle("slow", function () {
                $(".cross").hide();
                $(".hamburger").show();
            });
        });
    });
</script>

为了善良,如果您使用jQuery NEVER键入&#39; document.getElementById&#39;。 jQuery等价物是$(&#39; #id&#39;)。请注意&#39;#&#39;是指&#39;。&#39;是指CLASS。它更短,它创建了一个jQuery对象元素,允许你使用jQuery的所有奇妙功能。

如果您还在使用jQuery。你应该将它用于AJAX。它更容易。这是使用jQuery完成的相同showUser函数,包括对ajax调用的错误处理:

function showUser(str) {
        if (str == "") {
            $("#txtHint").html("");
            return;
        } else {
            $.ajax({
                url: "encodeinterviewajax.php?q=" + str,
                type: 'GET',
                success: function(data){
                            $('#txtHint').html(data);
                         },
                error: function(jqXHR, textStatus, errorThrown){
                            console.log("Status = " + textStatus);
                            console.log("Error = " + errorThrown);
                         }
                });
        }