2014-01-26 13 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