无法通过 CakePHP 表单更新数据库中的数据

unable to update data in database through CakePHP form

我写了一个编辑功能来更新新闻的信息,我的代码:
这是控制器文件函数:

public function editnews($id) { 
    $this->layout = "news"; //tynemc call by this statement
    $this->loadModel('News'); //model call 
    $this->loadModel('Category'); //load news category
    if ($this->request->is('post')) {
         if (move_uploaded_file($this->request->data['News']['image_url']['tmp_name'], WWW_ROOT . 'media/'. $this->request->data['News']['image_url']['name'])) {

            $this->request->data['News']['image_url'] = time() . $this->request->data['News']['image_url']['name'];
        }$this->News->save($this->request->data['News']);//data save by this statement
        $msg = '<div class="alert alert-success">
        <button type="button" class="close" data-dismiss="alert">&times;</button>
        <strong> News update successfully </strong>
        </div>';
        $this->Session-> setFlash($msg);
        return $this->redirect('editnews');
    }
    if (!$this->request->data) { // id wise data search
        $data = $this->News->findById($id);
        $this->request->data = $data;

    }
    $this->set('categories', $this->Category->find("list"));//categories load in dropdown
}

这是 ctp 文件表单操作代码:

<?php echo $this->Form->create('News', array(
                        'inputDefaults' => array(
                            'label' => false,
                            'div' => false
                        ),
                        'id' => 'form-validate',
                        'class' => 'form-horizontal',
                        'novalidate' => 'novalidate',
                        'enctype' => 'multipart/form-data',
                        'controller' => 'admins',
                        'action' => 'editnews'
                            )
                    );
                    ?>

我没有编辑标题、图片、新闻详情,我无法保存新闻信息,为什么会这样,我该如何更正我的编辑记录功能?

您应该尝试稍微调试一下您的代码:

试试var_dumpmove_uploaded_file看看有什么returns。

还有var_dump $this->request->data['News'] 请把结果放在这里,因为你发送的数据,它可能不会保存。如果您的模型 ID 未设置,CakePHP 将不知道要保存/编辑什么。

如果你不能var_dump,你可以使用$this->log($myVar, 'debug'),然后在app/tmp/logs/debug.log[=中查看你的文件10=]

另一方面,通常最好将 HTML 放在视图中,而不是控制器中(但这更多是为了您的个人知识)

我认为您面临表单操作问题。尝试执行此代码。

  <?php

                    echo $this->Form->create("News",array(
                        'inputDefaults' => array(
                            'label' => false,
                            'div' => false
                        ),
                        'url' => array(
                            'controller' => 'admins',
                            'action' =>'editnews'
                            ), 
                        'id' => 'form-validate',
                        'class' => 'form-horizontal',
                        'novalidate' => 'novalidate',
                        'enctype' => 'multipart/form-data'
                        )
                    );
                ?>

并尝试将此代码作为函数。

    public function editnews($newsid = null) {
        $this->layout = "news";
        $this->loadModel('News');
        $this->loadModel('Category');
        $this->News->id = $newsid; 
        if ($this->request->is('get')) { 
            $this->request->data = $this->News->read();
        } 
        else {
            $data = $this->request->data;
            }
            if ($this->News->save($data)) { 
                $this->Session->setFlash("Newsletter angelegt");

               $msg = '<div class="alert alert-success">
                <button type="button" class="close" data-dismiss="alert">&times;</button>
               <strong> News update successfully </strong>
              </div>';
                $this->Session->setFlash($msg);
                $this->redirect(array( 'controller' => "admins", "action" => "manage_newses"));
            } 
            else 
            {
                $this->Session->setFlash("not updated");
                $this->render();
           }
        }
        if (!$this->request->data) {
           $data = $this->News->findById($id);
           $this->request->data = $data;

        }
        $this->set('categories', $this->Category->find("list"));}