未定义的索引 - CGI 与 ISAPI



请参阅下面的更新原始问题:

我在使用联系表格时遇到问题。 我对 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";

最新更新