当我运行以下ajax调用时,在单击具有id 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。 谁有线索?谢谢!
编辑12/9/17 在数据部分更新了JS。还更新了用于将数据插入MySQL的PHP代码,以防止SQL注入。非常感谢对此的评论!但是,脚本仍会返回错误500。 PHP日志显示以下内容:
[12-Sep-2017 21:04:45 Europe / Berlin] PHP警告:> mysqli_stmt :: bind_param():类型定义字符串中的元素数量>不匹配绑定变量的数量> /Applications/MAMP/htdocs/functions/maintenance_functions.php在$行上 [12-Sep-2017 21:04:45 Europe / Berlin] PHP Stack trace: [12-Sep-2017 21:04:45 Europe / Berlin] PHP 1. {main}()> /Applications/MAMP/htdocs/functions/maintenance_functions.php:0 [12-Sep-2017 21:04:45 Europe / Berlin] PHP 2. mysqli_stmt-> bind_param()> /Applications/MAMP/htdocs/functions/maintenance_functions.php:104
但是,该文件已从服务器中删除,因此显然它可以执行部分代码!但是该值不会从数据库中删除,但我无法查看SQL查询中的错误。 仅供参考,应用程序在本地Web服务器(nginx + mysql)上运行,该服务器将始终与Internet断开连接。
答案 0 :(得分:0)
您只需要一个标识符:
$stmt->bind_param("si", $_POST['recordID']);
应该是:
$stmt->bind_param("i", $_POST['recordID']); // you don't have two elements
由于您确定了两个元素"si"
但只有一个变量,因此会出现不匹配。由于该变量是整数,因此请删除s
,并将其保留为"i"
。
答案 1 :(得分:0)
解决了这个问题。 我的非常愚蠢,但是在这段代码上面的行中有一个小错误(这仍然不能让我理解为什么代码的一部分工作而另一部分没有......) 但无论如何,你的一些改进确实改进了代码:)