2

我的 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');

我错过了什么?

4

6 回答 6

2

在把我的头撞在桌子上之后,答案很简单——当然。我只是从我的模型中删除了这条线。我认为将其设置为正确的表就可以了,但事实证明,它需要被删除:

public $useTable = 'contacts';
于 2012-05-17T16:08:32.903 回答
0

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

您的控制器中缺少此行

public $uses = array('Contact');

放试试看,然后你告诉我...

于 2012-05-17T18:59:01.750 回答
0

你可以试试这个:

$this->Contact->save($this->request->data, false);
于 2012-05-16T19:27:30.807 回答
0

请添加此行

$this->Contact->create();

在您尝试使用保存之前

if ($this->Contact->save($this->request->data)) {
于 2012-05-19T04:21:05.003 回答
0

尝试:

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

有时,模型在验证上有错误,而不是在validationErrors() 中显示

还要注意这一点。。

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

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

花点时间阅读这份文档很重要,希望对你有所帮助。

于 2012-05-16T23:56:06.507 回答
0

只有当表单设置了张贴隐藏标志时,发布才返回 true。所以试试这个。

if(!empty($this->request->data))
于 2012-05-17T19:17:07.270 回答