2016-09-20 140 views
-1

我正在将记录细节加载到允许用户编辑的模式中。我试图实现的是让用户更新模式中的记录,然后通过AJAX/jQuery提交给MySQL表,但是,在按下“保存更改”按钮后,什么都不会发生。我检查了JS Query并确认该按钮已正确链接,并在直接寻址PHP更新脚本时设法更新数据库。不知道为什么脚本拒绝启动jquery + AJAX - 通过Modal更新MySQL记录

模态:

<div id="output"></div> 

<!-- Modal MYMODAL --> 
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> 
    <div class="modal-dialog" role="document"> 
    <div class="modal-content"> 
     <div class="modal-header"> 
     <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> 
     <h4 class="modal-title" id="myModalLabel">Edit Record</h4> 
     </div> 
     <div class="modal-body"> 

     <!-- ID No. --> 
     <div class="form-group"> 
      <label>ID No.:</label> 
      <input type="number" class="form-control" id="dataPID" name="dataPID" size="5" disabled /> 
     </div> 
     <!-- /.id number -->           

     <!-- Category --> 
     <div class="form-group"> 
      <label>Category:</label> 
      <input type="text" class="form-control" id="dataCat" name="dataCat" /> 
     </div> 
     <!-- /.category --> 

     <!-- Issue --> 
     <div class="form-group"> 
      <label>Issue:</label> 
      <input type="text" class="form-control" id="dataIssue" name="dataIssue" /> 
     </div> 
     <!-- /.issue --> 

     <!-- Department Responsible --> 
     <div class="form-group"> 
      <label>Department Responsible:</label> 
      <input type="text" class="form-control" id="dataDeptResp" name="dataDeptResp" /> 
     </div> 
     <!-- /.department responsible --> 

     <!-- Experience --> 
     <div class="form-group"> 
      <label>Experience:</label> 
      <input type="text" class="form-control" id="dataExp" name="dataExp" /> 
     </div> 
     <!-- /.experience --> 

     <!-- textarea --> 
     <div class="form-group"> 
      <label>Description:</label> 
      <textarea class="form-control" id="dataDesc" name="dataDesc" rows="3" ></textarea> 
     </div> 

     </div> 
     <div class="modal-footer"> 
     <button type="button" id="SaveChanges" name="SaveChanges" class="btn btn-primary">Save Changes</button> 
     <button type="button" id="DeleteRecord" name="DeleteRecord" class="btn btn-danger">Delete Record</button> 
     <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
     </div> 
    </div> 
    </div> 
</div> 
<!-- /.Modal MYMODAL --> 

的Javascript:

$("#SaveChanges").click(function() { 
    $.ajax({ 
     type: "POST", 
     url: "plugins/MySQL/ajax_action.php", 
     data: { action:"update_mysqli",PID:$("#dataPID").val(), Category:$("#dataCat").val(), Issue:$("#dataIssue").val(), Department_Responsible:$("#dataDeptResp").val(), Experience:$("#dataExp").val(), Description:$("#dataDesc").val()}, //your form data to post goes here as a json object 
     dataType: "json", 
     contentType:"text",          

     success: function(data) { 
      $('#output').html(data); 
      drawVisualization(); 
     }, 
    }); 
}); 

ajax_action.php

<?php 

error_reporting(E_ALL); 
ini_set('display_errors', 1); 

if(isset($_POST['action']) && ($_POST['action']=='update_mysqli')) { 

    // include connection details 
    include 'connect_db.php'; 

    //Open a new connection to the MySQL server 
    $db = new mysqli($dbhost,$dbuser,$dbpass,$dbname); 

    //Output any connection error 
    if ($db->connect_error) { 
     die('Error : ('. $db->connect_errno .') '. $db->connect_error); 
    } 

    // get variables and sanitize 
    $pid = mysqli_real_escape_string($db,$_POST['PID']); 
    $cat = mysqli_real_escape_string($db,$_POST['Category']); 
    $issue = mysqli_real_escape_string($db,$_POST['Issue']); 
    $dept_resp = mysqli_real_escape_string($db,$_POST['Department_Responsible']); 
    $exp = mysqli_real_escape_string($db,$_POST['Experience']); 
    $desc = mysqli_real_escape_string($db,$_POST['Description']); 

    // check if record exists based on ID number  
    $result = $db->query("SELECT * FROM qci_problems_index_new WHERE PID='".$pid."'"); 

    // if record is found, update accordingly 
    if ($result->num_rows > 0){ 

     $sql = "UPDATE qci_problems_index_new SET Category = '$cat', Issue = '$issue', Department_Responsible = '$dept_resp', Experience = '$exp', Description = '$desc' WHERE PID = '$pid'"; 

     if (!$db->query($sql)) { 
     echo "Error - Update of record PID " . $pid . " failed: (" . $db->errno . ") " . $db->error; 
     } 
    } else { 
     // if no record with relevant PID is found, create new record 
     $sql = "INSERT INTO `qci_problems_index_new`(`PID`, `Category`, `Issue`, `Department_Responsible`, `Experience`, `Description`) VALUES ('".$pid."', '".$cat."', '".$issue."', '".$dept_resp."', '".$exp."', '".$desc."')"; 

     if (!$db->query($sql)) { 
     echo "Error - could not insert new record: (" . $db->errno . ") " . $db->error; 
     } 

    } 

    echo "Success, record updated successfully"; 

    //close connection 
    $db->close(); 

} 

编辑1: 铬控制台说以下内容: XHR2 error

编辑2: 更新的代码

+0

您是否检查了控制台的错误?检查了PHP错误日志中的错误?检查网络选项卡以查看是否已经发出实际呼叫,并且如果有,实际响应是什么? –

+0

Btw ..你打开[SQL Injections](http://php.net/manual/en/security.database.sql-injection.php),并且应该使用[Prepared Statements](http:// php。 net/manual/en/mysqli.quickstart.prepared-statements.php)而不是串联你的查询。 'mysqli_real_escape_string()'不像人们想象的那么安全...... –

+0

我没有检查,我的日志没有显示任何东西。该请求会通过并直接寻址PHP脚本时起作用。 – Armitage2k

回答

1

更改您的数据类型为JSON和内容类型为文本,你的GET变量添加到POST请求

$("#SaveChanges").click(function() { 
    $.ajax({ 
     type: "POST", 
     url: "plugins/MySQL/ajax_action.php", 
     data: { action:"update_mysqli",PID:$("#dataPID").val(), Category:$("#dataCat").val(), Issue:$("#dataIssue").val(), Department_Responsible:$("#dataDeptResp").val(), Experience:$("#dataExp").val(), Description:$("#dataDesc").val()}, //your form data to post goes here as a json object 
     dataType: "json", 
     contentType:"text", 

     success: function(data) { 
      $('#output').html(data); 
      drawVisualization(); 
     }, 
    }); 
}); 

PHP

if(isset($_POST['action']) && ($_POST['action']=='update_mysqli')) { 
+0

我曾怀疑过,但即使进行了上述调整,它也不起作用。我删除了禁用的PID输入字段,因为我认为它可能会导致$ _POST的麻烦,但也没有结果。 – Armitage2k

+0

你从你的xhr请求中得到了什么状态代码? – madalinivascu

+0

这应该不重要。您可以发送一个查询字符串发布请求... –

0

您在“acti”中传递值“update_mysql”在“参数在ajax URL(插件/ MySQL/ajax_action.php? action = update_mysql)。在另一方面你在ajax_action.php情况只会被执行的代码,如果“action”参数的值是“update_mysqli

更改以下行

if(isset($_GET['action']) && ($_GET['action']=='update_mysqli')) 

if(isset($_GET['action']) && ($_GET['action']=='update_mysql')) 

在您的ajax_action.php文件中。

OR

或者,您也可以通过值update_mysqli,而不是update_mysql在Ajax调用你的行动参数。 由于您使用的是mysqli,因为您在代码中使用了mysqli函数,所以您会更喜欢这一点。