2

CakePHP2.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

試してみてください:

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

あなたはこれで試すことができます:

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

友達、あなたの問題がわかりました、確認してください。

この行がコントローラーにありません

public $uses = array('Contact');

入れてみて、それからあなたは私に言った...

于 2012-05-17T18:59:01.750 に答える
0

フォームが投稿された非表示フラグを設定した場合にのみ、投稿はtrueを返します。代わりにこれを試してください。

if(!empty($this->request->data))
于 2012-05-17T19:17:07.270 に答える
0

plsはこの行を追加します

$this->Contact->create();

を使用して保存しようとする前に

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