【问题标题】:Email form is refreshing page电子邮件表单正在刷新页面
【发布时间】:2019-11-29 13:04:03
【问题描述】:

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

【问题讨论】:

  • 这里有很多重定向...重定向到哪里?这个脚本的网址是什么?
  • 您好,感谢您的回复,这是我从中获取代码的链接,我已经对其进行了调整,但我对 php 的了解非常少quackit.com/html/codes/html_form_to_email.cfm
  • 这里也是网站的链接 html 会变得更整洁我通常只是把代码扔进去然后整理一下,这样我就知道我在哪里artoo.laurajames.x10host.com/Quotation.html

标签: php html email


【解决方案1】:

调试 101

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

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

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

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

既然您知道它重定向到了一个意想不到的地方,请查找发生的位置(header: 语句)。这些都以if 语句开头。正在测试的值是什么?

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

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

继续同样的过程来找出其余的错误。

【讨论】:

    猜你喜欢
    • 2015-01-01
    • 2021-01-26
    • 2011-06-25
    • 2017-07-08
    • 2020-05-15
    • 2015-07-10
    • 2021-11-21
    • 2011-01-19
    • 1970-01-01
    相关资源
    最近更新 更多