复选框以过滤数据 php jQuery AJAX

checkbox to filter data php jQuery AJAX

提问人:Puvan 提问时间:11/10/2023 更新时间:11/10/2023 访问量:40

问:

我有一个名为“活动”的复选框,当员工进入系统时,它总是被选中,它将显示活动工作人员的数据。现在,如果我取消选中该复选框,它应该显示非活动工人的数据,而在我的情况下,它不起作用。请检查我的代码,如果您为我提供一些解决方案,它将对我有所帮助

这是我的复选框代码

<div class="col-lg-3">
    <label for="activeWorker">
        <input type="checkbox" id="activeWorker" name="activeWorker" value="active" checked> Active Workers
    </label>
</div>

这是我根据所选日期范围重新加载数据的函数代码

function reload() {
    var dateFrom = $("#dateFrom").val();
    var dateTo = $("#dateTo").val();
    var coid = $("#selectCompanyId").val();
    var activeStatus = $("#activeWorker").val();

    var dataURL;

    alert("You have clicked the reload button. Reloading the data for the date range:" + dateFrom + " to " + dateTo + " For Company : " + coid);

    if (activeTab == "#tab-1") { // Pending
        dataURL = "data/data_workerSurvey.php?mod=pending&dateFrom=" + dateFrom + "&dateTo=" + dateTo + "&coid";
        $('#tab1_tblSurveyPending').DataTable().ajax.url(dataURL).load();
    } else if (activeTab == "#tab-2") { // Completed
        dataURL = "data/data_workerSurvey.php?mod=completed&dateFrom=" + dateFrom + "&dateTo=" + dateTo + "&coid=" + coid;
        $('#tab2_tblSurveyCompleted').DataTable().ajax.url(dataURL).load();
    } else { // All
        dataURL = "data/data_workerSurvey.php?mod=all&dateFrom=" + dateFrom + "&dateTo=" + dateTo + "&coid=" + coid;
        $('#tab3_tblSurveyAll').DataTable().ajax.url(dataURL).load();
    }
}

这是我的数据库代码

case "pending":
    $dateFrom = $_GET['dateFrom']; // Every time will have value
    $dateTo = $_GET['dateTo']; // Every time will have value
    $coid = $_GET['coid']; // This is not certain, depends on user selection
    $activeStatus = TRUE; // TRUE - Showing active worker; FALSE - showing inactive worker

    if ($activeStatus) {
        $whereClause = " AND a.biodata_status_id IN ('E', 'P') ";
    } else {
        $whereClause = " AND a.biodata_status_id = 'N' ";
    }

    if ($coid !== "" && $coid !== null) {
        $sql = "SELECT a.worker_id, a.worker_name, a.batchno, a.passport_no, a.company, a.arrival_date, a.plks, a.co_id, IF(DATEDIFF(a.plks, a.arrival_date) < 365 * 2, DATE_ADD(a.plks, INTERVAL 1 YEAR), a.plks) AS contract_end_date
            FROM rbs_worker a
            LEFT JOIN tbl_contract_extension_survey b ON (b.workerid = a.id AND b.status = 1 AND b.contract_end_date >= a.plks)
            LEFT JOIN rbs_payroll_company c ON c.co_id = a.co_id
            WHERE a.worker_id IS NOT NULL AND a.arrival_date IS NOT NULL AND a.plks IS NOT NULL 
                AND a.status = 'A' 
                AND a.co_id = %s
                AND IF(DATEDIFF(a.plks, a.arrival_date) < 365 * 2, DATE_ADD(a.plks, INTERVAL 1 YEAR), a.plks) >= %s 
                AND IF(DATEDIFF(a.plks, a.arrival_date) < 365 * 2, DATE_ADD(a.plks, INTERVAL 1 YEAR), a.plks) <= %s AND b.id IS NULL" . $whereClause;
        $rs = DB::query($sql, $coid, $dateFrom, $dateTo);
    } else {
        $sql = "SELECT a.worker_id, a.worker_name, a.batchno, a.passport_no, a company, a.arrival_date, a.plks, a.co_id, IF(DATEDIFF(a.plks, a.arrival_date) < 365 * 2, DATE_ADD(a.plks, INTERVAL 1 YEAR), a.plks) AS contract_end_date 
            FROM rbs_worker a
            LEFT JOIN tbl_contract_extension_survey b ON (b.workerid = a.id AND b.status = 1 AND b.contract_end_date >= a.plks)
            LEFT JOIN rbs_payroll_company c ON c.co_id = a.co_id
            WHERE a.worker_id IS NOT NULL AND a.arrival_date IS NOT NULL AND a.plks IS NOT NULL 
                AND a.status = 'A' 
                AND IF(DATEDIFF(a.plks, a.arrival_date) < 365 * 2, DATE_ADD(a.plks, INTERVAL 1 YEAR), a.plks) >= %s 
                AND IF(DATEDIFF(a.plks, a.arrival_date) < 365 * 2, DATE_ADD(a.plks, INTERVAL 1 YEAR), a.plks) <= %s AND b.id IS NULL" . $whereClause;
        $rs = DB::query($sql, $dateFrom, $dateTo);
    }

我希望如果员工取消选中该框,他们应该能够查看非活动工作人员数据。

php jquery ajax

评论


答:

0赞 Paul Allsopp 11/10/2023 #1

有几件事:

您将复选框的值设置为“active”,但没有 JS 代码来控制它,因此它始终处于活动状态。

你有一个变量“activeStatus”,它获取复选框的值,如上所述,它始终是“active”,但你没有显示它的使用位置。它不会附加到任何位置的 dataURL,因此它永远不会发送到服务器。

我想这就是您将数据库代码中的$activeStatus设置为 true 的原因?!它应该是 $_GET['activeStatus'],它应该添加到 dataURL 中,但不是通过检查值,而是通过检查检查的属性是否为 true。

名称/值组合仅在使用表单提交方法时才适用于表单字段。如果您使用的是 AJAX,则它们毫无价值,请使用 id 和字段的状态/内容。所以在这种情况下:

// will be true or false
let activeStatus = $("#activeWorker").prop('checked');

...然后:

dataURL = "data/data_workerSurvey.php?mod=pending&activeStatus=" + activeStatus + "&dateFrom=" + dateFrom + "&dateTo=" + dateTo + "&coid";

然后,在数据库代码中,您可以这样说:

$activeStatus = (bool)$_GET['activeStatus'];

试一试。

评论

0赞 Puvan 11/10/2023
嗨,Paul Allsopp先生。感谢您提供的信息和解释。我已经尝试过该方法,但默认情况下,该复选框将被选中,并且将显示活跃工作人员的数据。我已尝试包含您提供的代码,但活动工作人员数据和显示的数据不正确。另一件事是,如果我取消选中并重新检查,数据不会更改
0赞 Paul Allsopp 11/12/2023
如果无论复选框的状态如何,数据都没有更改,则在提取数据时实际上不会使用复选框的状态。调试 SQL。