Php 无法使用AJAX在PDO中获取用于产品筛选的数据

Php 无法使用AJAX在PDO中获取用于产品筛选的数据,php,jquery,filter,Php,Jquery,Filter,无法使用PDOamdAJAX筛选产品 下面的代码使用PDO和AJAX加载数据表单sql,但当我尝试基于品牌进行过滤时,它不起作用。尝试了调试var\u dump方法,但没有任何帮助 有人能帮我解决,我如何过滤产品,代码中有什么遗漏吗 HTML <div class="md-radio my-1"> <input type="radio" class="filter_all cate" name="cate" id="<?php echo str_replace(

无法使用
PDO
amd
AJAX
筛选产品

下面的代码使用
PDO
AJAX
加载数据表单
sql
,但当我尝试基于
品牌进行过滤时,它不起作用。尝试了调试
var\u dump
方法,但没有任何帮助

有人能帮我解决,我如何过滤产品,代码中有什么遗漏吗

HTML

<div class="md-radio my-1">
     <input type="radio" class="filter_all cate" name="cate" id="<?php echo str_replace(' ', '', $row['sca']); ?>" value="<?php echo $row['sca'] ?>">
     <label for="<?php echo str_replace(' ', '', $row['sca']); ?>">
            <?php echo $row['sca']; ?>
     </label>
</div>

脚本

$(document).ready(function () {
            var flag = 0;
            var fetching = false;
            var done = false;

            function filter_data() {
                // prevent concurrent requests
                if (fetching === true) {
                    return;
                }
                fetching = true;
                var data = {
                    action: 'fetch_data',
                    cate: get_filter('cate'),
                    brand: get_filter('brand'),
                    model: get_filter('model'),
                    sort: get_filter('sort'),
                    date: get_filter('date'),
                    offset: flag,
                    limit: 4
                };
                console.log($.param(data));
                $.ajax({
                    url: "fetch.php?" + $.param(data),
                    type: 'POST'
                })
                        .done(function (data) {
                            console.log('data received');

                            $('.filter_data').append(data); // append

                            // we reached the end, no more data
                            if (data === '<h3>No Data Found</h3>') {
                                done = true;
                            }

                            flag += 4;
                            fetching = false; // allow further requests again
                        })
                        .fail(function (error) {
                            console.log('An error occurred while fetching', error)
                            // TODO: some error handling
                        });
            }

            function get_filter(class_name) {
                var filter = [];
                $('.' + class_name + ':checked').each(function () {
                    filter.push($(this).val());
                });
                return filter;
            }
            $('.filter_all').click(function () {
                filter_data();
            });
            filter_data(); // commented out for debugging purpose
            var $window = $(window);
            var $document = $(document);
            $window.scroll(function () {

                if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight - 300 && fetching === false && done === false) {
                    console.log('infinite scroll');
                    filter_data();
                }
            });
        });
$(文档).ready(函数(){
var标志=0;
var取数=false;
var done=false;
函数过滤器_数据(){
//防止并发请求
如果(获取===true){
返回;
}
取数=真;
风险值数据={
操作:“获取_数据”,
cate:get_filter('cate'),
品牌:获取过滤器(“品牌”),
模型:获取过滤器(“模型”),
排序:获取过滤器(“排序”),
日期:获取过滤器(“日期”),
偏移量:标志,
限额:4
};
console.log($.param(数据));
$.ajax({
url:“fetch.php?”+$.param(数据),
类型:“POST”
})
.完成(功能(数据){
console.log(“接收到的数据”);
$('.filter_data').append(data);//append
//我们到达终点,没有更多的数据
如果(数据=='未找到数据'){
完成=正确;
}
flag+=4;
fetching=false;//再次允许进一步请求
})
.失败(功能(错误){
console.log('提取时出错',错误)
//TODO:一些错误处理
});
}
函数get_filter(类名称){
var过滤器=[];
$('.'.+类名称+':选中')。每个(函数(){
filter.push($(this.val());
});
回流过滤器;
}
$('.filter_all')。单击(函数(){
过滤数据();
});
filter_data();//出于调试目的注释掉
变量$window=$(window);
var$document=$(文档);
$window.scroll(函数(){
if((window.innerHeight+window.scrollY)>=document.body.offsetHeight-300&&fetching==false&&done==false){
log(“无限滚动”);
过滤数据();
}
});
});
PHP

<?php

include("$_SERVER[DOCUMENT_ROOT]/include/config.php");
include("$_SERVER[DOCUMENT_ROOT]/include/function.php");

$query = "SELECT * FROM allpostdata WHERE sts = '1' AND mca='Vehicle'";

if (!empty($_GET['cate'])) {
    $query .= " AND sca IN (" . str_repeat("?,", count($_GET['cate']) - 1) . "?)";
} else {
    $_GET['cate'] = []; // in case it is not set 
}

if (!empty($_GET['brand'])) {
    $query .= " AND product_brand IN (" . str_repeat("?,", count($_GET['brand']) - 1) . "?)";
} else {
    $_GET['brand'] = []; // in case it is not set 
}

if (!empty($_GET['model'])) {
    $query .= " AND mdl IN (" . str_repeat("?,", count($_GET['model']) - 1) . "?)";
} else {
    $_GET['model'] = []; // in case it is not set 
}

if (empty($_GET['sort']) || $_GET['sort'][0] == "date") {
    $query .= " ORDER BY pdt DESC";
} elseif ($_GET["sort"][0] == "ASC" || $_GET["sort"][0] == "DESC") {
    $query .= " ORDER BY prs " . $_GET['sort'][0];
}

if (isset($_GET['limit'])) {

    if (!empty($_GET['offset'])) {
        $query .= " LIMIT " . $_GET['limit'] . " OFFSET " . $_GET['offset'];
    } else {
        $query .= " LIMIT " . $_GET['limit'];
    }
}
$stmt = $conn->prepare($query);
$params = array_merge($_GET['cate'], $_GET['brand'], $_GET['model']);
$stmt->execute($params);
$result = $stmt->fetchAll();
$total_row = $stmt->rowCount();
$output = '';
if ($total_row > 0) {
    foreach ($result as $row) {
        $parameter = $row['pid'];
        $hashed = md5($salt . $parameter);
        $output .= '<a href="/single_view.php?p=' . $row['id'] . '" class="w-xl-20 w-lg-20 col-md-3 col-6 p-1 p-lg-2">
                            <div class="card border-0 small">
                                <img class="card-img-top rounded-0" src="/upload/thumb/' . $row["im1"] . '" alt="Card image cap">
                                <div class="card-body pb-0 pt-2 px-0">
                                    <h6 class="card-title text-dark text-truncate">' . ucfirst(strtolower($row['tit'])) . '</h6>
                                    <h6 class="card-subtitle mb-1 text-muted text-truncate small">' . $row['product_brand'] . '&nbsp;/&nbsp;' . $row['mdl'] . '</h6>
                                    <p class="card-text"><strong class="card-text text-dark text-truncate">&#x20B9;&nbsp;' . $row['prs'] . '</strong></p>' . timeAgo($row['pdt']) . '
                                </div>
                            </div>
                        </a>';
    }
} else {
    $output = '<h3>No Data Found</h3>';
}
echo $output;
?>

尽管将ajax调用定义为post,但您仍然通过GET查询参数发送数据。这是一种安全风险。尝试将AJAX调用更改为类似的内容,并将您的
$\u GET
stuff替换为
$\u POST

            $.ajax({
                url: '/your-form-processing-page-url-here',
                type: 'POST',
                data: data,
                mimeType: 'multipart/form-data',
                success: function(data, status, jqXHR){
                    alert('Hooray! All is well.');
                    console.log(data);
                    console.log(status);
                    console.log(jqXHR);

                },
                error: function(jqXHR,status,error){
                    // Hopefully we should never reach here
                    console.log(jqXHR);
                    console.log(status);
                    console.log(error);
                }
            });

您使用的是
类型:'POST'
,因此
$\u GET
中不会有任何内容,请改用
$\u POST
<代码>变量转储($\u POST)在PHP的顶部,以确保您正确发送。@JayBlanchard,但我可以获得
offset
limit
值,哪些值可以
console.log($.param(data))返回?查询字符串的构造是否正确?@JayBlanchard在
控制台中
我可以看到查询,但所选值没有在query中传递。是否所有表单元素都具有正确的名称属性或正确的类属性?这是我在
var\u dump($\u POST)中得到的结果
array(3){[“action”]=>string(10)“fetch_data”[“offset”]=>string(1)“0”[“limit”]=>string(1)”4}
无法在
var_dump
console.log(data)中找到所选值;在发送之前,请仔细检查发送的值