表单数据的PHP查看页面在处理之前(例如通过电子邮件发送)

时间:2013-04-17 19:00:33

标签: php forms post preview

我有HTML表单,只通过PHP将填充的表单发送到电子邮件。我需要先将该信息发送到评论页面,以便客户检查所有填写的信息,让他们检查并再次提交,然后才将该信息发送到电子邮件。怎么做?

以下是代码:

<?php
// Please specify your Mail Server - Example: mail.yourdomain.com.
ini_set("SMTP", "mail.amaderica.com");
// Please specify an SMTP Number 25 and 8889 are valid SMTP Ports.
ini_set("smtp_port", "25");
// Please specify the return address to use
ini_set('sendmail_from', 'ravila@art.com');

$name = $_POST['Attention_To'];

// Set parameters of the email
$to = "ravila@art.com";
$subject = "Art Promo Items Ordered";
$from = " nostrowski@art.com";
$headers = "From: $from";

$message =
    "Order has been placed. Attn to: $name .\n" .
    "Items:\n";
foreach ($_POST as $fieldName => $fieldValue)
{
    if (!empty($fieldValue))
        $message .= "   $fieldName: $fieldValue\n";
}

// Mail function that sends the email.
mail($to, $subject, $message, $headers);

header('Location: thank-you.html');
?>

我表单中的部分字段为silver_name_badgescoffee_mugplastic_bagpaper_bagcandymoist_towlette,{{1 }},notepad_and_pentuck_boxred_tiecap等。

1 个答案:

答案 0 :(得分:3)

审核页面

将表单提交到评论页面,而不是发送页面(=您的问题代码)。除了呈现评论页面本身(包含所有数据)之外,将数据副本放入隐藏表单字段。添加电子邮件提交按钮,该按钮将数据(实际上与原始表单格式相同)提交到发送页面。

示例:

<dl>
<?
if (!empty($_POST['plastic_bag']))
{
?>
    <dt>Plastic bag:</dt>
    <dd><?=htmlspecialchars($_POST['plastic_bag'])?></dd>
<?
}
if (!empty($_POST['paper_bag']))
{
?>
    <dt>Paper bag:</dt>
    <dd><?=htmlspecialchars($_POST['paper_bag'])?></dd>
<?
}
// and so forth for all fields 
?>
</dl>

<form action="your_mailing_script_from_your_question.php" method="post">
<?
foreach ($_POST as $key => $value)
{
    echo "<input type=\"hidden\" name=\"".htmlspecialchars($key).
         "\" value=\"".htmlspecialchars($value)."\"/>\n";
}
?>
<input type="submit" value="Email this"/>
</form>

“后退”按钮

在HTML4中,您不能在同一表单上有两个按钮将表单提交到其他URL。所以有两种选择:

  • 更简单:制作两个表单,每个表单包括所有隐藏字段和一个按钮。每个表单都提交一个不同的URL,一个提交给电子邮件,一个提交回表单。
  • 保留一个提交的表单,比如电子邮件地址,但是那里的脚本会检查按下了哪个按钮(您必须命名该按钮并检查empty($_POST["button_name"]))。然后它检测到按下了“后退”按钮,它将帖子重定向回表单URL。

在HTML5中,您可以将每个按钮提交到不同的网址。检查formaction标记的input属性。我不知道,如果你能负担得起使用HTML5。在浏览器中查看support for the attribute

当然,您必须修改表单脚本以使用“后退”按钮提交的数据填写表单。 E.g:

<p>
<label for="plastic_bag">Plastic bag:</label>
<?
$value =
    !empty($_POST["plastic_bag"]) ? htmlspecialchars($_POST["plastic_bag"]) : NULL;
?>
<input name="plastic_bag" id="plastic_bag" value="<?=$value?>"/>
</p>