CakePHP联系方式

CakePHP联系方式,php,cakephp,Php,Cakephp,我在我的网站上使用CakePHP构建了一个联系人表单。控制器逻辑如下所示: <?php class ContactController extends AppController { var $helpers = array ('Html','Form'); var $components = array ('Email','RequestHandler'); var $name = 'Contact'; function beforeFilter(

我在我的网站上使用CakePHP构建了一个联系人表单。控制器逻辑如下所示:

<?php

class ContactController extends AppController
{
    var $helpers = array ('Html','Form');

    var $components = array ('Email','RequestHandler');

    var $name = 'Contact';

    function beforeFilter()
    {
        parent::beforeFilter();

        $this->Auth->allow(array('*'));  
    }

    function index()
    {
        if ($this->RequestHandler->isPost())
        {
            $this->Contact->set($this->data);
            if ($this->Contact->validates())
            {
                $this->Email->to = '###';  
                $this->Email->subject = 'Contact message from ' . $this->data['Contact']['name'];  
                $this->Email->from = $this->data['Contact']['email'];  

                $this->Email->send($this->data['Contact']['message']);

                $this->render('success');
            }
        }
    }

}

?>

我想做的是,当用户提交表单时,显示另一个视图文件,例如
success.ctp
,但发生的情况是,即使他们有一个新视图,他们也可以刷新页面并一次又一次地发送数据。我该怎么阻止这个


有人能帮忙吗?谢谢

处理完他们的表单数据后,将他们重定向到同一联系人页面(以避免刷新问题)

如果您不知道,可以设置Flash以显示成功消息。但是,如果您想以您想要的方式对其进行自定义,您可以向会话写入一个变量来向视图发送信号

并且认为:


处理他们的表单数据后,将他们重定向到同一联系人页面(以避免刷新问题)

如果您不知道,可以设置Flash以显示成功消息。但是,如果您想以您想要的方式对其进行自定义,您可以向会话写入一个变量来向视图发送信号

并且认为:


您可以尝试在不到五分钟前通过已发布的电子邮件查找计数,或者弹出一条会话快闪消息,如“抱歉,您只能每x分钟发布一次”

$this->Contact->find('count',array(
                               'conditions'=>array(
                                       'email'=>$this->data['Contact'] ['email'],
                                        'created <'=>date("Y-m-d H:i:s", strtotime('-5 minutes)));
$this->Contact->find('count',数组(
“条件”=>数组(
'email'=>$this->data['Contact']['email'],

'创建您可以尝试在不到五分钟前通过已发布的电子邮件查找计数,或者弹出一条会话快闪消息,如'抱歉,您只能每x分钟发布一次'

$this->Contact->find('count',array(
                               'conditions'=>array(
                                       'email'=>$this->data['Contact'] ['email'],
                                        'created <'=>date("Y-m-d H:i:s", strtotime('-5 minutes)));
$this->Contact->find('count',数组(
“条件”=>数组(
'email'=>$this->data['Contact']['email'],

'创建以避免发送超过一个时间位置会话值的消息,并根据是否放置该会话值检查要渲染的视图。 e、 g.在您的电子邮件发送代码中添加
$this->Session->write('sent',1);
渲染时:
if($this->Session->check('sent'))$this->render('common_view');else$this->render('alternate_view');

请确保在通过
$this->redirect()

将电子邮件发送到页面本身后,页面被重定向,以避免发送超过一次的消息-放置会话值,并根据是否放置该会话值检查要呈现的视图。 e、 g.在您的电子邮件发送代码中添加
$this->Session->write('sent',1);
渲染时:
if($this->Session->check('sent'))$this->render('common_view');else$this->render('alternate_view');

请确保在通过
$this->redirect()将电子邮件发送到页面本身后,页面被重定向

您好,我希望在同一页面上向用户显示备用视图,而不是重定向它们。但我不确定如何防止用户在刷新数据时再次发送数据?Cheers Internative view?因此您可能希望使用$this->render('alternative_view'))?关于刷新,它与第一个视图的显示方式有关。因此,请先确定您希望如何显示备用视图,然后我将回答第二个视图,以避免混淆。是的,我已完成渲染,因此现在我收到一条消息,感谢您的电子邮件(请参阅操作代码)但是,如果用户进行刷新,它将重新发送数据!我根本不知道如何修复此问题?Thankshm..如果您呈现另一个视图,刷新不太可能出现问题,除非您在success.ctp中包含相同的表单。如果是这种情况,只需在$this->render('success')之前设置$this->data=array();表单不再在页面上,因为它是一个全新的视图。它再次发送数据的原因是因为它存储在会话中或其他地方,并且它使用相同的控制器操作。并添加
$this->data=array()
如果用户刷新页面,仍然会发送数据。您好,我更愿意在同一页面上向用户显示备用视图,而不是重定向它们。但我不确定如何防止用户在刷新后再次发送数据?CheeralInternative view?因此您可能希望使用$this->render('alternative_view'))?关于刷新,它与第一个视图的显示方式有关。因此,请先确定您希望如何显示备用视图,然后我将回答第二个视图,以避免混淆。是的,我已完成渲染,因此现在我收到一条消息,感谢您的电子邮件(请参阅操作代码)但是,如果用户进行刷新,它将重新发送数据!我根本不知道如何修复此问题?Thankshm..如果您呈现另一个视图,刷新不太可能出现问题,除非您在success.ctp中包含相同的表单。如果是这种情况,只需在$this->render('success')之前设置$this->data=array();表单不再在页面上,因为它是一个全新的视图。它再次发送数据的原因是因为它存储在会话或其他地方,并且它使用相同的控制器操作。添加
$this->data=array();
在用户刷新页面时仍然发送数据。
$this->Contact->find('count',array(
                               'conditions'=>array(
                                       'email'=>$this->data['Contact'] ['email'],
                                        'created <'=>date("Y-m-d H:i:s", strtotime('-5 minutes)));