2

抱歉没有说明我的问题。其实我想更新我在数据库中的数据。但现在的问题是即使我尝试选择批准或拒绝 ajax 仍然不会更新。我是 ajax 新手并尝试在网络上搜索,但我的代码仍然有问题

这是我的 php 页面

<?php
          $querysel = "SELECT * FROM tblinternapplication WHERE course_code = '{$course_codeapp}' ORDER BY student_id, 1 DESC " ;
      $resultsel = mysql_query($querysel, $connection);

      echo "<h2><div class=\"h_title\">Status still in pending</div></h2>";  
      echo "<table>";
      echo "<thead>";
      echo "<tr>";
      echo "<th scope=\"col\">Matric ID</th>";
      echo "<th scope=\"col\">Company name</th>";
      echo "<th scope=\"col\" width = \"200\">Job Scope</th>";
      echo "<th scope=\"col\">Status</th>";
      echo "<th scope=\"col\">Action</th>";
      echo "</tr>";
      echo "</thead>";

          while($rowsel = mysql_fetch_array($resultsel)){
                    if($rowsel['status_approval'] == NULL){
            $id = $rowsel['id'];
                    echo "<tr>";
                    echo "<tr>"."<td class=\"align-center\">".$rowsel['student_id']."</td>";
                    echo "<td class=\"align-center\">".$rowsel['company_name']."</td>";
                    echo "<td class=\"align-center\" width = \"200\">".$rowsel['job_scope']."</td>";
        echo "<td class=\"align-center\">";
                    if($rowsel['status_approval'] != NULL){
                        if( $rowsel['status_approval'] == 0)
            {
               echo "Reject";
            }
            else
            {
               echo "Approve";
            }
                        }
                    else
                    {   echo "Pending";
                        }
                    echo "</td>";
        echo "<td class=\"align-center\"><select name=\"approve\" 
         onchange=\"getstatus(this.value)\">";
            echo "<option value=\"\">Select status:</option>";
            echo "<option value=\"1\">Approve</option>";
            echo "<option value=\"0\">Reject</option>";
        echo "</select>";
        echo "</td>";
                    echo "</tr>";

                    }
      }
      echo "</table>";

这是我的 jscript 页面

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript"> 
function getstatus(id, approve)
{
if (approve=="")
{
} 
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

xmlhttp.open("GET","updatestatus.php?id=" + id + "&status=" + approve,true);
xmlhttp.send();
}

</script>

那么这是我的updatestatus.php

<?php require_once("../includes/session.php"); ?>
<?php require_once("sessioncourse.php"); ?>
<?php $course_codeapp = $_SESSION['course_code'] ; ?>
<?php confirm_logged_in(); ?>
<?php require_once("../includes/connection.php") ?>
<?php require_once("../includes/functions.php") ?>

<?php

$id = $_GET['id'];
$status =$_GET['status'];

$sql="UPDATE tblinternapplication set status_approval  = $status WHERE id = $id ";

$result = mysql_query($sql);
?>

我工作了几天,但问题仍然无法解决。希望可以有人帮帮我。我会感谢你的帮助!

4

3 回答 3

1

对于 php 中 JS 的 preapre 结果,请使用 json_encode() 函数。使您的更新脚本如下所示:

<?php require_once("../includes/session.php"); 
require_once("sessioncourse.php"); 
$course_codeapp = $_SESSION['course_code'] ; 
confirm_logged_in(); 
require_once("../includes/connection.php"); 
require_once("../includes/functions.php"); 

$id = $_GET['id'];
$status =$_GET['status'];

$sql="UPDATE tblinternapplication set status_approval  = $status WHERE id = $id ";

$result = mysql_query($sql);

$json = array();

while ($row = mysql_fetch_assoc($result)) {
    $json[] = $row;
}

echo json_encode($json);

重要的

不要关闭 php 标签,否则您可能会添加额外的空格字符

AJAX

在您的情况下,使用 jQuery ajax 是很好的做法。Mkae 你的代码是这样的:

<script type="text/javascript">
    function getstatus(id, approve)
    {
        $.ajax({
            'url': 'updatestatus.php',
            'data': {"id": id, "status": approve},
            'success': function (response) {
                console.log(response);
                //TODO: use server response
            }
        });
    }

</script>
于 2013-05-07T16:26:59.203 回答
0
echo "<td class=\"align-center\"><select name=\"approve\" 
         onchange=\"getstatus(this.value)\">";

在上面的那一行中,您只传递了一个值。同时你的 JS 函数等待 2 个参数。目前,您id始终等于 0 或 1,并且状态始终未定义。假设您只需要更改该行,例如:

echo "<td class=\"align-center\"><select name=\"approve\" 
         onchange=\"getstatus("+ $id +", this.value)\">";

一注:

$sql="UPDATE tblinternapplication set status_approval  = $status WHERE id = $id ";

除了你不应该再使用 mysql_* 函数之外,上面的代码是开放给 sql 注入的。为避免使用 mysql_ 扩展名进行 sql 注入,您应该执行以下操作:

 $sql="UPDATE tblinternapplication set status_approval  = ".mysql_real_escape_string($status) ." WHERE id = " .mysql_real_escape_string($id);

请参阅mysql_real_escape_string 此处的文档。此外,阅读该页面上的警告消息 - 它告诉您应该使用什么来代替 mysql 扩展

于 2013-05-07T16:26:17.290 回答
0

我建议使用 IE 或 chrome 中的 F12 等开发人员工具或 fiddler 来检查您发送到 PHP 代码的请求。如果您遇到任何错误,您可以在响应中轻松看到

于 2013-05-07T16:33:18.880 回答