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 | ||
|
Скрипт на котором вылетает ошибка:
Javascript | ||
|
И PHP обработчик:
PHP | ||
|
Самое смешное и обидное, что сначала то все работало, и не один день, а пару недель примерно. Может я случайно, где то стер какую-нибудь точку, не знаю. Во вложении скрин с ошибкой.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
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 & 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 & 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 легко исправляются. Проблема заключается в том, что без конкретной информации определение причины возникновения сбоя усложняется. Легче всего справиться с ошибкой, когда разработчик выяснит, что изменилось перед возникновением ошибки.
Не забывайте, что произошедшие изменения могли быть осуществлены и другими людьми — например, администратором сервера. Если же ничего не менялось, вероятно, сам сервер стал причиной возникновения ошибки из-за несовместимости программного обеспечения или проблем с производительностью.