Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/73.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
Cakephp 在cake中用一个表单编辑多行_Cakephp - Fatal编程技术网

Cakephp 在cake中用一个表单编辑多行

Cakephp 在cake中用一个表单编辑多行,cakephp,Cakephp,在我的cake应用程序中,我有一个名为faqs的模型、名为faqs\U控制器的控制器和名为faqsindex.php的视图 我正在制作一个CMS,这样用户可以更改常见问题。db表“FAQ”有5列id、类别、问题、答案和编号。“编号”是常见问题解答的出现顺序 列出所有常见问题的循环大致如下所示: <?php foreach ($faqs as $faq): <tr> <td><?php echo $faq['Faq']['category']; ?><

在我的cake应用程序中,我有一个名为faqs的模型、名为faqs\U控制器的控制器和名为faqsindex.php的视图

我正在制作一个CMS,这样用户可以更改常见问题。db表“FAQ”有5列id、类别、问题、答案和编号。“编号”是常见问题解答的出现顺序

列出所有常见问题的循环大致如下所示:

<?php
foreach ($faqs as $faq):
<tr>
<td><?php echo $faq['Faq']['category']; ?></td>
<td><?php echo $faq['Faq']['number']; ?></td>
<td><?php echo $faq['Faq']['question']; ?></td>
<td><?php echo $faq['Faq']['answer']; ?></td>
</tr>
<?php endforeach; ?>
    function edit() {
       if(!empty($this->data)) {
          $this->Faq->saveAll($this->data['Faq']);
       }
       else {
          $this->data['Faq'] = Set::combine($this->Faq->find('all'), '{n}.Faq.id', '{n}.Faq');
       }
}
echo $form->create('Faq', array('action'=>'edit'));
foreach($this->viewVars['faqs'] as $key => $value) {
    echo 'id:'.$value['Faq']['id'];
    echo '<br/>question:'.$value['Faq']['question']; 
    echo $form->input('Faq.'.$key.'.number');
}
在索引视图中,我制作了一个foreach,如下所示:

<?php
foreach ($faqs as $faq):
<tr>
<td><?php echo $faq['Faq']['category']; ?></td>
<td><?php echo $faq['Faq']['number']; ?></td>
<td><?php echo $faq['Faq']['question']; ?></td>
<td><?php echo $faq['Faq']['answer']; ?></td>
</tr>
<?php endforeach; ?>
    function edit() {
       if(!empty($this->data)) {
          $this->Faq->saveAll($this->data['Faq']);
       }
       else {
          $this->data['Faq'] = Set::combine($this->Faq->find('all'), '{n}.Faq.id', '{n}.Faq');
       }
}
echo $form->create('Faq', array('action'=>'edit'));
foreach($this->viewVars['faqs'] as $key => $value) {
    echo 'id:'.$value['Faq']['id'];
    echo '<br/>question:'.$value['Faq']['question']; 
    echo $form->input('Faq.'.$key.'.number');
}
echo$form->create('Faq',array('action'=>'edit');
foreach($this->viewVars['faqs']作为$key=>$value){
回显'id:'.$value['Faq']['id'];
回显“
问题:”.$value['Faq']['question']; echo$form->input('Faq.'.$key.'.number'); }
在本例中,foreach循环8次,因为共有8行。如果我提交它们,我将创建8个新行&无法更新现有行

-编辑-

我在这里更改了echo的格式:

echo$form->input('Faq.'.$key.'.question',数组('value'=>$value['Faq']['question'])

预先填充表格。我不知道如何更新正确的行。如果我提交表单,我会收到8个mysql查询,如下所示:

<?php
foreach ($faqs as $faq):
<tr>
<td><?php echo $faq['Faq']['category']; ?></td>
<td><?php echo $faq['Faq']['number']; ?></td>
<td><?php echo $faq['Faq']['question']; ?></td>
<td><?php echo $faq['Faq']['answer']; ?></td>
</tr>
<?php endforeach; ?>
    function edit() {
       if(!empty($this->data)) {
          $this->Faq->saveAll($this->data['Faq']);
       }
       else {
          $this->data['Faq'] = Set::combine($this->Faq->find('all'), '{n}.Faq.id', '{n}.Faq');
       }
}
echo $form->create('Faq', array('action'=>'edit'));
foreach($this->viewVars['faqs'] as $key => $value) {
    echo 'id:'.$value['Faq']['id'];
    echo '<br/>question:'.$value['Faq']['question']; 
    echo $form->input('Faq.'.$key.'.number');
}
当我不想插入而只想更新时,插入到
FAQ
question
)值(“我刚才添加的新问题?”)中。

如果您使用jquery:所有排序都在客户端完成,您可以将订单值放入隐藏输入,并使用javascript根据用户交互来更改它们。服务器端脚本没有任何可更改的内容

编辑:

除非保存后将它们重定向到其他地方。

如果使用jquery:所有排序都在客户端完成,则将订单值放入隐藏输入中,并使用javascript根据用户交互对其进行更改。服务器端脚本没有任何可更改的内容

编辑:


除非在保存后将它们重定向到其他地方。

如果要使用Cake更新特定行,只需在
saveAll()
查询中设置适当的行ID即可

function edit() {

    if (!empty($this->data)) {
        $this->Faq->saveAll($this->data['Faq'], array('conditions' => array('Faq.id' => $yourId)));
    }
    ...

}
这告诉Cake的ORM只在
Faq.id
等于
$yourId
的位置将信息保存到行中。如果
$yourId
与表中的现有ID匹配,则应更新该行

编辑

您可以将
id
字段放入一个列表中


如果您想用Cake更新特定行,只需在
saveAll()
查询中设置适当的行ID即可

function edit() {

    if (!empty($this->data)) {
        $this->Faq->saveAll($this->data['Faq'], array('conditions' => array('Faq.id' => $yourId)));
    }
    ...

}
这告诉Cake的ORM只在
Faq.id
等于
$yourId
的位置将信息保存到行中。如果
$yourId
与表中的现有ID匹配,则应更新该行

编辑

您可以将
id
字段放入一个列表中


将每个常见问题id放入表单中

echo $form->create('Faq', array('action'=>'edit'));
foreach($this->viewVars['faqs'] as $key => $value) {
    echo 'id:'.$value['Faq']['id'];
    echo '<br/>question:'.$value['Faq']['question']; 
    echo $form->hidden('Faq.'.$key.'.id', array('value' => $value['Faq']['id']));
    echo $form->input('Faq.'.$key.'.number');
}
echo$form->create('Faq',array('action'=>'edit');
foreach($this->viewVars['faqs']作为$key=>$value){
回显'id:'.$value['Faq']['id'];
回显“
问题:”.$value['Faq']['question']; echo$form->hidden('Faq.'.$key.'.id',数组('value'=>$value['Faq']['id']); echo$form->input('Faq.'.$key.'.number'); }
是否将每个常见问题id放入表单中

echo $form->create('Faq', array('action'=>'edit'));
foreach($this->viewVars['faqs'] as $key => $value) {
    echo 'id:'.$value['Faq']['id'];
    echo '<br/>question:'.$value['Faq']['question']; 
    echo $form->hidden('Faq.'.$key.'.id', array('value' => $value['Faq']['id']));
    echo $form->input('Faq.'.$key.'.number');
}
echo$form->create('Faq',array('action'=>'edit');
foreach($this->viewVars['faqs']作为$key=>$value){
回显'id:'.$value['Faq']['id'];
回显“
问题:”.$value['Faq']['question']; echo$form->hidden('Faq.'.$key.'.id',数组('value'=>$value['Faq']['id']); echo$form->input('Faq.'.$key.'.number'); }
创建一个表单,在控制器中检索与已提交表单字段关联的FAQ对象,更新其编号属性,然后再次保存FAQ对象。还有其他方法吗?我不太清楚我要做什么,我正在尝试找出如何进行更新。创建一个表单,在控制器中检索与提交表单字段关联的FAQ对象,更新其编号属性,然后再次保存FAQ对象。还有别的办法吗?我不太清楚我想做什么,我想知道如何更新。但是$yourId是从哪里来的?我很抱歉,如果我在这里显得头昏眼花的话,我只是很难理解这件事。我希望foreach中的8个表单字段都有一个与“Faq.id”匹配的id。我还希望表单中预先填充已有的内容。@pg您必须提供这些内容。假设您在更新记录时已收集了相应的id。如果尚未收集,则应能够将
id
字段添加到数据库查询中,以便使用正在编辑的数据库记录填充表单输入。然后只需将该ID包含在隐藏的表单输入中。如果设置正确,相应的
id
将在
$this->data['Faq']['id']
中传输。好的,这就是我的问题。如何将$yourId包含到隐藏表单输入中?输入应该是输入(“Faq.”.$value['Faq']['id']'''..number')?谢谢你的帮助,我能够通过组合所有三个答案来计算出来。但是$yourId来自哪里?我很抱歉,如果我在这里显得头昏眼花的话,我只是很难理解这件事。我希望foreach中的8个表单字段都有一个与“Faq.id”匹配的id。我还希望表单中预先填充已有的内容。@pg您必须提供这些内容。假设您在更新记录时已收集了相应的id。如果尚未收集,则应能够将
id
字段添加到数据库查询中,以便使用正在编辑的数据库记录填充表单输入。然后只需将该ID包含在隐藏的表单输入中。如果设置正确,相应的
id
将在
$this->data['Faq']['id']
中传输。好的,这就是我的问题。我如何将$yourId包含在隐藏中