2013-06-16 2 views
3

Мой PHP-код всегда возвращает ошибку внутреннего сервера HTTP/1.1 500. Доступ к нему осуществляется из некоторого кода AJAX и является файлом serperate. Скорее всего, что-то очевидное, любая помощь будет оценена по достоинству. PHP: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("[email protected]","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); 
} 
} 
?> 
+1

Обратитесь к своему веб-хосту и посмотрите, работают ли их серверы нормально ... обычно это причина ошибки 500! Если на сервере все в порядке, оглянитесь на свой код и убедитесь, что вы используете функции, поддерживаемые вашей текущей версией php. – pattyd

+1

Вы редактировали файл .htaccess? – underscore

+0

Также попробуйте: измените это 'elseif' на' if' ... и проверьте свои журналы ошибок PHP на своем сервере. – pattyd

ответ

2

с сообщениями об ошибках включен Я вижу:

PHP Parse error: syntax error, unexpected '$aemail' (T_VARIABLE) in file.php on line 33

опечатка здесь в строке 33:

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

Запись:

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

Это помогло с большой ошибкой, заметив еще несколько ниже! Просто, чтобы заставить его работать с Ajax сейчас. – Weasel

3

Eсть вероятно, ошибка php. Поместите это в заголовок файла PHP для просмотра ошибки:

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

Благодарности к @bwoebi я могу добавить, что именно в случае разбора ошибок для отображения текста ошибки вместо 500 ошибки вы должны поставить это ваш .htaccess:

php_flag display_errors 1 
+0

, используя это в файле PHP, не поможет избежать ошибок синтаксического анализа. Вы должны порекомендовать установить это через .htaccess/php.user.ini/php.ini – bwoebi

+1

Это поможет определить ошибку. Если отчет об ошибках отсутствует, сервер выдаст 500 ошибок. – Hast

+0

Он также выдаст ошибку 500 с этим в файле, поскольку PHP уже прервал процесс анализа файла. Он никогда не выполнит эти две строки. – bwoebi

Смежные вопросы