jquery — PHP ajax-вызов выполняется, но возвращает 500

Когда я запускаю следующий ajax-вызов, после нажатия кнопки с идентификатором removeAttachment и атрибутом данных «data-recordid», сценарий соответствующим образом выполняет сценарий PHP, но сервер все равно отвечает с кодом ошибки 500. Это приводит к заканчивая вызов ajax.

JS

$('#removeAttachment').on("click", function(e){
e.preventDefault();
var recordid = $(this).data('recordid');
if(confirm("Weet je zeker dat je deze bijlage wilt verwijderen?")){
$.ajax({
type: 'POST',
url: ('/functions/maintenance_functions.php?action=removeAttachment'),
data: {recordId: recordid},
cache: false,
success: function(data,status) {
$('#currentAttachment').hide();
$('#record_table').bootstrapTable('refresh');
}
})
}
});

PHP — Обратите внимание, что скрипт php содержит различные «действия», которые вызываются другими ajax-запросами (и работают без проблем!)

if($action=="removeAttachment" && isset($_POST['recordId']) && get_maintequipmentrecord_info($_POST['recordId'],"equipment_id")==$_SESSION['active_maint_equipment'] && can_super_access($page)==true){

$attachment = get_maintequipmentrecord_info($_POST['recordId'],"attachment");
$attachment_file = $_SERVER['DOCUMENT_ROOT']."/_files/maintenance/attachments/".$attachment;

if($attachment!='' && file_exists($attachment_file)) {
unlink($attachment_file);
}

$stmt = $connect->prepare("UPDATE maintenance_records SET attachment=NULL WHERE record_id=?");
$stmt->bind_param("si", $_POST['recordID']);
$stmt->execute();
$stmt->close();

}

К сожалению, я действительно не могу найти, в чем проблема, поскольку скрипт PHP и присоединенные функции выполняются соответствующим образом (файл удален с сервера, а поле базы данных установлено в NULL.
Кто-нибудь знает? Спасибо!

Изменить 9/9/17 Обновлен JS в части данных. Также обновлен код PHP для вставки данных в MySQL, чтобы предотвратить инъекции SQL. Большое спасибо за комментарии к этому! Но все равно скрипт возвращает ошибку 500.
Журнал PHP показывает следующее:

[12-Sep-2017 21:04:45 Европа / Берлин] Предупреждение PHP:> mysqli_stmt :: bind_param (): Количество элементов в строке определения типа> не соответствует числу переменных связывания в> / Applications / MAMP / htdocs /functions/maintenance_functions.php в строке $
[12-Sep-2017 21:04:45 Европа / Берлин] PHP Stack trace:
[12-Sep-2017 21:04:45 Европа / Берлин] PHP 1. {main} ()> /Applications/MAMP/htdocs/functions/maintenance_functions.php:0
[12-Sep-2017 21:04:45 Европа / Берлин] PHP 2. mysqli_stmt-> bind_param ()> /Applications/MAMP/htdocs/functions/maintenance_functions.php:104

Тем не менее, файл удален с сервера, поэтому, очевидно, он может выполнить некоторую часть кода! Но значение не удаляется из базы данных, но я не вижу, что не так в запросе SQL.
К вашему сведению, приложение работает на локальном веб-сервере (nginx + mysql), который всегда будет отключен от Интернета.

-2

Решение

Вам нужен только один идентификатор:

$stmt->bind_param("si", $_POST['recordID']);

должно быть :

$stmt->bind_param("i", $_POST['recordID']); // you don't have two elements

Вы получаете несоответствие, потому что вы идентифицируете два элемента "si" но есть только одна переменная. Поскольку эта переменная является целым числом, удалите sоставив это "i",

0

Другие решения

Решил вопрос.
Очень глупо, но в строках над этим кодом была небольшая ошибка (которая до сих пор не дает понять, почему часть кода работала, а другая — нет …)
Но в любом случае, некоторые из ваших улучшений действительно улучшили код 🙂

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector