如何将 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

已编辑:如果您希望按钮的标题(可见文本)与值不同,请使用 &lt;button&gt; 元素而不是 &lt;input type="submit"&gt;

<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 向我显示错误消息... 如果不检查您的代码就不能说太多。您的表格名称是否不同?你确定它们不相交吗? (应该是&lt;form&gt;&lt;/form&gt;&lt;form&gt;&lt;/form&gt;,而不是&lt;form&gt;&lt;form&gt;&lt;/form&gt;&lt;/form&gt; 是的,它在控制器中有 2 个不同的功能,2 个不同的视图。我会在明天早上编辑你的帖子 :) 需要睡觉! 因为这是一个不同的问题,你最好换一个新的。 绝对没有必要让每个按钮都具有相同的name...IMO,一种不好的做法。给每个按钮一个唯一的nameif ($this-&gt;input-&gt;post('unique_name')) ... 会很好地工作。

以上是关于如何将 2 个不同的提交按钮放在一个表单中(使用 CI)?的主要内容,如果未能解决你的问题,请参考以下文章

如何阻止具有相同触发按钮但功能不同的表单提交?

如何在具有 Ajax 的单个表单中使用多个提交按钮 [关闭]

具有多个不同提交按钮的 MVC 剃须刀表单?

使用一个提交按钮将数据从 2 个表单传递到数据库

将 DIVS 放在一行然后居中

有没有办法用 1 个提交按钮 mvc 提交 3 个表单