如何添加修复功能 - 在模型 php 文件中的特定 ID 中更新数据库 [=11g=] 中的单元格

How to add a fuction to Repair - update a cell in database table in specific id in model php file

我重制了一个扩展,所以我坚持了我必须做的最后一项工作。 我为管理员创建了一个树枝,它显示了一个列表,该列表从数据库中的 table 中获取数据。在列表的每一行中,我创建了一个按钮,用于修复 table 的特定单元格。所以每一行都有自己的id。

查看页面列表中的图像:

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

在下面的代码中,我必须更改一些内容,以便通过按下修复按钮读取特定的 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";

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

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

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

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

但是在管理员端,修复保存到数据库的功能只给我:

aToxMDs=

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

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

这是适用于您的模型的函数的修订版本class:

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 并将该值传递给 'repair' 函数。这应该在对模型函数的现有调用之前完成:

// 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 . "'");
}

谢谢大牛的帮助。