首页 > 解决方案 > 表单提交后传递变量PHP

问题描述

提交表单后,是否有一种有效的方法将变量从一个页面传递到另一个页面?我正在努力维护表单页面上提交的变量,以便在提交时重定向后将它们显示在确认页面上。

这可能是我用 $_POST '存储'数据的方式吗?我应该使用会话吗?如果我应该如何将 $_POST 存储在 $_SESSION 中并能够在电子邮件模板中以 $variable-name 格式调用它?正在使用 header(); 以这种方式重定向效率低下,也许通过ajax重定向?如果是这样,我不确定我将如何处理。

形式:

<form id="pricing-form-inquiry" action="<?php echo get_stylesheet_directory_uri(); ?>/pricing-form/form-handler.php" method="POST" role="form">
    <div class="pricing-modal" id="modal1" data-animation="slideInOutLeft">
        <div class="modal-dial">
            <header class="modal-head">
                <a class="close-modal" aria-label="close modal" data-close></a>
            </header>
            <section class="modal-body">
                <div class="row">
                    <div class="col">
                        <input type="text" class="" placeholder="First Name" name="first-name" required data-error="First Name is required."> 
                    </div>
                    <div class="col">
                        <input type="text" class="" placeholder="Last Name" name="last-name" required data-error="Last Name is required."> 
                    </div>
                </div>
                <input type="email" class="" placeholder="Email Address" name="email" required data-error="Email Address is required.">
                <input type="text" class="" placeholder="Company" name="company" id="company">
                <input type="text" class="" placeholder="Phone Number" name="phone" id="phone">
                <div class="row">
                    <div class="col text-center"></div>
                </div>
            </section>
            <footer class="modal-foot">
                <input type="submit" class="pricing-form-submit" value="Calculate" name="submit">
            </footer>
        </div>
    </div>
</form>

表单处理程序.php

if(isset($_POST['submit'])) {
    $first_name                     = filter_var($_POST['first-name'], FILTER_SANITIZE_STRING);
    $last_name                      = filter_var($_POST['last-name'], FILTER_SANITIZE_STRING);
    $email                          = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
    $company                        = filter_var($_POST['company'], FILTER_SANITIZE_STRING);
    $phone                          = filter_var($_POST['phone'], FILTER_SANITIZE_STRING);

    $to = "email@email.com";             // Email Address to send lead to
    $subject = "Subject Goes Here!";     // Subject of generated lead email

    // HTML Message Starts here
    $message = "<html><body><table style='width:600px;'><tbody>";
    $message = "<tr><td style='width:150px'><strong>Name: </strong></td><td style='width:400px'>$first_name $last_name </td></tr>";
    $message = "<tr><td style='width:150px'><strong>Email Address: </strong></td><td style='width:400px'>$email</td></tr>";
    $message = "<tr><td style='width:150px'><strong>Company Name: </strong></td><td style='width:400px'>$company</td></tr>";
    $message = "<tr><td style='width:150px'><strong>Phone Number: </strong></td><td style='width:400px'>$phone</td></tr>";
    $message = "</tbody></table></body></html>";
    // HTML Message Ends here

    // Always set content-type when sending HTML email
    $headers = "MIME-Version: 1.0" . "\r\n";
    $headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";

    // More headers
    $headers .= 'From: Company <from@email.com>' . "\r\n"; // User will get an email from this email address
    // $headers .= 'Cc: from@email.com' . "\r\n"; // If you want add cc

    if(mail($to,$subject,$message,$headers)){
        // Message if mail has been sent
        echo "<script>
                alert('Mail has been sent Successfully.');
             </script>";
             header("Location: /pricing-confirm/");
    } else {
        // Message if mail has been not sent
        echo "<script>
                alert('EMAIL FAILED');
              </script>";
    }
}

标签: phpwordpressformssession

解决方案


要将变量传递到定价确认页面,您可以header()像这样在函数中传递变量

header("Location: /pricing-confirm.php?name=" . $first_name);

在您的定价确认.php 页面上,您可以从查询字符串中获取变量

if(isset($_GET['name']) {
 $name = $_GET['name'];
}

如果你想一次传递多个变量,你可以在查询字符串中使用 & ,或者使用urldecode这样的数组

$arr = [
  "firstname" => $first_name,
  "lasttname" => $last_name,
]

header("Location: /pricing-confirm.php?userdetails=" . urlencode(serialize($arr)));

如果你使用了序列化,你可以像这样获取数组中的值

$queryArr = unserialize(urldecode($_GET['userdetails']));

然后您可以使用它们的数组键访问它们,就像这样

if(isset($_GET['userdetails']) {
  $arr = $_GET['userdetails'];
  if(isset($arr['firstname']) {
    $firstName = $arr['firstname'];
  }
}

推荐阅读