2014-01-26 17 views
4

我在我的php應用程序中使用X-Editable插件來更新我的表的字段並使用POST文件來更新數據庫。X-editable不更新數據庫中的值

這裏是表單代碼:

<table id="restaurant" class="table table-bordered table-striped"> 
     <tbody> 
     <?php 
     echo ' 
      <tr> 
       <td style="width:15%">Restaurant name</td> 
       <td style="width:50%"><a href="#" id="name" data-type="text" data-pk="'. escape($arrValues[$i]->r_id) .'" data-name="name" data-placeholder="Required" data-original-title="Enter Restaurant Name" class="editable editable-click" style="display: inline;">'. escape($arrValues[$i]->name) .'</a></td> 
       <td style="width:35%"><span class="text-muted">Enter restaurant name.</span></td> 
      </tr>'; 
     ?> 
     </tbody> 
    </table> 

這裏是X-編輯JS我使用在頁面的底部:

<script> 
jQuery(document).ready(function() { 

//initializes all global values and plugin essentials 
    FormEditable.init(); 

//below function is only initialized on one field for debug purposes 
    $(function(){ 
     $('#name').editable({ 
      url: 'post.php' 
     }); 
    }); 
}); 
</script> 

這裏是我的post.php中文件的內容:

<?php 
require 'core/init.php'; 

    $pk = $_POST['pk']; //primary key aka ID 
    $name = $_POST['name']; //name of the field 
    $value = $_POST['value']; //value of the field 

    if (!empty($value)){ 
     $result = mysql_query('update Restaurants set '.mysql_escape_string($name).'="'.mysql_escape_string($value).'" where r_id = "'.mysql_escape_string($pk).'"'); 
     print_r($_POST); 
    } else { 
     header('HTTP 400 Bad Request', true, 400); 
     echo "This field is required!"; 
    } 

?> 

當我更新應用程序中的字段時,值在DOM中被更改,但值未更新在數據庫中。 這是我第一次使用X-Editable插件,在JS AJAX調用中我不是很強大。有人可以讓我知道我該如何調試,並找出爲什麼我的價值沒有被推到數據庫。

任何幫助將不勝感激。

回答

3

要正確調試這個,你可以使用你的瀏覽器控制檯! 尤其是「網絡」選項卡在調試時非常有幫助。

您成功包含腳本,使用了正確的標記,以便DOM得到更改。 現在調試的下一步是確保向您的post.php發送ajax請求(推送數據)。

要送你需要設置ajaxOptions把,是這樣的:

$('#name').editable({ 
    type: 'text', 
    url: 'post.php', 
    ajaxOptions: { 
    type: 'put' 
    } 
}); 

調試通過檢查控制檯的「網絡」選項卡中的Ajax請求。 在編輯字段之前打開網絡控制檯。 然後編輯它並觀看控制檯中出現的新請求。 通過在控制檯中單擊日誌條目,可以看到從瀏覽器發送到腳本的數據。

在你的post.php中,你可能會添加一個var_dump($ _ POST);查看傳入的所有參數。

+0

謝謝你的迴應。我像前面提到的那樣添加了AJAX選項,並在瀏覽器中查看了控制檯和網絡選項卡。我從Post.php頁面獲得了200個響應,但該值在數據庫中仍未更新。我在Post.php頁面的$ _POST上回顯var_dump,但是我得到一個空數組。看來我沒有發送任何數據到Post.php頁面。我認爲JS在我點擊提交按鈕時沒有發送數據。 – Anton

+0

我已經在JsFiddle上重新創建了您的示例作爲演示:http://jsfiddle.net/hq7yH/5/當它們發送到post.php時,您能看到控制檯中的值嗎?您也可以檢查您的$ arrValues是否正確插入到HTML中。 –

+0

添加了顯示值的控制檯屏幕截圖:http://i.imgur.com/r5UcFHr.jpg –

0

該問題是由用不同的url覆蓋ajax函數的mockjax插件引起的。當我從頁面中刪除所有mockjax引用時,問題已解決。

謝謝Jens-Andre Koch的幫助!

+0

我很高興,我的雲幫助。歡迎您:) –

1

ajaxOptions: { 
    type: 'put' 
    } 

就變成

ajaxOptions: { 
    type: 'POST' 
    } 

,讓你的PHP準備更新的MySQL如常。

+0

在我的情況下,我一次只更新一個輸入,而不是使用put方法創建一個新輸入,這對我來說是最好的選擇。 – Anton

+0

一直在尋找解決方案一段時間,我面臨的問題。你的回答很有魅力。萬分感謝!! – Shikhar