yii按钮创建数据库条目

时间:2011-11-05 22:40:52

标签: php yii

我想创建一个按钮,只需单击一下即可用于填充数据库中的表。

我只是不确定我需要做些什么来实现这一目标。我可以指定一个按钮执行的方法吗?或者只是在我的控制器中拾取值?下面是我想要执行的内容,但是通过一个按钮。

public function addInterest($interest)
    {
        $interest->UserId=Yii::app()->user->id;
        $interest->ItemId=$this->ItemId;
        return $interest->save();
    }

* *回应Jaison Justus的其他详细信息

通过这个实现,我使用模型A(ItemId)中的控制器和视图来显示按钮。然后是模型B(UserId)。从模型A(ItemId)和模型B(UserId)获取信息我希望在单击按钮时使用该ItemId和UserId填充模型C($ interest)。看起来CJuiButton可能会提供一种方法来构建它,然后我可以在选择一次后禁用/隐藏按钮。我只是不熟悉使用收集用户输入的表单以外的按钮,链接或提供弹出消息。

上面的代码目前位于Model A模型中。使用模型A控制器中的下面的代码,如果我使用表单并收集输入,一切都可以填充模型C.由于我不需要任何其他输入,然后从用户那里选择按钮,表单中没有任何内容,因此我知道我不能使用if(isset($_POST['Interest'])),如下所示。

public function actionView($id) {
        $items=$this->loadModel($id);
        $interest=$this->newInterest($items);

        $this->render('view', array(
            'model' => $items,
            'interest' => $interest,
        ));
    }

protected function newInterest($items)
    {
        $interest=new Interest;
        if(isset($_POST['Interest']))
        {
            $interest->attributes=$_POST['interest'];
            if($items->addInterest($interest))
                $this->refresh();
        }
        return $interest;
    }

回应VarioN

这是尝试使用ajax。但是这不起作用,并在运行时给出错误500。我的控制器动作是否适合我在这里尝试做的事情?

控制器

public function actionAddInterest() {
        $connection = yii::app()->db;
        $sql1 = "INSERT INTO interest (UserId, ItemId)
                    VALUES(".Yii::app()->user->id.",".$this->ItemId.")";
        $connection->createCommand($sql1)->execute();
    }

查看

<?php 
        echo CHtml::ajaxLink(
            'Add Interest',
            array('/item/addInterest'), 
            array('update'=>'#req_res')
        );
    ?>

1 个答案:

答案 0 :(得分:3)

看看你的问题,我发现你并不了解Yii中的MVC如何运作。

观看这个15分钟的截屏视频(Yii Tour - 3rd Stop - CRUD County),然后您就可以以任何方式创建这样的按钮(尝试使用Gii而不是按照自己的方式自定义 - 它是最简单的方式)。

<强>更新

似乎您需要AJAX请求。您可以在视图中添加CHtml::ajaxButton()

它将以这种方式工作:

  1. 用户按下按钮,按钮请求(使用JavaScript)给您 网站没有重新加载页面而且对用户不可见。

  2. 您的控制器操作将为此请求提供服务:它可以制作一些内容(例如,将数据保存到数据库)并输出您的JavaScript可能会向用户显示的数据。

  3. 比您的JavaScript获得答案,可以在页面上进行一些更改 (例如,隐藏按钮或显示来自请求的文本)。

  4. 您可以使用ajax here

    查看简单示例

    如果您不需要使用按钮提交表单信息,则可以使用ajaxLink。它的示例是here

    在互联网和yii论坛上有很多关于ajax和yii的例子。试着找到它们可能会非常有帮助。

    如果您有任何问题,请提出问题。

    第二次更新:

    首先,尝试简化您的SQL查询: &#34; INSERT INTO interest(UserId,ItemId)VALUES(1,2)&#34;

    启用将mysql查询记录到log:at config / main.php add&#34; trace&#34;到&#34;等级&#34;

    'components'=>array(
        'log'=>array(
            'class'=>'CLogRouter',
            'routes'=>array(
                array(
                    'class'=>'CFileLogRoute',
                    'levels'=>'error, warning, trace',
                ),
    

    现在您可以尝试按下AJAX链接并查看protected / runtime / log.txt并确定问题。

    AJAX请求的其他信息

    所有输出ajax脚本的内容都可以通过浏览器的功能查看: 在Chrome:按F12,转到网络,按ajax-link并查看请求响应。 在Firefox上使用插件&#34; Firebug&#34;。

    通过这种方式,您可以确定请求是否已完成。