• 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

Object Storage Arubacloud
0 głosów
178 wizyt
pytanie zadane 31 sierpnia 2022 w PHP przez Piotrek2713 Mądrala (5,340 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 (86,360 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,340 p.)
Nie wiem co masz na myśli w drugim punkcie
1
komentarz 1 września 2022 przez SzkolnyAdmin Szeryf (86,360 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,340 p.)
Mógłbyś mi przedstawić cały kod skryptu nad html i w main?
1
komentarz 1 września 2022 przez SzkolnyAdmin Szeryf (86,360 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ź 231 wizyt
pytanie zadane 8 marca 2016 w PHP przez Vento Pasjonat (17,120 p.)
0 głosów
1 odpowiedź 441 wizyt
pytanie zadane 9 września 2017 w C i C++ przez Helmik Użytkownik (680 p.)
0 głosów
1 odpowiedź 452 wizyt

92,551 zapytań

141,393 odpowiedzi

319,524 komentarzy

61,936 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...