• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Automatycznie tworzenie nowych obiektów klasy "Article" wyświetlające kolejne artykuły

Aruba Cloud - Virtual Private Server VPS
0 głosów
233 wizyt
pytanie zadane 31 sierpnia 2022 w PHP przez Piotrek2713 Mądrala (5,520 p.)

Tworzę skrypt w PHP, ma za zadanie wyświetlić wszystkie artykuły z bazy danych na stronie bloga. Mam już gotową klasę Article i obiekt z pierwszym artykułem oraz kilka innych w bazie. Nie wiem, jak zrobić automatyczne pobieranie wszystkich artykułów z bazy do utworzonej klasy.

Oto cały kod php

<?php

    require_once "connect.php";

    $connection = new mysqli($host, $db_user, $db_password, $db_name);

    if ($connection->connect_errno!=0)
    {
        echo "error".$connection->connect_errno;
    }
    else
    {
        $sql = "SELECT * FROM `artykuły`";

        if ($result = @$connection->query($sql))
        {
            class Article
            {
                public $id;
                public $picture;
                public $title;
                public $teaser;
                public $content;
            }

            $row = $result->fetch_assoc();
            
            $a = new Article();
            $a->id = $row['id'];
            $a->picture = $row['picture'];
            $a->title = $row['title'];
            $a->teaser = $row['teaser'];
            $a->content = $row['content'];
        }

        $connection->close();
    }

?>
<!DOCTYPE html>
<html lang="pl">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Stay Fluent - Start</title>
    <link rel="stylesheet" href="css/style.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx" crossorigin="anonymous">
</head>
<body class="min-vh-100 bg-secondary">

    <header>

        <nav class="navbar navbar-expand-md navbar-dark bg-success">

            <a class="navbar-brand mx-2" href="index.html">LOGO.PNG</a>

            <button class="navbar-toggler bg-secondary" type="button" data-bs-toggle="collapse" data-bs-target="#nav" aria-controls="nav" aria-expanded="false" aria-label="Przełącznik Nawigacji">
                <span class="navbar-toggler-icon"></span>
            </button>

            <div class="collapse navbar-collapse p-1" id="nav">

                <ul class="navbar-nav me-auto">

                    <li class="nav-item"><a href="index.html" class="nav-link">Start</a></li>
                    <!--<li class="nav-item"><a href="#" class="nav-link disabled">Metody nauki</a></li>-->
                    <li class="nav-item"><a href="#" class="nav-link active" active-current="page">Blog</a></li>
                    <li class="nav-item"><a href="#" class="nav-link disabled">Motywacja</a></li>

                </ul>
                
                <form class="inline-form me-2">
            
                    <input class="form-control-sm bg-light border-0" type="search" placeholder="Szukaj" aria-label="Wyszukiwarka">
                    <button class="btn" type="submit"><i class="fa fa-search text-light"></i></button>
                
                </form>
                
            </div>

        </nav>

    </header>

    <main>

    <?php
echo <<<END
        <div class="card" style="width: 18rem;">
            <img src="$a->picture" class="card-img-top" alt="...">
            <div class="card-body">
                <h5 class="card-title">$a->title</h5>
                <p class="card-text">$a->teaser.</p>
                <a href="#" class="btn btn-primary">Pokaż więcej</a>
            </div>
        </div>
END;
    ?>

    </main>

</body>
</html>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="js/script.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-A3rJD856KowSb7dwlZdYEkO39Gagi7vIsF0jrRAoQmDKKtQBHUuLZ9AsSv4jD4Xa" crossorigin="anonymous"></script>

 

1 odpowiedź

+1 głos
odpowiedź 31 sierpnia 2022 przez SzkolnyAdmin Szeryf (89,570 p.)
wybrane 1 września 2022 przez Piotrek2713
 
Najlepsza
1. W linii 26 zawrzyj instrukcję jako warunek pętli while. W ciele pętli (między klamrami) twórz nowe obiekty jako elementy tablicy.

2. W końcowej części po prostu przeiteruj tablicę wyświetlając potrzebne elementy z kolejnych obiektów.

Usuń małpę w linii 15 - to zły nawyk!
komentarz 31 sierpnia 2022 przez Piotrek2713 Mądrala (5,520 p.)
Nie wiem co masz na myśli w drugim punkcie
1
komentarz 1 września 2022 przez SzkolnyAdmin Szeryf (89,570 p.)
Tam, gdzie wyświetlasz wyniki, użyj pętli typu for, aby wybrać kolejne obiekty z tablicy.
komentarz 1 września 2022 przez Piotrek2713 Mądrala (5,520 p.)
Mógłbyś mi przedstawić cały kod skryptu nad html i w main?
1
komentarz 1 września 2022 przez SzkolnyAdmin Szeryf (89,570 p.)
edycja 2 września 2022 przez SzkolnyAdmin

Część pierwsza (w warunku, po definicji obiektu Article):

$articles = [];  // tablica artykułów
$artiles_id = 0; // identyfikator artykułu

while($row = $result->fetch_assoc()) {
	$articles[$artiles_id] = new Article();
    $articles[$artiles_id]->id = $row['id'];
	$articles[$artiles_id]->picture = $row['picture'];
	$articles[$artiles_id]->title = $row['title'];
	$articles[$artiles_id]->teaser = $row['teaser'];
	$articles[$artiles_id]->content = $row['content'];
    $articles_id++; // inkrementacja identyfikatora artykułu
}

 Część druga - wyświetlanie danych (pamiętaj o umieszczeniu zmiennych w klamrach):

foreach($articles as $art) {
echo <<<END
        <div class="card" style="width: 18rem;">
            <img src="{$art->picture}" class="card-img-top" alt="...">
            <div class="card-body">
                <h5 class="card-title">{$art->title}</h5>
                <p class="card-text">{$art->teaser}.</p>
                <a href="#" class="btn btn-primary">Pokaż więcej</a>
            </div>
        </div>
END;

 

Podobne pytania

0 głosów
1 odpowiedź 271 wizyt
pytanie zadane 8 marca 2016 w PHP przez Vento Pasjonat (17,120 p.)
0 głosów
1 odpowiedź 535 wizyt
pytanie zadane 9 września 2017 w C i C++ przez Helmik Użytkownik (680 p.)
0 głosów
1 odpowiedź 604 wizyt

93,327 zapytań

142,323 odpowiedzi

322,396 komentarzy

62,657 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...