2016-09-20 10 views
-1

レコードの詳細をモーダルに読み込んで編集できるようにしています。私が達成しようとしているのは、ユーザーにモーダルのレコードを更新させてから、AJAX/jQuery経由でMySQLテーブルにサブミットすることです。しかし、 "Save Changes"ボタンを押しても何も起こりません。私は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(); 
     }, 
    }); 
}); 

<?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(); 

} 

ajax_action.php EDIT 1:スクリプトは

モーダルを開始することを拒否理由はわからない クロームコンソールを次の言葉: XHR2 error

EDIT 2: 更新されたコードJSONに

+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

変更しますデータ型とテキストにコンテンツタイプ、ポスト要求

$("#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 requestからどのステータスコードを取得しましたか? – madalinivascu

+0

それは問題ではありません。投稿のリクエストにクエリ文字列を送ることができます... –

0
にあなたのGET変数を追加

"acti"の値 "update_mysql"を渡していますon "パラメータ(ajax URLのプラグイン/ MySQL/ajax_action.php? アクション= update_mysql)。 「アクション」パラメータの値が「update_mysqli

変更するには、次の行である一方ajax_action.phpでのあなたの状態は、コードのみを実行されます

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

if(isset($_GET['action']) && ($_GET['action']=='update_mysql')) 
ajax_action.phpファイルの

OR

また、あなたはAJAX呼び出しであなたのアクションパラメータの update_mysql値update_mysqliの代わりを渡すことができます。 mysqliを使用しているので、コード内でmysqli関数を使用しているので、ベストプラクティスのためにこれを使用することをお勧めします。

関連する問題