php, java script Кнопка загрузить еще

Рейтинг: 0Ответов: 2Опубликовано: 29.03.2023

В начале я делал пагинацю но бросил это дело, решил делать Кнопку загрузить еще. пагинацию я решил не делать а сделал копку показать больше авто.

Изменил основной код вывода авто

 <?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

require_once('../admin-aj/conn/connectvars.php');

$name = $_GET['id'];
$model = isset($_GET['model']) ? $_GET['model'] : '';
$n = isset($_GET['n']) ? $_GET['n'] + 1 : 0;

$query = "SELECT * FROM `blog` WHERE `make` = '$name' AND `is_active` = '1' AND `is_na_market` = '1'";

if ($model !== '') {
$query .= " AND `model` = '$model'";
}

$query .= " ORDER BY id DESC LIMIT $n,21";

$get_query = mysqli_query($connection, $query);
$num_gars = mysqli_num_rows($get_query);

if ($num_gars > 0) {
while ($get_list = mysqli_fetch_array($get_query)) {
?>
<div class="col-md-4 col-sm-6 kolbasa">
<a href="product-details.php?id=<?php echo $get_list['id'];?>&cate=<?php echo $get_list['title'];?>">
<div class="thumbnail2"><img src="https://www.cyberforum.ru/images/upload/<?php echo $get_list['image']?>" alt=""/></div>
<div class="kolbasa-title price"><h4><?php echo $get_list['title']?></h4></div>
<!-- <p><?php echo substr($get_list['remarks'], 0, 100) .((strlen($row['remarks']) > 200) ? '...' : ''); ?> </p> -->

<div>
<div class="price1">$<?php echo $get_list['price']?><span style="float:right;font-size:small">FOB Japan</span></div>
<div class="price2">¥<?php echo $get_list['price_jpy']?></div>
</div>

<hr class="line">

<div class="col-md-12 col-sm-12">
<div class="desc"><?php echo $get_list['year_of_reg']?>
<span style="float:right;"><?php echo $get_list['kms']?></span></div>
</div>

</a>
</div>
<?php
}
}

echo "<input type='hidden' class='gars' value='$num_gars'>";

if ($num_gars >= 10) {
?>
<div class="text-center">
<button class="btn btn-outline-primary" id="load-more-btn" data-next-page="<?php echo $n + 10 ?>" data-make="<?php echo $name ?>" data-model="<?php echo $model ?>">Load more</button>
</div>
<?php
}
?>

Потом дописал скрипт

$(document).ready(function () {
var n = <?php echo $n ?>;
var per_page = 21;
var name = "<?php echo $name ?>";
var model = "<?php echo $model ?>";

$("#load-more-btn").on("click", function () {
var next_page = $(this).data("next-page");
var make = $(this).data("make");
var model = $(this).data("model");

$.ajax({
url: "load_next_cars.php",
type: "GET",
data: {
n: next_page,
id: make,
model: model
},
success: function (response) {
$("#car-infinite-list").append(response);
n += per_page;
$("#load-more-btn").data("next-page", n);
},
error: function (jqXHR, textStatus, errorThrown) {
console.log(textStatus, errorThrown);
}
});
});
});

И далее сделал отдельный файл load_more_car.php

<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
var_dump($_GET);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require_once('../admin-aj/conn/connectvars.php');
$name=$_GET['id'];
$model=$_GET['model'];
$n=$_GET['n']+1;
$query="SELECT * FROM `blog` where `make` = '$name' AND `is_active`='1' AND `is_na_market`='1' AND `model`='$model' order by id desc limit $n,21";
$get_query = mysqli_query($connection,$query);
$num_gars = $get_query->num_rows;
if ($num_gars > 0) {
while($get_list=mysqli_fetch_array($get_query))
{
?>
<div class="col-md-4 col-sm-6 kolbasa">
<a href="product-details.php?id=<?php echo $get_list['id'];?>&cate=<?php echo $get_list['title'];?>">
<div class="thumbnail2"><img src="https://www.cyberforum.ru/images/upload/<?php echo $get_list['image']?>" alt=""/></div>
<div class="kolbasa-title price"><h4><?php echo $get_list['title']?></h4></div>
<!-- <p><?php echo substr($get_list['remarks'], 0, 100) .((strlen($row['remarks']) > 200) ? '...' : ''); ?> </p> -->

<div>
<div class="price1">$<?php echo $get_list['price']?><span style="float:right;font-size:small">FOB Japan</span></div>
<div class="price2">¥<?php echo $get_list['price_jpy']?></div>
</div>

<hr class="line">

<div class="col-md-12 col-sm-12">
<div class="desc"><?php echo $get_list['year_of_reg']?>
<span style="float:right;"><?php echo $get_list['kms']?></span></div>
</div>

</a>
</div>
<?php }
}
echo "<input type='hidden' class='gars' value='$num_gars'>";
?>

еще сортировку настроил , примечание сортировка стоит у меня до вывода авто.

<form action="" method="get">
<div class="row">
<div class="form-group">
<div class="col-md-1 col-xs-3 pull-right">
<input type="submit" class="form-control" value="Sort">
<input type="hidden" name="id" value="<?php echo $name; ?>">
</div>
<div class="pull-right">
<select name="model" id="selUser1" placeholder="Sort by model" class="form-control" required style="margin:10px 0px;">
<option value="">Sort by model</option>
<?php
// Construct the query to retrieve the unique 'model' values for the specified 'name' value
$query = "SELECT DISTINCT model FROM blog WHERE make='$name' ORDER BY model";
$get_query = mysqli_query($connection, $query);
while ($info = mysqli_fetch_array($get_query)) {
// Output an <option> element for each unique model value
$selected = ($info['model'] === $model) ? 'selected' : ''; // If this is the current model value, mark it as selected
echo '<option value="' . $info['model'] . '" ' . $selected . '>' . $info['model'] . '</option>';
}
?>
</select>
</div>
</div>
</div>
</form>

В итоге кнопка работает и автомобили загружаются только когда сортировал например Nissan skyline. + настроил отладчик в visual studio code и в xammp

он пишет это при загрузки не отсортированых машин

C:\xampp\htdocs\en\load_next_cars.php:5:
array (size=3)
'n' => string '10' (length=2)
'id' => string 'Nissan' (length=6)
'model' => string '' (length=0)

Когда же загружаю уже отсортированные авто то все работает идеально. Если есть идеи подскажите пожалуйста. Спасибо.

UPD я тут несного посидел , возможно моя проблема в файле

load_next_cars.phph
Вот так я его изменил 
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

require_once('../admin-aj/conn/connectvars.php');

$name = $_GET['id'];
$n = $_GET['n'] + 1;

// check if model is specified
if (isset($_GET['model'])) {
    $model = $_GET['model'];
    $query = "SELECT * FROM `blog` WHERE `make` = '$name' AND `model`='$model' AND `is_active`='1' AND `is_na_market`='1' ORDER BY id DESC LIMIT $n,21";
} else {
    $query = "SELECT * FROM `blog` WHERE `make` = '$name' AND `is_active`='1' AND `is_na_market`='1' ORDER BY id DESC LIMIT $n,21";
}

$get_query = mysqli_query($connection, $query);
$num_gars = $get_query->num_rows;

if ($num_gars > 0) { 
    while ($get_list = mysqli_fetch_array($get_query)) {
?>
        <div class="col-md-4 col-sm-6 kolbasa">
            <a href="product-details.php?id=<?php echo $get_list['id'];?>&cate=<?php echo $get_list['title'];?>">
                <div class="thumbnail2"><img src="../images/upload/<?php echo $get_list['image']?>" alt=""/></div>
                <div class="kolbasa-title price"><h4><?php echo $get_list['title']?></h4></div>
                <div>
                    <div class="price1">$<?php echo $get_list['price']?><span style="float:right;font-size:small">FOB Japan</span></div>
                    <div class="price2">¥<?php echo $get_list['price_jpy']?></div>
                </div>
                <hr class="line">
                <div class="col-md-12 col-sm-12">
                    <div class="desc"><?php echo $get_list['year_of_reg']?>
                    <span style="float:right;"><?php echo $get_list['kms']?></span></div>
                </div>
            </a>
        </div>
<?php   
    }
}
echo "<input type='hidden' class='gars' value='$num_gars'>";
?>

UPD 2 увидел ответ на свой вопрос только сейчас. Отпишусь какие получились результаты.

Ответы

▲ 0

У вас некорректно составляется запрос для получения авто.

$name=$_GET['id'];
$model=$_GET['model'];
$n=$_GET['n']+1;
$query="SELECT * FROM `blog` where `make` = '$name' AND `is_active`='1' AND `is_na_market`='1' AND `model`='$model' order by id desc limit $n,21";
$get_query = mysqli_query($connection,$query);

В частности, вот в этой части запроса: AND model='$model': в вашем случае, на первой странице у вас не выбрана модель, соответственно в скрипте в переменной $model будет пустая строка. В результае этого итоговый запрос будет выглядеть так

SELECT * FROM `blog` where `make` = '1234' AND `is_active`='1' AND `is_na_market`='1' 
-- вот тут обратите внимение:
AND `model`='' 

order by id desc limit $n,21"

Тоесть, для первой страницы скрипт будет искать все автомобили, у которых не указана модель.

Вам нужно сделать проверку на пустоту переменной $model и добавлять это условие в запрос только если она не пустая.

Под рукой PHP сейчас нет чтобы проверить, но, примерно, это может выглядеть так:

...

$model_condition = '';
if($model !== ''){
   $model_condition = " AND `model`='$model' "; 
}

$query="SELECT * FROM `blog` where `make` = '$name' AND `is_active`='1' AND `is_na_market`='1' $model_condition order by id desc limit $n,21";

...


PS: Рекомендую также почитать про SQL иньекции и почему нельзя исопльзовать пользовательский напрямую без проверки и фильтрации в SQL запросах.

PSS: "Это" они пишет у вас всегда, не только при загрузке неотсортированных машин, т.к. в 5й строчке кода у вас делается дамп всех GET параметров: var_dump($_GET);

▲ 0

Вот рабочий код все отлично.

Код запроса 
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

require_once('../admin-aj/conn/connectvars.php');

$name = $_GET['id'];
$n = $_GET['n'] + 1;

$model = isset($_GET['model']) ? $_GET['model'] : '';
$model_condition = '';
if ($model !== '') {
    $model_condition = " AND `model`='$model' ";
}

$query = "SELECT * FROM `blog` WHERE `make` = '$name' AND `is_active`='1' AND `is_na_market`='1'$model_condition ORDER BY id DESC LIMIT $n, 21";

$get_query = mysqli_query($connection, $query);
$num_gars = $get_query->num_rows;

if ($num_gars > 0) { 
    while ($get_list = mysqli_fetch_array($get_query)) {
Вывод в эхо. 
<?php   
    }
}
echo "<input type='hidden' class='gars' value='$num_gars'>";
?>