Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][MySQL][PHP]Dynamiczna podstrona
Forum PHP.pl > Forum > Przedszkole
TM1
Witam,
Mam podstronę "Artykuły" (www.strona/artykuły) na której wyświetlam listę tytułów. Strona jest tworzona dynamicznie za pomocą pętli 'while'. Oto kod:

  1. while($list = mysqli_fetch_array($result)){ ?>
  2. <div class="panel-heading">
  3. <h2><?php echo $list['title'] ?><br /></h2>
  4. <p> <?php echo $list['header'] ?><p>
  5. <a href="...">Read more</a>
  6. </div>
  7. <?php
  8.  
  9. }


Jak widać, w ten sposób otrzymuję listę wszystkich tytułów i nagłówków. Tylko tytułów i nagłówków, bo nie chciałbym wyświetlać całych tekstów na jednej stronie
(także z tego powodu, że zamierzam następnie dodać do każdego artykułu osobno możliwość komentowania (skrypt commentics) i przycisk like. Dlatego zależy mi na
osobnych adresach url dla każdego artykułu).
Chodzi mi o to, żeby użytkownik po kliknięciu na link (Read more) został przeniesiony do kolejnej podstrony (www.strona/artykuły/tytuł-wybranego-artykułu), gdzie
przeczyta wybrany tekst. Głowię się nad tym od kilku godzin i nie wiem, jak to zrobić. 'While' wydaje mi się dobrym rozwiązaniem, żeby stworzyć listę tytułów, ale jak
wydobyć z niej zmienną i odzyskać ją na osobnej stronie? A może od początku myślę źle i do problemu trzeba podejść w zupełnie inny sposób?
Wiem, że bez całości kodu może nie być łatwo udzielić odpowiedzi, ale proszę chociaż o wskazówki smile.gif

EDIT: Oczywiście zrobienie <a href="strona/artykuły/$list['slug']"> (w bazie danych mam to wszystko) to nie problem. Ale jak po stworzeniu linku do tej strony sprawić,
żeby znalazła się w niej treść artykułu? Wszystko tworzone jest dynamicznie, więc nawet jak wpiszę w wyszukiwarkę strona/artykuł/fjsinvlsdvsbvvvlwfhaydtets
to wyświetla się header i footer, ale pomiędzy nimi pustka...
aniolekx
jak już jesteś na tej podstronie artykułu to wykorzystując $list['slug'] (rozumiem ze to jest unikalny identyfikator artykułu) znów robisz zapytanie i pobierasz treść z bazy, z poprzedniej strony treści raczej nie przekażesz.
Forti
na stronie strona/artykuły/$list['slug'] pobierasz z bazy danych wpis, który odpowiada właśnie $list['slug'].

Nie widzę problemu wink.gif
TM1
Hej, problem w tym, że nie wiem, jak to zrobić :/ Wyjaśnię dokładniej.
To mój index:

  1. <?php
  2.  
  3. include('template/header.php');
  4.  
  5. include('template/page.php');
  6.  
  7. include('template/footer.php');
  8.  
  9. ?>


Jest tylko jeden plik, który generuje treść wszystkich stron - page.php:

  1. <div class="wrap">
  2. <div class="wrapper-box">
  3.  
  4. <h1><?php echo $page['header']; ?></h1>
  5.  
  6. <?php
  7.  
  8. echo $page['body'];
  9.  
  10. if ($page['id'] == 15) { // = jeśli jesteśmy na stronie 'Artykuły'... to...
  11.  
  12. $q = "SELECT * FROM articles ORDER BY id DESC";
  13. $result = mysqli_query($dbc_connection, $q);
  14.  
  15. while($list = mysqli_fetch_array($result)){ ?>
  16.  
  17. <div class="panel-heading">
  18. <h2><?php echo $list['title'] ?><br /></h2>
  19. <p> <?php echo $list['header'] ?><p>
  20. <a href="http://localhost/site/<?php echo $list['slug'] ?>">Read</a> // = przejdź do site/articles/title
  21. </div>
  22.  
  23. <?php
  24.  
  25. }
  26.  
  27. }
  28. </div>
  29. </div>
  30.  


Nie bardzo wiem, co w tym kontekście może znaczyć "jeśli już jesteś na tej stronie" wink.gif Nie mogę jej wywołać z bazy danych, mam tylko url, header i footer.
$list nie odnosi się do tabeli ze stronami tylko do tabeli z artykułami.
Forti
na stronie page.php masz coś takiego:

  1. <a href="http://localhost/site/<?php echo $list['slug'] ?>">Read</a> // = przejdź do site/articles/title


Zamień to na:

  1. [php]<a href="http://localhost/site/artykul.php?strona=<?php echo $list['slug'] ?>">Read</a> // = przejdź do site/articles/title
[/php]

Utwórz plik np. artykul.php

I tak dzięki fajnemu bajerowi jak $_GET odbierz $_GET['strona'] (to jest właśnie przesyłanie danych między stronami za pośrednictwem adresu URL (get)).

twoje $list[slug] na stronie page.php będzie odpowiadało $_GET['strona'] na artykul.php.


Zapraszam do zapoznania się z podstawami działania protokołu HTTP. Programowanie to nie tylko składnia językowa.
TM1
Problem rozwiązany smile.gif
Zrobiłem to tak:

  1. <?php
  2.  
  3. $slug = $_GET['topic'];
  4.  
  5. $q = "SELECT * FROM articles WHERE slug = '$slug'";
  6. $r = mysqli_query($dbc, $q);
  7.  
  8. $d = mysqli_fetch_assoc($r);
  9.  
  10. ?>
  11.  

  1. <div class="wrap">
  2. <div class="wrapper-box">
  3. <h1><?php echo $d['title']; ?><br /></h1>
  4. <p> <?php echo $d['header']; ?><p>
  5. <p><?php echo $d['body']; ?></p><br><br>
  6. </div>
  7. </div>

Jest ok, czy można to zrobić poprawniej?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.