首页 > 解决方案 > 电子邮件表单正在刷新页面

问题描述

我正在尝试制作一个我已经成功完成的报价单,但我真的在 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" );
}
?>

标签: phphtmlemail

解决方案


调试 101

从头开始,并故意将其分解为中途;即,die(‘good to here’);。如果您在运行脚本时看到“good to here”,则将其删除并按照脚本进行操作。

这是最幼稚的方法,但它可能是有效的。

使用相同的想法,扫描脚本并跟踪变量,以便您手动遵循程序流程。通过这种方式,您可以在尝试断点的位置上更具战略性。

一个常见的问题是我们认为代码所做的与它实际所做的不匹配。

既然您知道它在一个意想不到的地方重定向,请寻找发生的地方(header:语句)。这些都在if声明之前。正在测试的值是什么?

  1. 的价值是$_REQUEST['email_address']多少?我无法从给出的信息中回答这个问题。
  2. 的价值是$first_name多少?是空的吗?它甚至存在吗?

瞧,你发现了其中一个问题。 $first_name从未分配过(您分配过$sender_first),如果您为开发环境正确设置了错误报告,则实际上会生成通知。它也被评估为空,因此条件为真并重定向到错误页面。

继续此相同过程以查找其余错误。


推荐阅读