Как вывести список категорий из базы данных с указанием товара при нажатии на категорию - PullRequest
0 голосов
/ 13 февраля 2019

Я не знаю, как отобразить товар из выбранной категории.И как сделать это с ограниченным продуктом на этой странице, можно нажать на следующий или предыдущий, чтобы увидеть продукт на той же странице.

Это таблица из моей базы данных:

Категория

идентификатор_категории
имя_категории
описание_категории

Продукт

идентификатор_продукта
тип
имя_продукта
цена_продукта
изображение
product_description
product_date

<?php
// show categories list
$connect = mysqli_connect("localhost", "root", "", "test");
$q = mysqli_query($connect,"select * from category ORDER BY category_name 
ASC");
while ($res = mysqli_fetch_assoc($q))
{
echo '<li> <a href="counter.php?category_id='. $res['category_id'] 
.'">'.$res['category_name'].'</a></li>';
}
?>


<?php
    if(isset($_GET['category_id'])){
    $cat_id = $_GET['category_id'];
        $conn = mysqli_connect("localhost", "root", "", "test");
        $query = "SELECT product_id, product_name, product_price, image FROM product WHERE type = '$cat_id' ORDER BY product_id ASC ";
        $result = mysqli_query($conn,$query);

        $line = mysqli_fetch_array($result);
        if (!$line) echo '';
        $previd = -1;
        $currid = $line[0];
        if (isset($_GET['id'])) {
                $previous_ids = array();
            do {
                $previous_ids[] = $line[0];
                $currid = $line[0];
                if ($currid == $_GET['id']) break;
                $previd = end($previous_ids);
                $line = mysqli_fetch_array($result);
            } while ($line);
        }


        if ($previd > -1){
            echo '<a href="counter.php?cat_id='.$cat_id.'&amp;id='.$previd.'" class="prev_pic"><span>Prev</span></a>';
            echo str_repeat('&nbsp;', 5);

            $line = mysqli_fetch_array($result);

            $query = "SELECT product_id, product_name, product_price, image FROM product WHERE type = '$cat_id' ORDER BY product_id ASC RAND() LIMIT 1";
            $result = mysqli_query($connect, $query);
            while ($row = mysqli_fetch_array($result)){
                echo '<a href="counter.php?cat_id='.$cat_id.'&amp;id='.$row['id'].'"class="random">Random</a>';
            }
            echo str_repeat('&nbsp;', 5);
            if ($line) echo '<a href="counter.php?cat_id='.$cat_id.'&amp;id='.$line[0].'" class="next_pic"><span>Next</span> </a><br /><br />';

                echo "</div>\\r";
            }

        if(mysqli_num_rows($result) > 0) {

            while ($row = mysqli_fetch_array($result)) {

                ?>
                <div class="col-md-3">

                    <form method="post" action="counter.php?action=add&id=<?php echo $row["product_id"]; ?>">

                        <div class="product">
                            <img src="img/<?php echo $row["image"]; ?>" style="width:100px; height:100px">
                            <h5 class="text-info"><?php echo $row["product_name"]; ?></h5>
                            <h5 class="text-danger"><?php echo "RM " . $row["product_price"]; ?></h5>
                            <input type="text" name="quantity" class="form-control" value="1">
                            <input type="hidden" name="hidden_name" value="<?php echo $row["product_name"]; ?>">
                            <input type="hidden" name="hidden_price" value="<?php echo $row["product_price"]; ?>">
                            <input type="submit" name="add" style="margin-top: 5px;" class="btn btn-success" value="+">
                            <input type="submit" name="minus" style="margin-top: 5px;" class="btn btn-success" value="-">
                        </div>
                    </form>
                </div>
                <?php
            }
        }
    }
    ?> 

Ожидаемый результат должен отображаться при нажатии продукта в списке категорий.Но фактический результат сейчас не отображается продукт, он пуст.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Кажется, у вас есть две проблемы.Сначала вы пытаетесь перебрать один и тот же набор результатов.Это невозможно.Как только вы это зациклите, то, как вы это делаете, результаты сбрасываются.Вы можете использовать этот метод для возврата всех результатов в виде массива ASSOC, а затем вы можете зациклить этот массив несколько раз.

$query = "SELECT product_id, product_name, product_price, image FROM product WHERE type = ? ORDER BY product_id ASC";
$stmt = mysqli_prepare($conn, $query);
$stmt->bind_param('i', $cat_id);
$stmt->execute();
$result = $stmt->get_result();
$rows = $result->fetch_all(MYSQLI_ASSOC);

foreach ($rows as $key => $value) {
...
}

foreach ($rows as $key => $value) {
...
}

Во-вторых, кажется, что вы хотите разбить результаты своих продуктов на страницы.Для этого вы можете использовать LIMIT .Я бы передал параметр с именем page , а затем использовал его для фильтрации ограниченных результатов.Если вы хотите получить 20 результатов на страницу, лимитный запрос будет выглядеть следующим образом.

$numPerPage = 20;
$pageNum = isset($_GET['p']) ? preg_replace('/[^0-9]/', '', $_GET['p']) : 1;

# Get Count
$query = "SELECT product_id, product_name, product_price, image FROM product WHERE type = ? ORDER BY product_id ASC";
$stmt = mysqli_prepare($conn, $query);
$stmt->bind_param('i', $cat_id);
$stmt->execute();

$result = $stmt->get_result();
$row = $result->fetch_row();
$count = array_shift($row);

$lastPage = ceil($count/$numPerPage);
if ($lastPage < 1) {
  $lastPage = 1;
}

# Check to make sure user isn't higher than set pages
if ($pageNum < 1) { 
    $pageNum = 1; 
} else if ($pageNum > $lastPage) { 
    $pageNum = $lastPage; 
}

# Get Results
$query = "SELECT product_id, product_name, product_price, image FROM product WHERE type = ? ORDER BY product_id ASC";
$limit = ' LIMIT ' .($pageNum - 1) * $numPerPage .',' .$numPerPage;

$stmt = mysqli_prepare($conn, $query . $limit);
$stmt->bind_param('i', $cat_id);
$stmt->execute();
$result = $stmt->get_result();
$rows = $result->fetch_all(MYSQLI_ASSOC);

foreach ($rows as $key => $value) {
...
}

foreach ($rows as $key => $value) {
...
}

Надеюсь, это поможет решить возникающие проблемы.

0 голосов
/ 13 февраля 2019

для обмена

<a href="counter.php?product_id='. $res['category_id'] 
.'">

на

<a href="counter.php?category_id='. $res['category_id'] 
.'">

Получение не совпадает с восстановлением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...