【问题标题】:Multiple forms and one processing page多张表格和一个处理页面
【发布时间】:2012-05-14 14:22:49
【问题描述】:

请您帮忙解决一个问题。 我的主页上有两个表格,我希望用户在不同时间填写和提交。我的问题是我希望他们两个都只有一个处理页面。通常我可以在单独的页面中执行此操作。但我想知道是否可以在同一页面上进行操作。

好的..如果我在操作页面上提交表单 A,不会有未提交的表单 B 变量的未定义索引,当然不建议使用 GET。

感谢您的时间和耐心。

【问题讨论】:

    标签: php mysql forms


    【解决方案1】:

    这样做并非完全没有听说过。通常,在表单元素的操作属性中传递不同的参数,例如 /submit.php?action=register/submit.php?action=activate

    所以,你有这样的代码:

    if ($_GET['action'] == 'register') {
      // Register user
    } else if($_GET['action'] == 'activate' {
      // Activate user
    }
    

    但是,您也可以只更改提交按钮的值,并使两个表单的 action 属性相同:

    if (isset($_POST['submit'])) {
      if ($_POST['submit'] == 'register') {
        // Register user
      } else if($_POST['submit'] == 'activate') {
        // Activate user
      }
    }
    

    【讨论】:

      【解决方案2】:

      创建单独的 form_process 脚本,然后包含在表单页面中。

      if(!empty($_POST)){
       include 'form_process.php';
      }
      

      form_process.php 应该只包含没有回显或打印输出的类/函数。

      或者,您可以将操作 url 设置到同一页面,然后重定向回正确的页面。

      <form id="add-profile-form" action="form_controller.php" method="post">
          <input type="hidden" name="act" value="adding"/>
          <!-- form 1. -->
      </form> 
      
      <form id="edit-profile-form" action="form_controller.php">
          <input type="hidden" name="act" value="editing"/>
          <!-- form 2. -->
      </form>
      

      form_controller.php

      if(isset($_POST['act']){
          if($_POST['act'] == 'adding'){
              //process form1
          }else if($_POST['act'] == 'editing'){
              //process form2
          }
      
          header("Location: success.php");
      }
      

      【讨论】:

        【解决方案3】:

        您也可以在同一页面上执行此操作。只需要将两种形式的action 设为相同即可。

        您需要创建一些条件并为Form AForm B 编写单独的功能,具体取决于源表单。

        您可以检查@Ami 使用的参数。

        /submit.php?action=register/submit.php?action=activate

        所以,你有这样的代码:

        if ($_GET['action'] == 'register') {
          // Register user
        } else if($_GET['action'] == 'activate' {
          // Activate user
        }
        

        但是,您也可以只更改提交按钮的值,并使两个表单的操作参数相同:

        if (isset($_POST['submit'])) {
          if ($_POST['submit'] == 'register') {
            // Register user
          } else if($_POST['submit'] == 'activate') {
            // Activate user
          }
        }
        

        【讨论】:

        • 好的.. 如果我在操作页面上提交表单 A,不会有未提交的表单 B 变量的未定义索引,当然不建议使用 GET...谢谢
        • @ami ...你能解释一下你的代码分支是什么意思吗
        • @dotunoyesanmi,以我的回答为例。分支意味着使用if 或其他类似的流控制功能来根据某些标准更改您所做的事情。
        猜你喜欢
        • 1970-01-01
        • 2014-07-20
        • 2022-01-14
        • 2014-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多