Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用Smarty从PHP代码创建TPL函数_Php_Smarty - Fatal编程技术网

无法使用Smarty从PHP代码创建TPL函数

无法使用Smarty从PHP代码创建TPL函数,php,smarty,Php,Smarty,我已经创建了一个函数来运行SQL查询,输出数据,这似乎很好,问题是我现在不能用它做任何事情,因为我不能让输出到模板工作 PHP代码: function getCategories() { try { foreach($this->pdo->query("SELECT categories.cat_id, categories.cat_name, categories.cat_description FROM categories") as $row) {

我已经创建了一个函数来运行SQL查询,输出数据,这似乎很好,问题是我现在不能用它做任何事情,因为我不能让输出到模板工作

PHP代码:

 function getCategories() {
    try {
        foreach($this->pdo->query("SELECT categories.cat_id, categories.cat_name, categories.cat_description FROM categories") as $row) {
            $rows[] = $row;
        }
    } catch(PDOException $e) {
        print "Error!:" . $e->getMessage();
        return false;
    }
    return $rows;
    $smarty = new Smarty();
    $smarty->assign('categories', $rows);
}
它只返回以下内容:

替换返回$行;使用return$smarty->assign'categories',$rows;只呈现一个空白页面

我在模板中使用这个:{$categories.cat_name}

有人能帮我修一下吗


我正在尝试使用Smarty重写一个易受攻击的蹩脚论坛脚本,因此它是一个值得尝试开发脚本的基础。我正试图使用Smarty重写的只是类别、主题和登录/注册系统atm。

问题是,您创建了一个新的Smarty对象,为其分配了一个变量,但没有使用它来显示您的模板-所以这个对象会丢失

我建议将Smarty对象传递给函数,如下所示:

function getCategories(&$smarty) {
    $rows = array();
    if($result = $this->pdo->query("SELECT categories.cat_id, categories.cat_name, categories.cat_description FROM categories")) {
        $rows = $result->fetchAll();
    }
    $smarty->assign('categories', $rows);
}

通过这种方式,对象引用将被传递给函数-您将能够为它分配任何您想要的变量,而无需返回它。只需确保发送用于渲染模板的Smarty对象。

问题在于,您创建了一个新的Smarty对象,为其分配了一个变量,但没有使用它来显示模板-因此此对象会丢失

我建议将Smarty对象传递给函数,如下所示:

function getCategories(&$smarty) {
    $rows = array();
    if($result = $this->pdo->query("SELECT categories.cat_id, categories.cat_name, categories.cat_description FROM categories")) {
        $rows = $result->fetchAll();
    }
    $smarty->assign('categories', $rows);
}

通过这种方式,对象引用将被传递给函数-您将能够为它分配任何您想要的变量,而无需返回它。只需确保发送用于呈现模板的Smarty对象即可。

能否向我们显示要在何处使用类别的html?html与此无关,因为Smarty必须声明变量才能使其正常工作。。。您应该使用$smarty->分配“类别”和$rows;分配$categories。变量,然后在点后添加其余的,以便Smarty从该行提取信息。Smarty的做法与PHP本身不同。php是唯一与此相关的东西。您能告诉我们您想在哪里使用类别的html吗?html与此无关,因为Smarty必须声明变量才能使其正常工作。。。您应该使用$smarty->分配“类别”和$rows;分配$categories。变量,然后在点后添加其余的,以便Smarty从该行提取信息。Smarty的做法与PHP本身不同。php是唯一与此相关的东西。好吧,但我如何实际运行查询并返回结果,以使其正常工作?因为我还没能真正做到这一点。。我以前尝试过,但找不到任何现有代码或示例,说明如何执行SQL查询并将其输出到除catch之外的行,最后我发现现有代码不起作用。。。因为如果我这样做:那么我最终会得到&如果我尝试$sql=query,那么我会得到变量的$sql错误,我想无论如何使用PDO…您使用了错误的PDO-您应该获取结果以获得一个数组。返回一个对象,该对象需要使用例如。我更新了我的答案,给出了一个正确使用PDO的例子。太棒了!我以为它最终会起作用然后第51行:'code'如果$result=$this->pdo->query->SELECT categories.cat_id,categories.cat_name,categories.cat_description FROM categories{你能用你的新代码更新你的问题,看看语法错误是从哪里来的吗?更新后的代码与上面的相同..synax错误来自我上面列出的第51行..好的,但是我如何实际运行查询并返回结果,以使其正常工作?因为我实际上无法使其工作..我尝试PTE在前面提到过这一点,但找不到任何现有代码或示例,说明SQL查询是如何执行并输出到除catch之外的行的,最终我得到的现有代码不起作用…因为如果我这样做:那么我最终得到&如果我尝试$SQL=query,那么我会得到变量的$SQL错误,并且我想无论如何使用PDO。。。您使用了错误的PDO-您应该获取结果以获取数组。返回一个对象,该对象需要使用例如来获取。我更新了答案以给出正确使用PDO的示例。太棒了!我以为它最终会起作用。&然后第51行:'code'if$result=$this->PDO->query->SELECT categories.cat\id,categories.cat_name,categories.cat_description FROM categories{你能用你的新代码更新你的问题,看看语法错误来自哪里吗?更新后的代码与上面相同..synax错误来自我上面列出的第51行。。