php - 电子邮件表单正在刷新页面
问题描述
我正在尝试制作一个我已经成功完成的报价单,但我真的在 php 方面苦苦挣扎。我在网上借了一些代码,并试图让它适应我的表单,但它不断刷新页面,请问有没有人可以帮忙?
这是我的代码
<?php
/*
This first bit sets the email address that you want the form to be submitted to.
You will need to change this value to a valid email address that you can access.
*/
$webmaster_email = "jhugill94@gmail.com";
/*
This bit sets the URLs of the supporting pages.
If you change the names of any of the pages, you will need to change the values here.
*/
$feedback_page = "/Quotation.html";
$error_page = "/error_message.html";
$thankyou_page = "/thank_you.html";
/*
This next bit loads the form field data into variables.
If you add a form field, you will need to add it here.
*/
$senderFirst = $_REQUEST['senderFirst'] ;
$senderLast = $_REQUEST['senderLast'] ;
$senderNumber = $_REQUEST['senderNumber'] ;
$senderEmail = $_REQUEST['senderEmail'] ;
$issue_discription = $_REQUEST['issue_discription'] ;
$car_make = $_REQUEST['car_make'] ;
$car_model = $_REQUEST['car_model'] ;
$fuel_type = $_REQUEST['fuel_type'] ;
$engine_size = $_REQUEST['engine_size'] ;
$image_upload = $_REQUEST['image_upload'] ;
$msg =
"First Name: " . $senderFirst . "\r\n" .
"Sur Name: " . $senderLast . "\r\n" .
"Contact Number: " . $senderNumber . "\r\n" .
"Email: " . $senderEmail . "\r\n" .
"Issue Discription: " . $issue_discription ;
"car_make: " . $car_make ;
"car_model: " . $car_model ;
"fuel_type: " . $fuel_type ;
"engine_size: " . $engine_size ;
"image_upload: " . $image_upload ;
/*
The following function checks for email injection.
Specifically, it checks for carriage returns - typically used by spammers to inject a CC list.
*/
function isInjected($str) {
$injections = array('(\n+)',
'(\r+)',
'(\t+)',
'(%0A+)',
'(%0D+)',
'(%08+)',
'(%09+)'
);
$inject = join('|', $injections);
$inject = "/$inject/i";
if(preg_match($inject,$str)) {
return true;
}
else {
return false;
}
}
// If the user tries to access this script directly, redirect them to the feedback form,
if (!isset($_REQUEST['email_address'])) {
header( "Location: $feedback_page" );
}
// If the form fields are empty, redirect to the error page.
elseif (empty($first_name) || empty($email_address)) {
header( "Location: $error_page" );
}
/*
If email injection is detected, redirect to the error page.
If you add a form field, you should add it here.
*/
elseif ( isInjected($email_address) || isInjected($first_name) || isInjected($comments) ) {
header( "Location: $error_page" );
}
// If we passed all previous tests, send the email then redirect to the thank you page.
else {
mail( "$webmaster_email", "Feedback Form Results", $msg );
header( "Location: $thankyou_page" );
}
?>
解决方案
调试 101
从头开始,并故意将其分解为中途;即,die(‘good to here’);
。如果您在运行脚本时看到“good to here”,则将其删除并按照脚本进行操作。
这是最幼稚的方法,但它可能是有效的。
使用相同的想法,扫描脚本并跟踪变量,以便您手动遵循程序流程。通过这种方式,您可以在尝试断点的位置上更具战略性。
一个常见的问题是我们认为代码所做的与它实际所做的不匹配。
既然您知道它在一个意想不到的地方重定向,请寻找发生的地方(header:
语句)。这些都在if
声明之前。正在测试的值是什么?
- 的价值是
$_REQUEST['email_address']
多少?我无法从给出的信息中回答这个问题。 - 的价值是
$first_name
多少?是空的吗?它甚至存在吗?
瞧,你发现了其中一个问题。 $first_name
从未分配过(您分配过$sender_first
),如果您为开发环境正确设置了错误报告,则实际上会生成通知。它也被评估为空,因此条件为真并重定向到错误页面。
继续此相同过程以查找其余错误。
推荐阅读
- mysql - 来自通用函数“dbListFields”的无效值,“数字”类,预期的“字符”
- python - 使用永无止境的线程处理带有 Newspaper3k (python3 lib) 的 URL 列表
- php - mysql 连接查询没有得到正确的输出
- mysql - 如何解决 java.sql.BatchUpdateException: number not valid
- api - Power BI 在使用 API 时刷新在线数据集
- java - 并非所有使用 JDBC 模板的变量绑定异常
- css - 如何定位动态大小的图像与顶部边框齐平?
- javascript - 如何以现有对象为参考创建新对象
- ios - 如何在 iOS swift 中将 .opus 文件转换为 .mp3/.m4a/.aac?
- makefile - Makefile:包含在循环/循环外部目标