Как выводить с главной страницы 1 услугу на новую страницу html/php с БД

Рейтинг: 1Ответов: 1Опубликовано: 04.08.2023

я делаю сайт и недавно решил попробовать добавлять услуги с помощью php подключив БД. Я в php новичок, и весь код писал cltr+c \ cltr+v ) Можете по подробнее описать, чтобы я знал на будущее, спасибо!

Всё отлично работает на главной странице, и показывает все услуги с БД. Под каждой услугой у меня кнопка "Подробнее". Мне нужно при нажатии на эту кнопку, на новой странице выводилась только 1 услуга (по id услуги/товара). Как мне ее реализовать?


Файл db.php:

 $db = new PDO("mysql:host=localhost; dbname=name","name","password");
    
    $services = [];    
    
    
    if ($query = $db->query("SELECT * FROM Services")){
    echo "<pre>";
        $services = $query->fetchAll(PDO::FETCH_ASSOC);
    echo "</pre>";
        } else {
        print_r($db->errorInfo());
        }

Файл index.php:

<!DOCTYPE html>
<html lang="ru">
<head>
    <?php require_once "blocks/head.php"; ?>
</head>
<body>
 <?php require_once "blocks/header.php"; ?>


 <div class="cards"><?php foreach ($services as $data): ?>
    <div class="card">  
            <a href="#" class="card__image">
        <img src="<?= $data['image']; ?>"/>
        </a>
        <div class="card__label"><?= $data['discount']; ?></div>
        <div class="card__prices">
        <div class="card__price card__price--discount"><?= $data['price-discount']; ?></div>
        <div class="card__price card__price--common"><?= $data['price']; ?></div>
        <a href="#<?= $data['id']; ?>" class="card__title"><?= $data['title']; ?></a>
                <!-- Кнопка "Подробнее" -->
                <a href="/services.php?id=<?= $data['id']; ?>"><button>Подробнее</button></a> 
    </div>
  <?php endforeach; ?></div>    

 <?php require_once "blocks/footer.php"; ?>
</body>
</html>

Выводить 1 услугу надо на новой странице (назвал ее services.php).

Пробовал написать в services.php следующий код:

<?php 
$page = $_GET['id'];
echo $page;
?>

То на странице услуги(services.php) выводилась просто ID услуги сверху(перед header)
А внизу так же все услуги.

Ответы

▲ 1Принят
<?php
    include_once('path/to/db.php');
    $errors = [];
    $id = isset($_GET['id']) ? $_GET['id'] : null;
    if ($id == null) $errors[] = "No ID for service";
    if ($query = $db->query("SELECT * FROM Services WHERE id = {$id}")){
        $services = $query->fetchAll(PDO::FETCH_ASSOC);
    } else {
        $errors[] = $db->errorInfo();
    }
    if (count($services))
      $service = $services[0];
    else
      $errors[] = "Service not found";
?>

Тут уже начинается верстка: И тебе нужно проверить есть ли вообще ошибки

// верстка head + header
<?php if (count($errors)):?>
// тут выводишь ошибки если они есть 
// так же как выводил список сервисов
<?else: ?>
// тут уже выводишь как сверстал сервис 
<div class="serviceName"><?=$service['title']?></div>
<?endif; ?>
// верстка footer

Это решение конкретно для твоего случая, если проект планируется большой, советую задумать в сторону какого-то фреймворка(Yii, Laravel) или же изобрести свой велосипед(Смотри видео про PHP MVC), который будет ездить правильно!