CakePHP:允许通过按钮单击更新数据库

时间:2012-05-01 18:34:51

标签: forms cakephp

我有一个产品搜索页面,其中包含以下表格。搜索结果显示在同一页面上,搜索栏位于顶部。

echo $this->Form->create('Searches', array('action'=>'products', 'type' => 'get', 'name' => 'textbox1'));
echo $form->input($varName1, array('label' => false));
echo $form->end('Locate');

我的搜索结果旁边还有一个小框,允许(它还没有工作)用户使用复选框标记产品并相应地更新其数据库(表products并使用模型{{1单击按钮即可。请注意,我有一个Product控制器用于此搜索页面。

Searches

我很难用这种方法搞清楚如何执行这个check-box-and-DB-update例程。我正在访问我想去的链接(<form method="link" action="/myapp/product/test_update_db> <label><input type="checkbox" name="flag1" <?php echo $preCheckBox1; ?>>Flag 1</input></label> <label><input type="checkbox" name="flag2" <?php echo $preCheckBox2; ?>>Flag 2</input></label> <input type="submit" value="Update"> </form> ),但我不知道如何获取变量/myapp/product/test_update_dbflag1以及此结果的行ID (flag2)到新页面。

有人可以指导我如何整齐地执行此操作吗?这种一般方法是否正确?如果没有,我应该走哪条路?如果可能的话,我不想在这个时候使用javascript。

编辑:如果我使用URL传递数据,我想我可以做到这一点。但我仍然想知道如何在“引擎盖下”或MVC中完成。我觉得我是在攻击CakePHP平台。

更新:所以,我最终使用网址参数来检索$results['Product']['id'])flag1等信息。我还在寻找另一种方法。

3 个答案:

答案 0 :(得分:0)

要查看复选框检查数据的位置,请在控制器中执行以下操作:

// Cake 2.0+
debug($this->request->data);

// previous versions
debug($this->data);

如果您想从当前页面将数据传递到搜索控制器,您始终可以将数据添加到表单中:

$this->input
    (
        'Product.id',
        array
        (
            'type' => 'hidden',
            'value' => $yourProductId
        )
    );

答案 1 :(得分:0)

我最终使用URL中嵌入的信息来获取提交数据。像下面的东西..

在产品控制器中,提交包含flag1flag2的表单时:

public function test_update_db() {      
    // Get variables from URL, if any, and save accordingly     
    $result = $this->Product->updateProduct($this->params['url'], 'url');
    if ($result) {
        $this->Session->setFlash('Successfully updated!', 'default', array('class' => 'success'));
        $this->redirect($this->referer());
    }
    else {
        $this->Session->setFlash('Update was unsuccessful!', 'default', array('class' => 'error'));
        $this->redirect($this->referer());
    }       
}

这适用于我需要做的事情。我觉得有一种更合适的方法可以做到这一点。

答案 2 :(得分:0)

if ($result) {
    $this->Session->setFlash('Successfully updated!', 'default', array('class' => 'success'));
    $this->redirect($this->referer());
}