请参阅下面的更新原始问题:
我在使用联系表格时遇到问题。 我对 PHP 相当陌生,但他们一直在工作,直到最近一个不相关的问题需要我的主机......:(...从 ISAPI 切换回 CGI。 知道这不是一项技术的灵活(最新),我对这项技术更熟悉,所以我可以接受它。
切换后问题开始,我的联系表单都显示"未定义的索引"错误。
我把我所有的代码都放在同一个页面上(表单、处理、验证、谢谢),并且正在拔头发试图找出问题所在。 我相信有一些关于额外验证等的建议,但现在......我只需要这个表格就可以工作。
表单之一:www.faa-air.com/contact/php/mailer.php 正确提交,但页面底部有乱码文本。
另一种形式:www.faa-air.com/contact/php/consultmailer.php 未正确提交。 它发送表单的结果,但它是空白的,网页底部仍然有所有的乱码。
下面是一个不起作用的代码(consultmailer.php),但两者都是相互开发的,所以它们在逻辑上应该是相同的......所以不知道出了什么问题。
有什么想法吗?
<?php
if (empty($_POST['Submit'])) :
include 'phpconsultform.php'
?>
<?php
endif;
//FORM VALIDATION AND PROCESSING
$arrErrors = array();
if (!empty($_POST['Submit']))
{
if ($_POST['f_name'] == '')
$arrErrors['f_name'] = 'Your First Name is a Required.';
if ($_POST['l_name'] == '')
$arrErrors['l_name'] = 'Your Last Name is a Required.';
if ($_POST['contactemail'] == '')
$arrErrors['contactemail'] = 'A Valid Email Address is Required.';
if ($_POST['contactphone'] == '')
$arrErrors['contactphone'] = 'A Valid Phone Address is Required.';
//else if (filter_var('emailaddress', FILTER_VALIDATE_EMAIL) === FALSE)
// $arrErrors['emailaddress'] = 'Check the format of your email.';
if (count($arrErrors) == 0)
{
//FORM PROCESSING AFTER VALIDATION
$f_name = $_GET['f_name'];
$l_name = $_GET['l_name'];
$email = $_GET['contactemail'];
$phone = $_GET['contactphone'];
$phone2 = $_GET['contactotherphone'];
$avail = $_GET['availability'];
$time = $_GET['timeday'];
$freq = $_GET['frequency'];
$cert = $_GET['current_cert'];
$rate = $_GET['current_rate'];
$need1 = $_GET['cert_need'];
$need2 = $_GET['rate_need'];
$TT = $_GET['TT'];
$XT = $_GET['XT'];
$COMPLX = $_GET['COMPLX'];
$IFRT = $_GET['IFRT'];
$PICT = $_GET['PICT'];
$NGT = $_GET['NGT'];
$refer = $_GET['contactrefer'] ;
$comments = $_GET['contactcomments'] ;
$message .= 'The following request was submitted by ' .$f_name. ' ' .$l_name. "nn";
//$message .= 'Please respond within 1 business day' "nn";
$message .= 'Name: ' .$f_name. ' ' .$l_name. "n";
$message .= 'Email: ' .$email. "n";
$message .= 'Phone Number: ' .$phone. "n";
$message .= 'Other Phone: ' .$phone2. "nn";
$message .= 'Availability: ' ;
{
foreach($avail as $value)
{
$message .= trim(stripslashes($value)) . "n";
}
}
$message .= 'Time of Day: ' ;
{
foreach($time as $value_2)
{
$message .= trim(stripslashes($value_2)) . "n";
}
}
$message .= 'Frequency: ' ;
{
foreach($freq as $value_3)
{
$message .= trim(stripslashes($value_3)) . "n";
}
}
$message .= "nn";
$message .= 'Certifications Held: ' ;
$message .= "nn";
{
foreach($cert as $value_4)
{
$message .= "-- " . trim(stripslashes($value_4)) . "n";
}
}
$message .= "nn";
$message .= 'Rating Held: ' ;
$message .= "nn";
{
foreach($rate as $value_5)
{
$message .= "-- " . trim(stripslashes($value_5)) . "n";
}
}
$message .= "nn";
$message .= 'Certificates Needed: ';
$message .= "nn";
{
foreach($need1 as $value_6)
{
$message .= "-- " . trim(stripslashes($value_6)) . "n";
}
}
$message .= "nn";
$message .= 'Ratings Needed: ';
$message .= "nn";
{
foreach($need2 as $value_7)
{
$message .= "-- " . trim(stripslashes($value_7)) . "n";
}
}
$message .= "nn";
$message .= 'Current Logbook Times' . "n" ;
$message .= 'Total Time: ' .$TT. "n";
$message .= 'Cross Country Time: ' .$XT. "n";
$message .= 'Complex Time: ' .$COMPLX. "n";
$message .= 'IFR Time: ' .$IFRT. "n";
$message .= 'PIC Time: ' .$PICT. "n";
$message .= 'Night Time: ' .$NGT. "nn";
$message .= "nn" ;
$message .= 'Refer: ' .$refer. "nn";
$message .= 'Comments: ' .$comments ;
$message .= "nn" ;
$message .= "nn" ;
$message .= "nn" ;
mail ( "you@knowwho.com", " Custom Consult Inquiry", $message, $email) ;
//DISPLAY THANK YOU PAGE
include 'thankyou.php';
}
else
{
$displayError = '<div align="center"><ul>';
foreach ($arrErrors as $error)
{
$displayError .="<li><b>$error</b></li>";
}
$displayError .= '</div></ul>';
//DISPLAY FORM WITH ERRORS
include 'phpconsultform.php'
?>
<?php
}
}
?>
更新
我能够正确发送表格,但已更改,
$f_name = $_GET['f_name'] ;
自 $f名称 = $_REQUEST['f_name'] ;
我确定存在一些问题(我又是新手),但它有效。
我仍然收到无法理解的E_NOTICE错误。 我喜欢这个E_NOTICE所以如果我错过了冒号或其他东西,我可以很容易地找到它,但我所做的一切都无济于事。 我很感激你的建议,并希望我能在我的错误通知上得到更多的回复。
更改的只是您的错误报告级别。它现在包括E_NOTICE
.
在使用数组索引和变量之前,您需要检查它们。例如,而不是...
if ($_POST['f_name'] == '')
用
if (empty($_POST['f_name']))
这是因为empty
可以安全地用于可能未定义的变量/索引。
另一个,这个...
$f_name = $_GET['f_name'];
是安全的,因为
$f_name = isset($_GET['f_name']) ? $_GET['f_name'] : null; // or whatever you want to use as a default value.
最后,您应该在与连接运算符 ( .=
) 一起使用之前为您的$message
字符串分配一个初始值,例如
// as this is the first appearance of $message, just assign the initial value directly
$message = 'The following request was submitted by ' .$f_name. ' ' .$l_name. "nn";