如何添加修复功能 - 在模型 php 文件中以特定 id 更新数据库表中的单元格

问题描述

我重新制作了一个扩展,所以我坚持做我必须做的最后一项工作。 我为 admin 创建了一个 twig,它显示一个数据库表中获取数据的列表。在列表的每一行中,我创建了一个按钮,我想修复表格的特定单元格。所以每一行都有自己的id。

查看页面列表中的图片

enter image description here

我制作了控制器文件,但我停留在必须完成其余工作的模型文件中。

在下面的代码中,我必须更改一些内容,以便通过按下修复按钮读取特定的 ID。

public function repairsaveCarts($link_id=" ") {
        $this->db->query("SELECT * FROM " . DB_PREFIX . "save_cart WHERE link_id = '" . (int)$link_id . "'");

        $db_id = $this->db->getLastId();
            $end_url = base64_encode(serialize($db_id));
            $url = $this->config->get('config_url').$end_url;
            
            $this->db->query("UPDATE " . DB_PREFIX . "save_cart SET shorturl = '" . $this->db->escape($url) . "' WHERE link_id = '" . (int)$db_id . "'");
    }

我认为更改必须在 $db_id = $this->db->getLastId(); 行中完成,但我不确定。 请有人可以提供帮助。

解决方法

我让它工作。我在控制器的 request->get | post 中有一个小的语法错误,因此模型没有从按钮获得正确的 id。

public function repairSaveCarts($link_id) {
        
        $end_url = base64_encode(serialize((int)$link_id));
        
        $url = $this->config->get('config_url').$end_url;
        
        $this->db->query("UPDATE " . DB_PREFIX . "save_cart SET shorturl = '" . $this->db->escape($url) . "',date_added = NOW() WHERE link_id = '" . (int)$link_id . "'");
        
    
        
        return $query->row;
    }

我注意到 serialize 的一件事是,当模型从控制器获取 id 时,它以 spring 值而不是 int 值的形式接收它。结果以

为例

id 10 ---> serialize value= s:2:"10";

为了解决这个问题,我在模型中添加了 (int) 之后的 serialize 值,现在给我正确的结果

id 10 ---> serialize value= i:10;

现在唯一的问题是当模块从前端页面保存到数据库时给我完整的 URL 站点:

https://www.example.com/aToxMDs=

但是在管理端时,函数修复保存到数据库只给我:

aToxMDs=

线 $url = $this->config->get('config_url').$end_url; 好像不行。

我必须编辑什么才能在 $end_url 之前添加商店网址???

,

这是为您的模型类修改的函数版本:

public function repairSaveCarts($link_id,$base) {
    $end_url = base64_encode(serialize($link_id));
    $url = $base.$end_url;
        
    $this->db->query("UPDATE " . DB_PREFIX . "save_cart SET shorturl = '" . $this->db->escape($url) . "' WHERE link_id = '" . (int)$link_id . "'");
}

您还应该满足 HTTPS 而不仅仅是 HTTP,因此将以下内容添加到控制器以获取站点 Url 并将该值传递给“修复”函数。这应该在对模型函数的现有调用之前完成:

// check if the request was made over HTTPS or not
if ($this->request->server['HTTPS']) {
    $server = $this->config->get('config_ssl');
} else {
    $server = $this->config->get('config_url');
}

$this->whateveryourmodelnameis->repairSaveCarts($link_id,$server);
,

最后我成功了。我替换这个:

public function repairSaveCarts($link_id,$base) {
    $end_url = base64_encode(serialize($link_id));
    $url = $base.$end_url;
        
    $this->db->query("UPDATE " . DB_PREFIX . "save_cart SET shorturl = '" . $this->db->escape($url) . "' WHERE link_id = '" . (int)$link_id . "'");
}

在模型文件上使用:

public function repairSaveCarts($link_id) {
    $end_url = base64_encode(serialize((int)$link_id));
    if ($this->request->server['HTTPS']) {
    $url = HTTPS_CATALOG . $end_url;
    } else {
    $url = HTTP_CATALOG . $end_url;
    }
        
    $this->db->query("UPDATE " . DB_PREFIX . "save_cart SET shorturl = '" . $this->db->escape($url) . "',date_added = NOW() WHERE link_id = '" . (int)$link_id . "'");
}

感谢丹尼尔的帮助。