【问题标题】:Update to database with Codeigniter won't work无法使用 Codeigniter 更新数据库
【发布时间】:2014-02-18 18:36:14
【问题描述】:

我在更新数据库时遇到问题。我试图用图片制作一个排序系统,但它不起作用。我正在使用 Jquery 的可排序功能。这样我就可以从当前排序中取回我的数组(保存时)。

如果我将图像从位置 1 移动到位置 2,一切正常。所以 oldSortNumber 是 1,新的是 2 (1 + 1)。这是我的代码:

public function updateOrder ($newSortArray) {
    for($i = 0; $i <= 5; $i++)
    {
        $oldSortNumber = substr($newSortArray['img'][$i], strpos($newSortArray['img'][$i], ".") + 1);
        $newSortNumber = $i + 1;

        $this->db->where('sortID', $oldSortNumber);
        $this->db->update('user_image', array('sortID' => $newSortNumber));
    }
}

当我将图像放回原处时(从 2 到 1,或类似的东西),我的功能将不起作用。所以它不会更新到我的新职位。 1 而不是 2。

所以在我的数据库中,我有一张带有 sortOrder 2 的图片。如果我将它放在第三位。一切正常。但是当我将它定位到第一位时,它不会更新到数据库中。输入很好,我不知道出了什么问题。有人可以帮帮我吗?

【问题讨论】:

  • 您在哪里定义$oldSortNumber。我认为应该是$i
  • 你的循环不正确,它应该是for($i = 5; $i &gt; 0; $i--),因为你的更新从 1 开始,当你的 $i 为 2 时,它变成了 2,你有两行 2
  • 呃,我更新了我的代码。我从 Jquery UI 的“可序列化”功能中得到了我的旧号码。这样一来,我的 6 个位置连续排列。所以我检查了 1 到 6 中的新数字。

标签: php codeigniter activerecord for-loop jquery-ui-sortable


【解决方案1】:

它不会像这样工作,因为您的位置和更新数据在同一列中。您必须使用 user_image 表的 ID,where 条件中的主键并将查询值旧排序顺序设置为表 id

public function updateOrder ($newSortArray) {
for($i = 1; $i <= 6; $i++)
{
    $ID = substr($newSortArray['img'][$i], strpos($newSortArray['img'][$i], ".") + 1);

    $this->db->where('YOUR_TABLE_ID', $ID );
    $this->db->update('user_image', array('sortID' => $i ));
}
}

【讨论】:

  • 嗯,好吧,所以失败在 where 子句中。我将尝试在 where 子句中获取图像 ID。问题是 Jquery UI 可排序的可序列化函数是它返回旧的和新的排序顺序。所以我首先要按旧的排序顺序获取图像 ID。然后使用该 imageID 设置新订单。我今晚会试试的。提前致谢。
  • 唯一奇怪的是,如果我将图像放在 sortOrder 的更高位置,它就可以正常工作。当我把它放低时,它失败了。
  • 因为当它从底部开始较高时,意味着 5 将是 5+1,因此最高值正在变为新值。但是当它的较低 1 变为 1+1 = 2 但你已经有另一个 2 时,所以当你的 $i 为 2 时,你的条件是 2 选择两行,更新的一行和旧的一行。逻辑上它是错误的,你的 where 条件值不应该改变。
  • 啊,是的!我明白那个。所以它选择了两行而不是 1 行。我想我必须更改它必须提供 imageID 而不是旧排序 ID 的 $newSortArray。然后将 sortID 设置为新的 id。是的,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 2021-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多