gpt4 book ai didi

php - Jeditable 新值不会保存到数据库

转载 作者:行者123 更新时间:2023-11-30 22:05:48 24 4
gpt4 key购买 nike

我正在按照教程制作简单的网络应用程序,并且我正在使用 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!";
}
}

我花了几个小时试图解决这个问题。我希望有一个人可以帮助我。谢谢!

最佳答案

几乎晚了一年但是......我已经为这个问题跑了 2 天,试图完成相同的教程。

如您所见,问题在于 jEditable 无法处理当前元素的 ID,因此 $_POST['ListItemID'] 最终为空。

在 bindAllTabs 函数中,jEditable 接受 submitdata 字段中的附加参数:

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

但问题是 jEditable 调用未绑定(bind)到允许我们使用 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(){/**/}); 等等.

关于php - Jeditable 新值不会保存到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41817204/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com