2017-01-23 24 views
1

我正在学习一个简单的Web应用程序的教程,并且我很适合进行编辑。Jeditable的新值不保存到数据库

一切工作正常,但新的值不会保存到数据库。 MySQL日志使我相信“​​listItemID”不打通,因为它显示了如下语句执行:

UPDATE list_items 
SET ListText='Test123' 
WHERE ListItemID='' 
LIMIT 1 

我在index.php中有这样的:

bindAllTabs("#list li span"); 

这是我的js文件:

function bindAllTabs(editableTarget) { 
    // CLICK-TO-EDIT on list items 
    $(editableTarget).editable("db-interaction/lists.php", { 
     id  : 'listItemID', 
     indicator : 'Saving...', 
     tooltip : 'Double-click to edit...', 
     event  : 'dblclick', 
     submit : 'Save', 
     submitdata: {action : "update"} 
    }); 

} 

我有这个在我的lists.php

<?php 

session_start(); 

include_once "../inc/constants.inc.php"; 
include_once "../inc/class.lists.inc.php"; 

if(!empty($_POST['action']) 
&& isset($_SESSION['LoggedIn']) 
&& $_SESSION['LoggedIn']==1) 
{ 
    $listObj = new ColoredListsItems(); 
    switch($_POST['action']) 
    { 
     case 'add': 
      echo $listObj->addListItem(); 
      break; 
     case 'update': 
      $listObj->updateListItem(); 
      break; 
     case 'sort': 
      $listObj->changeListItemPosition(); 
      break; 
     case 'color': 
      echo $listObj->changeListItemColor(); 
      break; 
     case 'done': 
      echo $listObj->toggleListItemDone(); 
      break; 
     case 'delete': 
      echo $listObj->deleteListItem(); 
      break; 
     default: 
      header("Location: /"); 
      break; 
    } 
} 
else 
{ 
    header("Location: /"); 
    exit; 
} 

?> 

,然后这class.lists.inc.php:

public function updateListItem() 
{ 
    $listItemID = $_POST['listItemID']; 
    $newValue = strip_tags(urldecode(trim($_POST["value"])), WHITELIST); 

    $sql = "UPDATE list_items 
      SET ListText=:text 
      WHERE ListItemID=:id 
      LIMIT 1"; 
    if($stmt = $this->_db->prepare($sql)) { 
     $stmt->bindParam(':text', $newValue, PDO::PARAM_STR); 
     $stmt->bindParam(':id', $listItemID, PDO::PARAM_INT); 
     $stmt->execute(); 
     $stmt->closeCursor(); 

     echo $newValue; 
    } else { 
     echo "Error saving, sorry about that!"; 
    } 
} 

我花了几个小时试图弄清楚这一点。我希望有一个人可以帮助我。谢谢!

回答

0

几乎晚了一年,但......我已经2天,这个问题四处奔波,试图解决同样的教程。

当你发现了,问题是,jEditable不能够处理当前元素的ID等等$ _ POST [“ListItemID”]最终被空。

在bindAllTabs功能jEditable 接受在submitdata领域的其他参数:

submitdata: { action: "update", ListItemID: this.id } 

但这样做的问题是,jEditable呼叫未绑定到一个事件,这将允许我们使用this.id - 因此可以让我们获得我们点击的当前项目的ID。你可以硬编码值,并认为它然后套$ _ POST [“ListItemID”(这是一个纯粹的学术测试)...而且也没有办法抢在运行当前的ID,并将其插入到submitdata 。我不是天才,但我已经尝试了几乎所有东西。

解决方案 我通过编辑jEditable本身的代码找到了修复程序。这一行(我在jEditable.js的176行中看到它):

submitdata[settings.id] = self.id; 

...是错误发生的地方。这是空白,因为self.id没有任何东西。换出这符合这段代码:

submitdata[settings.id] = $(self).parent().attr('id'); 

使用submitdata: { action: "update", ListItemID: $(self).parent().attr('id') }本身不会工作。

你也需要在本教程更新一些其他位的jQuery以来已否决了一些东西,但你可能已经做到了这一点。例如.live(/**/)被更新为.on('click' , null, function(){/**/});等等。