CakePHP 2.1联系表单数据不会保存

时间:2012-05-16 18:54:26

标签: php forms email cakephp

我的CakePHP 2.0应用程序中有几个不同的联系表单。所有联系表单都是应该发送的电子邮件,但是我需要这个特定的表单也将表单结果保存到数据库中。邮件数据正在填充,我可以print_r()pr()表单数据。我甚至可以发送邮件数据。但是,实际上并没有将数据保存到模型表中。数据库表名为contacts,并包含以下字段:id, publication, company, name, email, phone, message, contact_method, selections, received

这是我的模特:

class Contact extends AppModel {
    public $name = 'Contact';

    public $useTable = 'contacts';

    public $validate = array(  
    'name' => array(
            'rule' => 'notEmpty'
        ),
        'email' => array(
            'rule' => 'notEmpty'
        )
    );

这是我的控制器:

App::uses('CakeEmail', 'Network/Email');

class ContactsController extends AppController
{
    public $name = 'Contacts';
    public $helpers = array('Html', 'Form', 'Js');
    public $components = array('Email', 'Session');

...

    public function contact_att() {

        if ($this->request->is('post')) {

            //pr($this->data);
            if ($this->Contact->save($this->request->data)) {
                $this->redirect('/pages/publications-alabama-turf-times');
                $this->Session->setFlash("Mesage Saved!"); 
            }

            else {
                print_r($this->data);
                Configure::write('debug', 2); 
                debug($this->Contact->validationErrors); 

                exit;
            }
        }

以下是我认为的表格:

echo $this->Form->create('Contact', array(
    'action' => 'contact_att', 
    'label' => '', 
    'class' => 'pubs'));
echo $this->Form->input('publication', array(
    'type' => 'hidden', 
    'value' => 'A', 
    'label' => ''));
echo $this->Form->input('company', array(
    'default' => 'company name (required)', 
    'onfocus' => 'clearDefault(this)', 
        'label' => array(
            'text' => 'Company Name',
            'style' => 'position:absolute;')));
echo $this->Form->input('name', array(
    'default' => 'name (required)', 
    'onfocus' => 'clearDefault(this)', 
    'label' => array(
        'text' => 'Your Name',
        'style' => 'position:absolute;')));
echo $this->Form->input('phone', array(
    'default' => 'phone number (required)', 
    'onfocus' => 'clearDefault(this)', 
    'label' => array(
        'text' => 'Your Phone Number',
        'style' => 'position:absolute;')));
echo $this->Form->input('email', array(
    'default' => 'email (required)', 
    'onfocus' => 'clearDefault(this)', 
    'label' => array(
        'text' => 'Your Email Address',
        'style' => 'position:absolute;')));
echo $this->Form->input('message', array(
    'label' => array(
        'text' => 'Your Message',
        'style' => 'position:absolute;')));
echo $this->Form->input('contact_method', array(
    'type' => 'radio',
    'style' => 'padding-right:20px;', 
    'legend' => 'Preferred contact method:', 
    'options' => array(
        'phone' => 'phone',
        'email' => 'email'
        )
    ));
echo $this->Form->input('selections', array(
    'type' => 'select', 
    'label' => array(
    'text' => 'I am interested in the following:', 
    'style' => 'display:block; width:250px; margin-left:-12px;padding-bottom:15px;'),
        'multiple' => 'checkbox',
        'options' => array(
            'ABC' => 'ABC', 
            'DEF' => 'DEF', 
            'GHI' => 'GHI'
         )
    ));

echo $this->Form->end('Submit');

我错过了什么?

6 个答案:

答案 0 :(得分:2)

经过多次敲打桌面后,答案结果很简单 - 当然。我只是从我的模型中删除了这一行。我认为将它设置为正确的表格会很好,但事实证明,它需要被移除:

public $useTable = 'contacts';

答案 1 :(得分:0)

你可以试试这个:

$this->Contact->save($this->request->data, false);

答案 2 :(得分:0)

尝试:

debug($this->model->invalidFields());

有时,模型在验证时会出错,而不会在validationErrors()

中显示

还要注意这个..

如果未提供$ fieldList,恶意用户可以向表单数据添加其他字段(如果您不使用SecurityComponent),以及此更改字段本来不打算更改。

http://book.cakephp.org/2.0/en/models/saving-your-data.html

需要一些时间阅读本文档非常重要,希望对您有所帮助。

答案 3 :(得分:0)

朋友,我看到你的问题了,检查..

您的控制器中缺少此行

public $uses = array('Contact');

然后尝试,然后你告诉我......

答案 4 :(得分:0)

当表单设置已发布的隐藏标志时,post仅返回true。所以试试吧。

if(!empty($this->request->data))

答案 5 :(得分:0)

请添加此行

$this->Contact->create();
在尝试使用

保存之前

if ($this->Contact->save($this->request->data)) {