2012-12-06 55 views
3

我知道这是不可能的一个HTML表单有两个动作,但也许有更好的办法让我完成我所需要的。我有一个简单的表单来收集用户的电子邮件地址并为他们注册一个常用联系人电子邮件列表。另外,电子邮件被提交给另一个控制器,该控制器显示包含表单中的$ email变量的感谢消息。由于表单信息正在发送给thankyou()和Constant Contact站点,因此我可以单独完成这两项工作,但无法让它们彼此同步工作。我确信有一种方法可以让我通过thankyou()控制器将这些数据发送到Constant Contact,我不知道该怎么做。Codeigniter表单提交到多个地方

此外,我不能使用Ajax,因为我需要显示一个不同的页面提交,以跟踪感谢页面已被查看多少次。

+0

你可以使用'$ _SESSION'数据吗?我相信codeigniter也可以创建Flash会话数据,因为它曾经使用过,然后被删除。 – Dale

+0

你可以显示你用于常量联系人提交的代码吗?因为我没有理由为此使用第二个控制器函数或flashdata。当我创建用户时,我使用同一控制器写入三个模型和MailChimp,而且没有问题 –

+0

在_sign up_ --then-- _say hello_例中,您可以简单地从一个控制器重定向到另一个控制器。在更复杂的情况下,您可以通过ajax调用(客户端javascripted)设置多个操作。您仍然可以浏览其他页面,将任何ajax回复保存到浏览器的localStorage。 –

回答

1

使用flashdata,并将电子邮件地址存储在flashdata变量中。

$this->session->set_flashdata('email', $email); 

请记住,如果未在下一个请求中使用flashdata,则需要“保留”flashdata,否则它将消失。

$this->session->keep_flashdata('email'); 

然后,该视图的$email变量设置为$this->session->flashdata('email');

+0

这似乎是我正在寻找!所以我基本上在$ this-> session-> set_flashdata('emailAddr')中设置了电子邮件地址,并立即将此信息传递给常量联系人? –

+0

我会做的是设置flashdata,提交给常量联系人的API(这就是你在做什么,对吧?),然后加载包含确认页面的视图。我不确定为什么你需要flashdata,但是如果你可以给我们更多关于你当前使用的过程的细节,那将会有帮助。 – Brendan

+0

我避免使用API​​,因为它是一个简单的提交表单,并且常用的联系人处理得很好。那时我遇到了向两台不同的服务器提交数据的问题。我认为这将是更容易与API不是吗? –

0

应该是这样的: - 鉴于:

<form action="mycontroller/save"> 
</form> 

在myController的:

public function save(){ 
    // Do whatever you have to do 
    $this->session->set_flashdata('email',$this->input->post('useremail')); 
    redirect('url to thankyou() controller'); 

} 

谢谢你的控制器:

public function save(){ 
    // Do whatever you have to do 
    $email = $this->session->flashdata('email'); 
    $this->load->view('yourview',$email); 

} 
+0

这将工作,如果在保存()我可以提交数据到http://constantcontact.com/blahblahblah。有没有办法通过控制器来做到这一点? –

+0

你是什么意思?并且节省了你正在谈论的第一或第二 –