执行PHP ajax调用但返回500

时间:2017-09-11 12:55:07

标签: php jquery mysql ajax

当我运行以下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断开连接。

2 个答案:

答案 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)

解决了这个问题。 我的非常愚蠢,但是在这段代码上面的行中有一个小错误(这仍然不能让我理解为什么代码的一部分工作而另一部分没有......) 但无论如何,你的一些改进确实改进了代码:)