php - 表单提交后传递变量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>";
}
}
解决方案
要将变量传递到定价确认页面,您可以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'];
}
}
推荐阅读
- css - 如何能够在弹性框(CSS)内滚动覆盖的 div?
- sql - SQLcode=-302 仅适用于某些用户
- r - 使用布尔输出匹配固定字符串 %in% / %like% 的加速
- node.js - 节点 - gcm 发送静默通知
- javascript - jQuery 自动完成列表设置为 display:none;
- vb.net - 查询中的 LINQ 相等运算符错误
- php - 在 codeigniter 错误中切换语言
- node.js - Typescript 在运行时动态加载模块
- ably-realtime - ConnectionManager.onChannelMessage() 接收到的消息具有不同的connectionSerial,但与之前的消息ID 相同;丢弃
- xamarin.forms - CrossCurrentActivity.Current.Activity 为 NULL,尽管初始化和设置了活动