【问题标题】:Multiple forms on one page, and to decide which form has been submitted using PHP?一个页面上有多个表单,并决定使用 PHP 提交哪个表单?
【发布时间】:2011-10-26 10:19:51
【问题描述】:

我的页面上有多个表单(2 个表单)。

页面底部有一个调用表单和一个联系人表单。

因此,客户可以选择只输入电话号码并在一个表格中按提交,或者他们可以在另一个表格中填写姓名、电子邮件和消息,然后按提交。

我正在开发一个 PHP mail() 函数来区分正在提交的表单,但是我上次忘记了很多编程,所以我再次求助于你在这里做什么。

我如何在 PHP 代码中区分提交的表单?

这就是我现在在 php 中的内容:

$type = $_POST['type'];

    if($type == 'callup'){
        $tel_nr = $_POST['tel'];

        $to     =       'info@domain.se';
        $subject    =   'Call customer';
        $message    =   'Client telephone nr is '.$tel_nr.'.';
        $message    .=  '\n';
        $message    .=  'Client signed in at this date and time: '.date('Y-m-d').' Time: '.date('H:m:s').'';

        mail($to, $subject, $message);

    }

基本上我想做的是在客户提交表单时给自己发送一封电子邮件。但是根据客户提交的表单,我想发送相应的电子邮件。

【问题讨论】:

    标签: php javascript html forms email


    【解决方案1】:

    使用多个名称提交:

    在您的第一个表单中:

    <input type="submit" name="address" value="Submit Address" />
    

    第二种形式:

    <input type="submit" name="zipcode" value="Submit Zipcode" />
    

    然后,在服务器端检查可用的名称:

    if (isset($_POST['address'])) {
        // ...
    } else if (isset($_POST['zipcode'])) {
        // ...
    }
    

    【讨论】:

      【解决方案2】:

      将每个表单发送到不同的操作:

      <form action="foo.php" method="post">
          <!-- phone number form -->
      </form>
      
      <form action="bar.php" method="post">
          <!-- name/email/message form -->
      </form>
      

      然后,每个 PHP 脚本都会针对给定的输入执行它需要执行的操作,并在最后重定向回您的表单页面。优点:每个脚本只需要担心自己的一组输入,并且您避免了切换“动作”标志的大ifs 和/或switches。

      【讨论】:

      • 也许添加一个 get 参数更有帮助,因为它会阻止每个表单提交创建一个文件。
      • 我认为有一个单独的 PHP 脚本来处理每个表单更好;它分离了关注点(即你没有一个大的“handleAction.php”),并鼓励一种更像 MVC 的结构。
      • 我也是根据经验说话的。我使用过在操作 GET 参数上使用巨型多选项 switches 的代码,它调试或扩展很有趣。
      • 好的,这是另一个讨论:stackoverflow.com/questions/6814626/…——但是使用两个前端控制器并不比使用一个前端控制器或多或少 MVC,所以我可以对你的论点表示同情,但如果我遵循它的话,它不是一个赞成或反对的论点。无论如何,对于整体建议 +1,任何控制器都需要理解所请求的命令,无论它是如何通过的。
      • 确实这是一个不同的论点,每种情况都需要最适合其需求的解决方案。如果操作开关在 OP 的情况下对这个问题运行良好,那很好。
      【解决方案3】:

      如果您只有一个表单,您可以使用更好的名称来标识每个表单。例如,您可以将前缀 form1_ 添加到每个输入对象,将 form2 添加到每个第二个表单输入对象。然后你可以为每个输入对象添加一个默认值来识别对象。

      【讨论】:

        【解决方案4】:

        或者您可以添加隐藏字段并检查该字段是否已设置并处理一种表单。 最简单的方法是使用 array_key_exist 检查该键是否作为数组的一部分存在

        if(array_key_exist("form1")){}
        else if(array_key_exist("form2")){}
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-26
          相关资源
          最近更新 更多