电子邮件前的php表单检查
我看到了与此相关的另一个主题,但仍然有点困惑,因为我仍然是PHP的基础。因此,我有一个表单发布到我的Order.php。这会发送电子邮件,效果很好。我想将表单发布到Review.php,然后发送。下面是我的Order.PHP(由于数组很长,我从数组中删除了一些输入字段)。我想在review.php上,我可以只使用order.php的所有代码,而不是电子邮件前的php表单检查,php,forms,review,Php,Forms,Review,我看到了与此相关的另一个主题,但仍然有点困惑,因为我仍然是PHP的基础。因此,我有一个表单发布到我的Order.php。这会发送电子邮件,效果很好。我想将表单发布到Review.php,然后发送。下面是我的Order.PHP(由于数组很长,我从数组中删除了一些输入字段)。我想在review.php上,我可以只使用order.php的所有代码,而不是$send=mail($to,$subject,$body,$headers)我可以在一些html中请求$to、$subject、$body、$hea
$send=mail($to,$subject,$body,$headers)
我可以在一些html中请求$to、$subject、$body、$headers
,然后有一个sumbit按钮,将它们发送到order.php,该按钮将简化,因为所有数据都在查看页面中处理。听起来对吗
php如下所示
<?php
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
$to = "packy@mycompany.com";
$name = $_REQUEST['FitterName'] ;
$from = $_REQUEST['FitterEmail'] ;
$headers = "From: $from";
$subject = "Online Order";
$name2 = $_REQUEST['CustomerEmail'] ;
$grind = join(", ", $_REQUEST["grind"]);
$woods = join(", ", $_REQUEST["woods"]);
$hybrids = join(", ", $_REQUEST["hybrids"]);
$iron = join(", ", $_REQUEST["iron"]);
$wedges = join(", ", $_REQUEST["wedges"]);
$fields = array();
$fields{"AccountName"} = "Accounts's Name: ";
$fields{"FitterName"} = "Fitter's Name: ";
$fields{"CustomerCat"} = "__________________________CUSTOMER INFO__________________________";
$fields{"CustomerName"} = "Customer's Name: ";
$fields{"CustomerPhone"} = "Customer's Phone: ";
$fields{"CustomerAddress"} = "Customer's Address: ";
$body = "We have received the following Online Order from www.mycompany.com:\n\n"; foreach($fields as $a => $b){ $body .= sprintf("%2s %s\n",$b,$_REQUEST[$a]); }
$body2 = "Please Review the following Online Order from www.mycompany.com:\n\n"; foreach($fields as $a => $b){ $body2 .= sprintf("%2s %s\n",$b,$_REQUEST[$a]); }
$headers2 = "From: noreply@mycompany.com";
$subject2 = "Thank you for your order";
$autoreply = "Thank you for your order. Customer service will call in the next 24 hours to review your order.";
$autoreply2 = "Company Customer";
if($from == '') {print "You have not entered an email, please go back and try again";}
else {
if($name == '') {print "You have not entered a name, please go back and try again";}
else {
$send = mail($to, $subject, $body, $headers);
$send2 = mail($from, $subject2, $autoreply, $headers2);
$send3 = mail($name2, $subject2, $autoreply2, $headers2);
if($send)
{header( "Location: http://fitter.henry-griffitts.com/fitter/success.php" );}
else
{print "We encountered an error sending your mail, please review your information"; }
}
}
?>
是
您可以向用户展示一个查看页面,并隐藏在该页面中,您可以嵌入他们在订单页面上提供的信息
查看页面确认按钮标记强>
<form name="review" action="order.php" method="POST">
<input type="hidden" name="FitterName" value="Bob Smith">
<input type="hidden" name="FitterEmail" value="a@b.com">
<input type="submit" value="Submit">
</form>
当他们点击审查页面上的提交按钮时,他们的订单信息。将被转发到order.php
页面。下面是一个关于review.php文件的基本示例。它将每个字段添加为表单中的隐藏输入变量
<p>Does everything look correct?</p>
<form method="post" action="order.php">
<ul>
<?php
if (is_array($_REQUEST)) {
foreach ($_REQUEST as $key => $val) {
echo "<li><strong>" . $key . "</strong>: " . $val . "</li>";
// This code should support the checkboxes and multiple selects
if (is_array($val)) {
foreach ($val as $val2) {
echo "<input type='hidden' name='" . $key . "[]' value='" . $val2 . "' />";
}
}
else {
echo "<input type='hidden' name='" . $key . "' value='" . $val . "' />";
}
}
}
?>
</ul>
<input type="submit" value="Submit Info" />
</form>
一切看起来都正确吗
因此,我会将原始HTML表单中的所有字段隐藏并包装在
中,以提交给下一个进程。如何在review.php上显示$body中的数据,以便他们在提交之前检查数据?谢谢你可以把他们的数据放在表单外的review.php
页面的其他地方,以供查看。例如,echo”Name:{$\u REQUEST['FitterName']}
谢谢。我最终使用了你们两个解决方案。谢谢,效果非常好。我刚刚有两个问题@jon\u o:[ul]-有没有办法只发布填写了信息的输入,而不是列出所有的信息?-一些我称之为V-Grind Tour Grind
[/ul]所以我可以调用多个复选框。当我测试这个数据时,它看起来像“wedges:Array”“在review.php上。我怎样才能解决这个问题?再次感谢@Packy,我更新了上面的代码,以展示如何重写作为隐藏输入的数组字段。或者,您可以只检查字段是否是一个数组,就像我在代码示例中看到的那样,但随后只是内爆成一个字符串,如echo”“
然后只需更新order.php,将字段作为字符串而不是数组接受。这有意义吗?@jon_o,谢谢你。但它仍将值显示为“数组”,如“grinds:array”。我尝试了上面的代码,并将其更改为字符串。在第一个表单中,尝试将所有字段的名称从grind[V-grind]
更改为grind[]
。如果这不起作用,请在review.php页面上打印出请求数组,然后查看得到的结果:print\r($\u request)
。
<?php
//define some fields
define("HEADERS", "MIME-Version: 1.0\r\nContent-type:text/html;charset=iso-8859-1\r\nFrom: noreply@mycompany.com\r\n");
define("BODY_1", "We have received the following Online Order from www.mycompany.com:");
define("BODY_2", "Please Review the following Online Order from www.mycompany.com:");
define("SUBJECT_1", "Online Order");
define("SUBJECT_2", "Thank you for your order");
define("MY_EMAIL", "packy@mycompany.com");
define("REPLY", "Thank you for your order. Customer service will call in the next 24 hours to review your order.")
//sanitize your inputs. I like to remove every character that is not allowed
$data = array(
'name' => preg_replace('/[^A-Za-z\\s]/', '', $_POST['FitterName']),
'email' => preg_replace('/[^A-Za-z0-9\\.@-_]/', '', $_POST['CustomerEmail']),
'fitter' => preg_replace('/[^A-Za-z0-9\\.@-_]/', '', $_POST['FitterEmail']),
'grind' => preg_replace('/[^A-Za-z\\s,]/', '', implode(',', $_POST['grind'])),
//the rest of your fields
);
//do your field checks here, exit out or return them to the form
//send your emails
$send = mail(MY_EMAIL, SUBJECT_1, BODY_1 . print_r($data, true), HEADERS);
$send2 = mail($data['fitter'], SUBJECT_2, BODY_2 . print_r($data, true), HEADERS);
$send3 = mail($data['email'], SUBJECT_2, REPLY, HEADERS);
//more code and redirect