如何将 2 个不同的提交按钮放在一个表单中(使用 CI)?
Posted
技术标签:
【中文标题】如何将 2 个不同的提交按钮放在一个表单中(使用 CI)?【英文标题】:How to put 2 different Submit Buttons in a form (with CI)? 【发布时间】:2012-07-08 14:42:24 【问题描述】:我有一个表单,我希望用户选择 2 种不同的结帐方式:
假设用户输入了他的信息,例如他的地址、姓名和信用信息。 最后,使用 Paypal Pro,我希望他能够选择是否要通过 paypal 结帐或通过直接付款...这将导致第二个表单。
顺便说一句,使用 CodeIgnieter,当跟随一个表单与另一个表单时,我得到了始终运行的第二个表单的验证过程,我的意思是当我从第一个表单来到第二个表单时,在第二个表单中我即使用户尚未尝试提交,也会看到我的错误消息出现在每个字段中。有没有办法避免这个错误?
谢谢!
【问题讨论】:
【参考方案1】:我个人更喜欢的另一种方法是将每个提交按钮命名为不同的名称,如下所示:
<form method="post" action="mysite.com/submit">
<input type="text" name="name1">
<input type="text" name="name2">
<input type="text" name="name3">
<input type="submit" name="direct" value="Direct">
<input type="submit" name="paypal" value="PayPal">
</form>
然后检查发送了哪个值:
if($this->input->post('direct'))
//Direct button was pressed
if($this->input->post('paypal'))
//Paypal button was pressed
【讨论】:
【参考方案2】:使用一些条件来应用验证规则。
if(isPayPalPro())
$this->form_validation->set_rules(....);
else
//validation credit card payment
使用一些条件代替 isPayPalPro()。
【讨论】:
【参考方案3】:已编辑:见答案结尾
你应该像往常一样做:
查看:
<form method="post" action="mysite.com/submit">
<input type="text" name="name1">
<input type="text" name="name2">
<input type="text" name="name3">
<input type="submit" name="sbm" value="Direct">
<input type="submit" name="sbm" value="PayPal">
</form>
在 php 中(可能是控制器):
if($this->input->post('sbm') == "PayPal")
// do something with PayPal
else
// do something with direct payment
已编辑:如果您希望按钮的标题(可见文本)与值不同,请使用 <button>
元素而不是 <input type="submit">
:
<button name="payment_type" value="paypal" type="submit">I want to pay with PayPal</button>
<button name="payment_type" value="direct" type="submit">Or should I go with Direct Payment?</button>
【讨论】:
谢谢,关于这个错误有什么想法吗?不考虑 CI,在 PHP 中,如果你有 2 个表单一个接一个,你不会对第二个的验证过程有任何问题吗?似乎当您单击提交第一个表单时,它会尝试同时提交第二个表单,即使它还没有弹出。然后 CI 向我显示错误消息... 如果不检查您的代码就不能说太多。您的表格名称是否不同?你确定它们不相交吗? (应该是<form></form><form></form>
,而不是<form><form></form></form>
。
是的,它在控制器中有 2 个不同的功能,2 个不同的视图。我会在明天早上编辑你的帖子 :) 需要睡觉!
因为这是一个不同的问题,你最好换一个新的。
绝对没有必要让每个按钮都具有相同的name
...IMO,一种不好的做法。给每个按钮一个唯一的name
和if ($this->input->post('unique_name')) ...
会很好地工作。以上是关于如何将 2 个不同的提交按钮放在一个表单中(使用 CI)?的主要内容,如果未能解决你的问题,请参考以下文章