Php post ошибка 500

In my case I am sending POST request by $.post using JQuery and PHP. But I am gettinh this error in while posting data. POST https://xxxxxxxxxxxxx/xxxxxxxxxxx/php/control/LoginControl.php 500 (

Here’s an edit to your scripts. Maybe something along the lines of this will help.

JS:

 $(function()
 {
    var url = 'php/control/LoginControl.php';
    $.post(url, {
        task: "login_verify",
        username: _username,
        password: _password
    }, function(data, status, xhr)
    {
        // success
        if(data.error===false)
            window.location = 'index.php';
        else
            $("#user_password").css({border: '1px solid #ff0000'});
    }).error(function(xhr, status, error)
    {
        console.log("Error loading page. Status: "+status+" | Error: "+error);
    });
 });

PHP:

 <?php
 // Session must be started before session checking and destroying can happen
 session_start();

 // Set error true by default
 // Error is always returned.
 // If no error, it'll be set to false in if statement
 // So a value will always be returned.
 $return['error'] = true;

 if(isset($_POST) && $_POST['task'] == 'login_verify')
 {
    require_once __DIR__.'/../class.login.php';
    if(class_exists('Login'))
    {
        $uname = $_POST['username'];
        $passwd = $_POST['password'];
        $user = Login::verifyCredentials($uname, $passwd);
        if(!empty($user))
        {
            if(isset($_SESSION))
                session_destroy();

            $_SESSION['uid'] = $user[0]->ADMIN_ID;
        }
        else
            $return['error'] = false;
    }
 }

 echo @json_encode($return);

One thing I did notice in your PHP script that I corrected in my edits, is you’re using $_SESSION and session_destroy() when no session is open. You must first define session_start() before any of the session methods or magic variables become available to you. That’s why I placed it at the very top of the PHP script.

Also, if you want to use another data type rather than json, it’s easiest just to use the $.ajax() function

 var loginData = {
    username: _username,
    password: _password,
    task: 'login_verify'
 };

 $.ajax({
    url: url,
    type: 'post',
    data: loginData,
    dataType: 'html',
    success: function(data, status, xhr)
    {
        // If page loading was a success. i.e. 200 OK status message
    },
    error: function(xhr, status, error)
    {
        // error. Status other than 200
    }
 });

======================================================================
EDIT: New Code
Take a look at this, see if this will help.

PHP:

 <?php
 $return['error'] = true;

 if(isset($_POST) && $_POST['task'] == 'login_verify')
 {
    if(!empty($_POST['formData']['username']))
    {
        if(!empty($_POST['formData']['password']))
        {
            $return['error'] = false;
            $message = "The AJAX call was successfull! The data passed is listed below.nn"
                . "task: " . $_POST['task'] . "n"
                . "username: " . $_POST['formData']['username'] . "n"
                . "password: " . $_POST['formData']['password'];

            $return['message'] = $message;
        }
        else
            $return['message'] = 'Password is empty!';
    }
    else
        $return['message'] = 'Username is empty!';
 }
 else
 {
    $return['message'] = 'Invalid request! ' . $json->task;
 }

 echo @json_encode($return);

JavaScript:

 $(function()
 {
    $("#login").click(function()
    {
        var jdata = {
            task: 'login_verify',
            formData: {
                username: $("#username").val(),
                password: $("#password").val()
            }
        }

        $.ajax({
            url: 'login.php',
            type: 'post',
            dataType: 'json',
            data: jdata,
            cache: false,
            success: function(data, status, xhr)
            {
                var dataStatus = (data.error===true) ? "Error" : "Success";
                var message = "Status: " + dataStatus + "n"
                    + data.message;

                alert(message);
            },
            error: function(xhr, status, error)
            {
                alert('Error: ' + error);
            }
        });

        return false;
    });
 });

This code, works. I have a live version of it. Exact code and all.
AJAX/PHP Example

I hope this helps

  • #1

POST не проходит, возвращает 500 Internal Server Error

Всем привет, наверное не совсем по теме форума, и тем не менее.
Есть у меня страница, которая отсылает форму в пхп скрипт.
При объеме около 200Кб, сервер возвращает ошибку.

Отсылаем:
Accept-Language: ru
Content-Type: multipart/form-data; boundary=—————————7d62fd2140100
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
Host: www.nohost.com
Content-Length: 213516
Connection: Keep-Alive
Cache-Control: no-cache

Получаем:
HTTP/1.1 500 Internal Server Error
Date: Fri, 24 Mar 2006 09:22:30 GMT
Server:
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1

Причем контент это содержимое <textarea … > хоть я и поставил multipart/form-data , так как по умолчанию enctype выдавал тоже самое.
Не могу понять почему у хостера апач блокирует меня !
Размер поста у него 8Мб, вроде я его не превышаю.

Хелп кто может !

  • #2

klep
использование <javascript> и прочего страшного контента в передаваемом тексте ?

  • #3

содержимое это html, который сделал word из одного doc файла.

javascript там нет.

  • #4

>Размер поста у него 8Мб, вроде я его не превышаю.

Посмотри все настройки относящиеся к получению сервером post данных.

  • #5

PHP Core:
post_max_size 8M
upload_max_filesize 2M
memory_limit 16M
file_uploads On

  • #6

Т.е. до 200 кб все ОК, да?
mod_rewrite включен? Есть ли какие-либо условия, переадресации и т.д.?
GET запрос на этот же скрипт работает нормально?й

  • #7

mod_rewrite у хостера есть, но я его не использую !
Переадресация есть, но только после получения поста пхп’шкой.

Гет конечно работает, так как это один и тот же скрипт с разными id

  • #8

А Apache какой? Второй?

Попробуй сделать минимальный скрипт, вызывающий ошибку и скопируй его сюда. Т.е. в скритп должно быть только то, что приводит к ошибке. Ничего лишнего.

Фанат


  • #9

а чо до сих пор никто не спросил, КАКАЯ ОШИБКА?

  • #10

Апаче 1.33

196Кб — еррор
160Кб — еррор
106Кб — ок

2Фанат
сабж

  • #11

klep
Открой лог апача и найди там текст ошибки.

  • #12

2 Кром
На тестовом примере тоже самое !

PHP:

<html>

<body>

 <form action="test.php" method="POST" enctype="multipart/form-data">

  <textarea rows=20 cols=80 name='ta'></textarea>
 <input type='submit'>
 
 </form>


</body>

</html>


---------

<?

echo $_POST["ta"];

?>

2 svetasmirnova
У меня доступ только до access.log а там ничего такого не пишут

  • #13

klep
текст из формы куда нибудь (тока не в форум) выложи

si

Administrator


  • #15

klep
читай ответ svetasmirnova

  • #16

2 svetasmirnova & si
У меня доступ только до access.log а там ничего такого не пишут

-~{}~ 24.03.06 12:47:

имхо тут проблема именно в настройках апачи

  • #17

klep
Да, такое пишут в error.log Вопрос: почему у тебя до сих пор нет к нему доступа? Например, на хостинге, где я хощусь, он по умолчанию отключен, но его можно включить в панели управления. Да и на всех остальных ситуация была схожа. Проверь: как работать-то без него?

  • #18

обычно я отлаживаю код на своем локальном апаче, а уже потом клиент сам выбирает где ему хоститься.
Обычно выбирают дешевый вариант и как следствия вот такой гемор (на хостинге только фтп доступ и дико глухой админ).
Буду пробовать добыть лог, но это уже последний вариант.

  • #19

>обычно я отлаживаю код на своем локальном апаче
Покажите мне человека, который отлаживает код на боевом хостинге.
Тем не менее лог ошибок добывать надо в первую очередь.

  • #20

>Покажите мне человека, который отлаживает код на боевом хостинге.

Я отлаживаю иногда. Бывают ошибки, которые ни на локалке, ни на dev/test серверах не отловить.

Всем привет) Делаю небольшой сайт на wordpresse. На нем имеется небольшая всплывающая форма, заполнив которую на сервер должно прийти письмо с данными формы. Реализовывал точно также на другом сайте — все работает, поставил на этом — сначала все отлично, потом вдруг перестало работать, при клике «оставить заявку» ничего не отправляется, а вылетает ошибка 500. Если кто сталкивался с такой проблемой, подскажите пожалуйста пути решения

Сам код формочки:

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
<div class="popup">
    <div class="popup_bg"></div>
        <div class="form">
            <form id="send_frm" method="post" action="send.php"> <!-- method="post"> -->
                <h1 class="zak_call" >Заказать звонок</h1>
                <p>Оставьте свой номер телефона<br>и мы свяжемся с Вами</p>
                <input type="text" placeholder="* Имя..." name="fio" style="" class="frm_el cons_frm" required="">
                <input type="text" id="tel"  placeholder="* Телефон..." name="phone" style="" class="frm_el cons_frm" required="" >
                <input type="text" name="usluga" style="display:none;">                         
                <input type="submit"  value="Оставить заявку" name="submit" style="" class="btns frm_btn">
            </form>
        </div>
    </div>

Скрипт на котором вылетает ошибка:

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<script>
document.getElementById('send_frm').onsubmit = function(){
    if (this.fio.value!='' && this.phone.value!=''){
        var http = new XMLHttpRequest();
        http.open("POST", "<?php bloginfo("template_url"); ?>/send/send.php", true);
        http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        http.send("&fio=" + this.fio.value + "&phone=" + this.phone.value + "&usluga=" + this.usluga.value );
            http.onreadystatechange = function() {
            if (http.readyState == 4 && http.status == 200) {
            $(".popup").fadeOut();
            $(".popup2").fadeIn(1000);
    
        document.getElementById("send_frm").fio.value="";
        document.getElementById("send_frm").phone.value="";
 
            $(".popup2").delay(3000).fadeOut(1000);
    }
}
http.onerror = function() {
 
    alert('Неудачно')
    // $(".popup3").fadeIn(1000);
    // $(".popup3").delay(3000).fadeOut(1000);
}
} else {
    alert('Заполните все обязательные поля!');
}
return false;
}
</script>

И PHP обработчик:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
 
$to='4eqqqq@gmail.com'
 
$fio = $_POST['fio'];
$phone = $_POST['phone'];
$usluga = $_POST['usluga'];
 
 
$fio = htmlspecialchars($fio);
$phone = htmlspecialchars($phone);
$usluga = htmlspecialchars($usluga);
 
$fio = urldecode($fio);
$phone = urldecode($phone);
$usluga = urldecode($usluga);
 
 
 
$fio = trim($fio);
$phone = trim($phone);
$usluga = trim($usluga);
 
$subject = 'Перезвоните мне!'; //Заголовок сообщения
 
 
$message = $subject."rnИмя: ".$fio."rnТелефон: ".$phone."rnТип услуги: ".$usluga;
 
 
 
$headers  = "Content-type: text/html; charset=utf-8 rn"; //Кодировка письма
$headers  = "From: Правозащита в Кирове <from@example.com>rn";
 
// echo "NHHHHS";
 
 
if (mail($to, $subject, $message, $headers))
{     echo "сообщение успешно отправлено"; 
} else { 
    echo "при отправке сообщения возникли ошибки";
}
 
?>

Самое смешное и обидное, что сначала то все работало, и не один день, а пару недель примерно. Может я случайно, где то стер какую-нибудь точку, не знаю. Во вложении скрин с ошибкой.

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

There were 2 errors in your code actually.

1) The dot at the end of:

$email_body = "You have received a new message from the user $name.n".
" Here are the details:n Name: $name n Email: $email n Purchase Code n    $purchasecode n Vendor n $vendor";.

Which needs to be replaced by:

$email_body = "You have received a new message from the user $name.n".
" Here are the details:n Name: $name n Email: $email n Purchase Code n    $purchasecode n Vendor n $vendor";

2) The Submit button was not named, therefore it would always show the error message error; you need to submit the form even when the form was successfully sent.

Solution:

<button type="submit" name="submit" id="submitbutton" value="Submit" class="mainButton">SUBMIT</button><br>

Fully tested code

HTML form

<div id="emailform">
<h2>Confirm your purchase information</h2>
<hr>
<form method="post" name="contactform" action="mail_form.php">
<p>
<label for='name'>Your Name:</label> <br>
<input type="text" name="name">
</p>
<p>
<label for='email'>Email Address:</label> <br>
<input type="text" name="email">
</p>
<p>
<label for='purchasecode'>Purchase Code:</label> <br>
<input type="text" name="purchasecode">
</p>
<p>
<label for='vendor'>Vendor Name:</label> <br>
<select name="vendor">
  <option value="1" selected="selected"></option>
  <option value="2" >Amazon</option>
  <option value="3" >Barnes &amp; Noble</option>
  <option value="4" >Family Christian</option>
  <option value="5" >Christianbook.com</option>
  <option value="6" >LifeWay</option>
  <option value="7" >Books-A-Million</option>
  <option value="8" >Mardel</option>
</select>
</p>
<button type="submit" name="submit" id="submitbutton" value="Submit" class="mainButton">SUBMIT</button><br>
</form>

PHP handler

<?php
if(!isset($_POST['submit']))
{
  //This page should not be accessed directly. Need to submit the form.
  echo "error; you need to submit the form!";
}
$name = $_POST['name'];
$email = $_POST['email'];
$purchasecode = $_POST['purchasecode'];
$vendor = $_POST['vendor'];


//Validate first
if(empty($_POST['name'])  ||
   empty($_POST['email']) ||
   empty($_POST['purchasecode']) ||
   empty($_POST['vendor']))
{
    echo "All fields are required.";
exit;
}

if(IsInjected($visitor_email))
{
    echo "Bad email value!";
    exit;
}

$email_from = $email;
$email_subject = "New Form submission";
$email_body = "You have received a new message from the user $name.n".
    " Here are the details:n Name: $name n Email: $email n Purchase Code n    $purchasecode n Vendor n $vendor";

$to = "name@domain.com";//<== update the email address

$headers = "From: $email_from rn";
$headers .= "Reply-To: $email_from rn";
//Send the email!
mail($to,$email_subject,$email_body,$headers);
//done. redirect to thank-you page.
header('Location: index.html');

// echo "success";


// Function to validate against any email injection attempts
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;
  }
}

?>

There were 2 errors in your code actually.

1) The dot at the end of:

$email_body = "You have received a new message from the user $name.n".
" Here are the details:n Name: $name n Email: $email n Purchase Code n    $purchasecode n Vendor n $vendor";.

Which needs to be replaced by:

$email_body = "You have received a new message from the user $name.n".
" Here are the details:n Name: $name n Email: $email n Purchase Code n    $purchasecode n Vendor n $vendor";

2) The Submit button was not named, therefore it would always show the error message error; you need to submit the form even when the form was successfully sent.

Solution:

<button type="submit" name="submit" id="submitbutton" value="Submit" class="mainButton">SUBMIT</button><br>

Fully tested code

HTML form

<div id="emailform">
<h2>Confirm your purchase information</h2>
<hr>
<form method="post" name="contactform" action="mail_form.php">
<p>
<label for='name'>Your Name:</label> <br>
<input type="text" name="name">
</p>
<p>
<label for='email'>Email Address:</label> <br>
<input type="text" name="email">
</p>
<p>
<label for='purchasecode'>Purchase Code:</label> <br>
<input type="text" name="purchasecode">
</p>
<p>
<label for='vendor'>Vendor Name:</label> <br>
<select name="vendor">
  <option value="1" selected="selected"></option>
  <option value="2" >Amazon</option>
  <option value="3" >Barnes &amp; Noble</option>
  <option value="4" >Family Christian</option>
  <option value="5" >Christianbook.com</option>
  <option value="6" >LifeWay</option>
  <option value="7" >Books-A-Million</option>
  <option value="8" >Mardel</option>
</select>
</p>
<button type="submit" name="submit" id="submitbutton" value="Submit" class="mainButton">SUBMIT</button><br>
</form>

PHP handler

<?php
if(!isset($_POST['submit']))
{
  //This page should not be accessed directly. Need to submit the form.
  echo "error; you need to submit the form!";
}
$name = $_POST['name'];
$email = $_POST['email'];
$purchasecode = $_POST['purchasecode'];
$vendor = $_POST['vendor'];


//Validate first
if(empty($_POST['name'])  ||
   empty($_POST['email']) ||
   empty($_POST['purchasecode']) ||
   empty($_POST['vendor']))
{
    echo "All fields are required.";
exit;
}

if(IsInjected($visitor_email))
{
    echo "Bad email value!";
    exit;
}

$email_from = $email;
$email_subject = "New Form submission";
$email_body = "You have received a new message from the user $name.n".
    " Here are the details:n Name: $name n Email: $email n Purchase Code n    $purchasecode n Vendor n $vendor";

$to = "name@domain.com";//<== update the email address

$headers = "From: $email_from rn";
$headers .= "Reply-To: $email_from rn";
//Send the email!
mail($to,$email_subject,$email_body,$headers);
//done. redirect to thank-you page.
header('Location: index.html');

// echo "success";


// Function to validate against any email injection attempts
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;
  }
}

?>

Разработчики и люди, профессионально работающие с веб-приложениями, боятся 500 Internal Server Error. Оптимальный способ её устранения зависит от сервера и того, что на нём запущено. В данной статье приводятся советы по диагностике и исправлению ошибки 500.

  • Ошибка 500 Internal Server Error — диагностика
  • Ошибка 500 Internal Server Error — устранение на популярных платформах
  • Ошибка 500 Internal Server Error — устранение на стороне серверных скриптов
  • Попросите помощи у системного администратора
  • Ошибку 500 Internal Server Error довольно легко устранить

Важно помнить, что эта ошибка происходит на стороне сервера. Это значит, что HTML-код, выполняемый на стороне клиента, а также JavaScript или любые другие запущенные в браузере объекты, не могут быть причиной, по которой возникает ошибка 500 Internal Server Error. Само название (Internal Server Error – ‘внутренняя ошибка сервера’) говорит о том, что ошибка происходит на сервере.

Многие пользователи устанавливают на свой сервер популярные CMS-системы, такие как WordPress, Joomla, Drupal и они не должны вызывать ошибку 500, если всё настроено правильно. Однако она всё равно всплывает – из-за несовместимости версий, некачественных установок или сбоя прав доступа на сервере.

Вот некоторые распространённые проблемы, которые могут вызывать подобную ошибку в часто используемых CMS:

  • Если вы только что обновили движок до новой версии, вероятно, обновление прошло с ошибками и необходимо провести его повторно. Скорее всего, на сайте разработчика есть инструкции, как это правильно сделать.
  • Если вы только что активировали новый плагин или новую тему, стоит попробовать отменить эти изменения. Даже профессионально написанные плагины могут конфликтовать с другими и вызывать 500 Internal Server Error nginx
  • Если вы обновляли CMS, старые плагины и темы могут быть с ней несовместимы. Единственное, что можно сделать в таком случае — отключать их по очереди, пока ошибка 500 не исчезнет.
  • Неправильно заданные права доступа на сервере или ошибки в файле .htaccess. Серверу не удаётся получить доступ к скриптам, файлам и другим ресурсам, поэтому он выдаёт ошибку.

Когда причиной, по которой возникает ошибка 500 Internal Server Error являются скрипты и плагины, лучше всего искать ответы на сайтах их разработчиков.

Другой причиной по которой может возникнуть ошибка 500 Internal Server Error может стать разработка и тестирование собственных скриптов.

Чтобы справиться с такой ошибкой, попробуйте следующие решения:

  • Настройка прав на сервере: часто неверная настройка прав доступа к файлу или папке приводит к тому, что сервером выдаётся ошибка 500 Internal Server Error. Из-за того, что ему не удаётся запустить скрипт. Выясните, какие права должны быть настроены, и выставьте их соответствующим образом.
  • Превышено время ожидания: возможно, истекло время ожидания ответа от PHP или другого серверного скрипта. Это происходит из-за того, что недоступен определённый ресурс или коде была допущена ошибка, запускающая бесконечный цикл.
  • Превышено время ожидания соединения с сервером: если сервер был занят, перезагружался или потерял соединение, скрипт может выдать ошибку 500 Internal Server Error. Возможно, в следующий раз ошибки не будет. Но если ошибка появляется при тестировании, велика вероятность того, что она встретится и пользователям.
  • Ошибки в файле .htaccess: в некоторых случаях ошибку 500 может вызывать код, прописанный в файле .htaccess.
  • Ошибки в скрипте: если ошибку выдаёт скрипт, можете запросить у него подробную информацию об ошибке. К примеру, в PHP можно включить вывод ошибок на экран или в лог-файл, добавив директиву display_errors. По умолчанию среда выполнения может скрывать ошибки, но это не очень удобно для отладки программы.

В некоторых случаях у разработчиков нет полного контроля над сервером.

Если скрипт запускается на сервере сторонней организации, она может помочь вам в следующем:

  • Предоставить документацию о своём сервере и возможных причинах ошибки 500. В зависимости от используемой операционной системы и настройки оборудования, данная ошибка может возникать по разным причинам.
  • Попросите службу поддержки хостинга посмотреть лог-файлы с ошибками — системный администратор сможет определить, был ли сервер во время возникновения ошибки загружен или вовсе «упал».

Ошибка 500 Internal Server Error — как исправить? В большинстве случаев причины возникновения ошибки 500 легко исправляются. Проблема заключается в том, что без конкретной информации определение причины возникновения сбоя усложняется. Легче всего справиться с ошибкой, когда разработчик выяснит, что изменилось перед возникновением ошибки.

Не забывайте, что произошедшие изменения могли быть осуществлены и другими людьми — например, администратором сервера. Если же ничего не менялось, вероятно, сам сервер стал причиной возникновения ошибки из-за несовместимости программного обеспечения или проблем с производительностью.

Понравилась статья? Поделить с друзьями:
  • Pip install win32gui ошибка
  • Php parse error syntax error unexpected new
  • Pip install win32gui error
  • Php fatal error uncaught error class pear not found in
  • Pip install ssl error