Javascript 邮递https://www....?action=getclientRecords 在获取数据时显示错误500

Javascript 邮递https://www....?action=getclientRecords 在获取数据时显示错误500,javascript,php,mysql,ajax,Javascript,Php,Mysql,Ajax,我有两个动态相关的选择框,一个是客户名称,另一个是发票日期,带有按钮,分别根据客户名称和他的日期获取数据,并填充下面的表单字段。整个过程已完成并正在运行,但由于日期不确定,整个过程停止。现在,客户就在我屁股上,我不知道该怎么办。我不太擅长php或js。如果你们能帮我,试着用更简单的方式解释,我将欠你们的债。蒂亚 它工作的很好,但突然它的客户名称,但不是日期,我不知道为什么。该程序在近5-6个月内运行良好,但几天前,这个错误突然发生,没有任何更改 我试图创建一个新的数据库,我认为这可能是个错误,但

我有两个动态相关的选择框,一个是客户名称,另一个是发票日期,带有按钮,分别根据客户名称和他的日期获取数据,并填充下面的表单字段。整个过程已完成并正在运行,但由于日期不确定,整个过程停止。现在,客户就在我屁股上,我不知道该怎么办。我不太擅长php或js。如果你们能帮我,试着用更简单的方式解释,我将欠你们的债。蒂亚

它工作的很好,但突然它的客户名称,但不是日期,我不知道为什么。该程序在近5-6个月内运行良好,但几天前,这个错误突然发生,没有任何更改

我试图创建一个新的数据库,我认为这可能是个错误,但没有成功

我还用备份还原了代码文件,但仍然没有成功

//data.php

<?php

    require '../db_connection.php';
    header("Access-Control-Allow-Origin: *");

    $action = $_GET['action'];
    if($action=="getclientRecords"){

        getclientRecords($con);
    }

    function getclientRecords($con){

      $id = $_POST['client_id'];
       $sql="SELECT `invoice_data`.`item_date` FROM `invoice_data` WHERE `invoice_data`.`client_id`=$id";
       $result = mysqli_query($con, $sql);
       $results = mysqli_fetch_all($result);
       return json_encode($results);

    }

    $date = $_GET['action'];
    if($date=="getclientRecordByDate"){

    getclientRecordByDate($con);

    }
    function getclientRecordByDate($con){

         $client_date = $_POST["date"];
         $client_id = $_POST["client_id"];
         $sql = "SELECT client_name, `item_date`, item_refe, item_parti, balance_amount, item_amnd, item_amnf, item_tax, item_amniw, item_amnif FROM `invoice_data` WHERE `item_date` = '$client_date' AND client_id = '$client_id'";
         $result = mysqli_query($con, $sql);
         $results = mysqli_fetch_array($result);
         echo json_encode($results);
    }

?>


为了解决sql漏洞和缺少返回数据的问题(数据没有
回显到ajax函数中),以下内容可能会有所帮助

<?php

    require '../db_connection.php';


    function getclientRecords( $con=false ){
        $id = isset( $_POST['client_id'] ) ? $_POST['client_id'] : false;
        if( $con && $id ){
            $sql='select `item_date` 
                    from `invoice_data` 
                    where `client_id`=?';

            $stmt=$con->prepare( $sql );
            $stmt->bind_param( 's', $id );
            $stmt->execute();
            $result=$stmt->get_result();
            $data=[];
            while( $rs=$result->fetch_object() ){
                $data[]=$rs->item_date;
            }
            $stmt->free_result();
            $stmt->close();
            return json_encode( $data );
        }
        return false;
    }

    function getclientRecordByDate( $con=false ){
        $date = isset( $_POST['date'] ) ? $_POST['date'] : false;
        $id = isset( $_POST['client_id'] ) ? $_POST['client_id'] : false;

        if( $con && $id && $date ){

            $sql = 'select `client_name`, `item_date`, `item_refe`, `item_parti`, `balance_amount`, `item_amnd`, `item_amnf`, `item_tax`, `item_amniw`, `item_amnif`
                from `invoice_data` 
                where `item_date` = ? and client_id = ?';           

            $stmt=$con->prepare( $sql );
            $stmt->bind_param( 'ss', $date, $id );
            $stmt->execute();
            $result=$stmt->get_result();
            $data=[];
            while( $rs=$result->fetch_object() ){
                $data[]=array(
                    'client_name'       =>  $rs->client_name,
                    'item_date'         =>  $rs->item_date,
                    'item_refe'         =>  $rs->item_refe,
                    'item_parti'        =>  $rs->item_parti,
                    'balance_amount'    =>  $rs->balance_amount,
                    'item_amnd'         =>  $rs->item_amnd,
                    'item_amnf'         =>  $rs->item_amnf,
                    'item_tax'          =>  $rs->item_tax,
                    'item_amniw'        =>  $rs->item_amniw,
                    'item_amnif'        =>  $rs->item_amnif
                );
            }

            $stmt->free_result();
            $stmt->close();
            return json_encode( $data );
        }
        return false;
    }





    $data=[];
    $action = isset( $_GET['action'] ) ? $_GET['action'] : false;

    switch( $action ){
        case 'getclientRecords':
            $data=getclientRecords($con);
        break;
        case 'getclientRecordByDate':
            $data=getclientRecordByDate($con);
        break;
        default:
            $data=['error'=>'no defined action'];
        break;
    }


    header('Access-Control-Allow-Origin: *');
    http_response_code( $action ? 200 : 400 );
    exit( $data );
?>

为了解决sql漏洞和缺少返回数据的问题(数据没有
回显到ajax函数中),以下内容可能会有所帮助

<?php

    require '../db_connection.php';


    function getclientRecords( $con=false ){
        $id = isset( $_POST['client_id'] ) ? $_POST['client_id'] : false;
        if( $con && $id ){
            $sql='select `item_date` 
                    from `invoice_data` 
                    where `client_id`=?';

            $stmt=$con->prepare( $sql );
            $stmt->bind_param( 's', $id );
            $stmt->execute();
            $result=$stmt->get_result();
            $data=[];
            while( $rs=$result->fetch_object() ){
                $data[]=$rs->item_date;
            }
            $stmt->free_result();
            $stmt->close();
            return json_encode( $data );
        }
        return false;
    }

    function getclientRecordByDate( $con=false ){
        $date = isset( $_POST['date'] ) ? $_POST['date'] : false;
        $id = isset( $_POST['client_id'] ) ? $_POST['client_id'] : false;

        if( $con && $id && $date ){

            $sql = 'select `client_name`, `item_date`, `item_refe`, `item_parti`, `balance_amount`, `item_amnd`, `item_amnf`, `item_tax`, `item_amniw`, `item_amnif`
                from `invoice_data` 
                where `item_date` = ? and client_id = ?';           

            $stmt=$con->prepare( $sql );
            $stmt->bind_param( 'ss', $date, $id );
            $stmt->execute();
            $result=$stmt->get_result();
            $data=[];
            while( $rs=$result->fetch_object() ){
                $data[]=array(
                    'client_name'       =>  $rs->client_name,
                    'item_date'         =>  $rs->item_date,
                    'item_refe'         =>  $rs->item_refe,
                    'item_parti'        =>  $rs->item_parti,
                    'balance_amount'    =>  $rs->balance_amount,
                    'item_amnd'         =>  $rs->item_amnd,
                    'item_amnf'         =>  $rs->item_amnf,
                    'item_tax'          =>  $rs->item_tax,
                    'item_amniw'        =>  $rs->item_amniw,
                    'item_amnif'        =>  $rs->item_amnif
                );
            }

            $stmt->free_result();
            $stmt->close();
            return json_encode( $data );
        }
        return false;
    }





    $data=[];
    $action = isset( $_GET['action'] ) ? $_GET['action'] : false;

    switch( $action ){
        case 'getclientRecords':
            $data=getclientRecords($con);
        break;
        case 'getclientRecordByDate':
            $data=getclientRecordByDate($con);
        break;
        default:
            $data=['error'=>'no defined action'];
        break;
    }


    header('Access-Control-Allow-Origin: *');
    http_response_code( $action ? 200 : 400 );
    exit( $data );
?>



Hi,开始调试的最佳方法是激活错误日志并显示它们,它们将成为结果的一部分,因此您将得到无效的json,但您至少可以在响应中看到问题所在:修复500个错误后,您需要回显函数的结果:即
echo getclientRecords($con)否则它将不会返回给请求者。希望这有帮助!令人困惑的是,另一种方法有
return
另一种方法有
echo
。也许您的意思是
getclientRecords
返回为
echo json\u encode($results)保持一致,要么在函数内部使用return,要么立即回显它,只需选择与您的特定问题无关的一个,但您的代码容易受到SQL注入的攻击,因此如果您现在受到来自客户端的压力,只需想一想如果系统被破坏会发生什么?您有没有可能也添加ajax代码?您好,开始调试的最佳方法是激活错误日志并显示它们,然后它们将成为结果的一部分,因此您将得到无效的json,但您至少可以在响应中看到问题所在:修复500个错误后,您需要回显函数的结果:即
回显getclientRecords($con)否则它将不会返回给请求者。希望这有帮助!令人困惑的是,另一种方法有
return
另一种方法有
echo
。也许您的意思是
getclientRecords
返回为
echo json\u encode($results)保持一致,要么在函数内部使用return,要么立即回显,只需选择与您的特定问题无关的OneNote,但您的代码容易受到SQL注入的攻击,因此如果您现在面临来自客户端的压力,请想想如果系统被破坏会发生什么?您是否有可能也添加ajax代码?非常感谢您的帮助,这将解决安全问题,但我的问题仍然存在。你也能帮我吗/我意识到我在使用原始函数时犯了一个错误,因此将这些函数修改为现在的样子。我对它们进行了简单的测试,它们似乎很有效。顺便说一句,我有一个小问题要问。我可以在这里提问,还是需要创建另一个问题?看,我有一个datatable,我在其中显示数据,但它只在我单击(表头)时显示数据,即当我单击列中的Firstname时,它显示数据,当我刷新页面数据时,对我来说,听起来这应该是一个新问题非常感谢您的帮助这将解决安全问题,但我的问题仍然存在。你也能帮我吗/我意识到我在使用原始函数时犯了一个错误,因此将这些函数修改为现在的样子。我对它们进行了简单的测试,它们似乎很有效。顺便说一句,我有一个小问题要问。我可以在这里提问,还是需要创建另一个问题?看,我有一个datatable,我在其中显示数据,但它只在我单击(表头)时显示数据,即,当我单击列中的Firstname时,它显示数据,当我刷新页面数据时,它不可见。对我来说,这听起来应该是一个新问题