【问题标题】:PHP form giving internal errorPHP表单给出内部错误
【发布时间】:2013-06-16 17:27:59
【问题描述】:

我的 PHP 代码总是返回 HTTP/1.1 500 内部服务器错误。这是从一些 AJAX 代码访问的,并且是一个单独的文件。这很可能是显而易见的,任何帮助将不胜感激。 PHP:

<?php  
if( isset($_POST) ){  

//form validation vars  
$formok = true;  
$errors = array();  

//submission data  
$ipaddress = $_SERVER['REMOTE_ADDR'];  
$date = date('d/m/Y');  
$time = date('H:i:s');  

//form data  
$fname = $_POST['fname'];  
$lname = $_POST['lname'];     
$aemail = $_POST['aemail'];  
$year = $_POST['year'];  
$position = $_POST['position'];  
$club = $_POST['club'];  

//validate email address is not empty  
if(empty($email)){  
    $formok = false;  
    $errors[] = "You have not entered an email address";  
//validate email address is valid  
}elseif(!filter_var($aemail, FILTER_VALIDATE_EMAIL)){  
    $formok = false;  
    $errors[] = "You have not entered a valid email address";  
}

//send email if all is ok  
if($formok){  
    $headers = "From: " $aemail . "\r\n";
    $headers = "Reply-To: " . $email_from . "\r\n"; 
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";  

    $emailbody = "<p>You have received a new message from the enquiries form on your website.</p> 
                  <p><strong>First Name: </strong> {$fname} </p>
                  <p><strong>Last Name: </strong> {$fname} </p>                      
                  <p><strong>Email Address: </strong> {$email} </p> 
                  <p><strong>School Year: </strong> {$year} </p> 
                  <p><strong>Club: </strong> {$club} </p> 
                  <p><strong>Position: </strong> {$position} </p> 
                  <p>This message was sent from the IP Address: {$ipaddress} on {$date} at {$time}</p>";

    ini_set("sendmail_from", $email_from); 

    $sent = mail("name@domaain.co.uk","New Enquiry",$emailbody,$headers, "-f" . $email_from);  

}  

//what we need to return back to our form  
$returndata = array(  
    'posted_form_data' => array(  
        'fname' => $fname, 
        'lname' => $fname, 
        'aemail' => $aemail,  
        'year' => $year,  
        'position' => $position,  
        'club' => $club  
    ),  
    'form_ok' => $formok,  
    'errors' => $errors  
);  


//if this is not an ajax request  
if(empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) !== 'xmlhttprequest'){  
    //set session variables  
    session_start();  
    $_SESSION['cf_returndata'] = $returndata;  

    //redirect back to form  
    header('location: ' . $_SERVER['HTTP_REFERER'].' 500 Internal Server Error', true, 500);  
 }  
}
?>

【问题讨论】:

  • 与您的虚拟主机交谈,看看他们的服务器是否运行正常...通常这是 500 错误的原因!如果服务器一切正常,请查看您的代码并确保您使用的是当前 php 版本支持的功能。
  • 您是否编辑了您的 .htaccess 文件?
  • 还可以尝试一下:将 elseif 更改为 if... 并检查服务器上的 PHP 错误日志。
  • @pattyd:通常这 不是 500 错误的原因。这几乎总是一个编程错误。

标签: php forms


【解决方案1】:

可能存在 php 错误。把它放到你的 php 文件的头部以查看错误:

ini_set('display_errors', 1);
error_reporting(E_ALL);

感谢@bwoebi,我可以准确地添加,在解析错误的情况下显示错误文本而不是 500 错误,你应该把它放到你的 .htaccess 中:

php_flag display_errors 1

【讨论】:

  • 在 PHP 文件中使用它不会帮助防止解析错误。您应该建议通过 .htaccess / php.user.ini / php.ini 进行设置
  • 这将有助于确定错误。除非没有报错,否则服务器会输出 500 错误。
  • 它还会在文件中输出 500 错误,因为 PHP 在解析文件时已经中止。它永远不会执行这两行。
【解决方案2】:

启用错误消息后,我看到:

PHP 解析错误:语法错误,第 33 行 file.php 中出现意外的 '$aemail' (T_VARIABLE)

错字在第 33 行:

$headers = "From: " $aemail . "\r\n";
//                 ^------------------ note the missing point

写:

$headers = "From: " . $aemail . "\r\n";

【讨论】:

  • 这有助于解决错误,非常感谢,发现了更多的错误!只是为了让它现在与 Ajax 一起工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多