问题描述
我重新制作了一个扩展,所以我坚持做我必须做的最后一项工作。 我为 admin 创建了一个 twig,它显示了一个从数据库表中获取数据的列表。在列表的每一行中,我创建了一个按钮,我想修复表格的特定单元格。所以每一行都有自己的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";
为了解决这个问题,我在模型中添加了 (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 . "'");
}
感谢丹尼尔的帮助。