Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wyświetlanie postów po kategoriach
Forum PHP.pl > Forum > Przedszkole
Szagii
Witam,
Od paru dni pracuje nad małym CMS (projekt szkolny). Pomimo że jestem początkujący w PHP to idzie mi całkiem sprawnie.
Teraz napotkałem mały problem, na stronie mam zakładkę kategorie, w której są wszystkie kategorie jakie doda użytkownik, po kliknięciu w którąś, skrypt przenosi na jej wygenerowaną stronę (Pewnie wiecie o co mi chodzi)
Teraz chce, aby na tych stronach wyświetlały się posty do których jest przydzielona dana kategoria, ale nie wiem jak się za to zabrać, napisałem już coś, ale skrypt wyświetla mi ciągle te same posty nie ważne w jakiej kategorii jestem.

Jakieś wskazówki? :/

Wyświetlanie postów:
CODE
equire_once("admin/db.php");
$stmt = $dbh->prepare('SELECT * FROM news ORDER BY category');
$stmt -> execute();

while($result = $stmt->fetch(PDO::FETCH_ASSOC))
{

$category = $result['category'];
$id = $result['id'];

require_once("admin/db.php");
$stmt = $dbh->prepare('SELECT * FROM news WHERE category=:category');
$stmt->bindValue(":category", $category);
$stmt -> execute();

while($result = $stmt->fetch(PDO::FETCH_ASSOC))
{
$button = '<button type="submit" name="send" class="btn btn-default">Czytaj dalej</button>';
include("admin/script/shorter.php");
echo '<h1>'.$result['title'].'</h1>Autor:'.$result['author'].'</br>Data: '.$result['date'].'<p>'.substr($result['tekst'], 0, 100).''.$kr.'</br>'.'<a href="news.php?id='.$result["id"].'"'.$button.'</a>'.'</p>';
}

}



Generowanie linku i przenoszenie:
CODE
<?php

require_once("admin/db.php");

$stmt = $dbh->prepare('SELECT * FROM category ORDER BY id');

$stmt -> execute();

while($result = $stmt->fetch(PDO::FETCH_ASSOC))
{

echo '<li><a href="category.php?id='.$result['id'].'" name="category">'.$result['category'].'</a></li>';

}
?>
Niree
Musisz przypisać każdemu newsowi ID kategorii.

Tutaj masz odpowiedź:

  1. echo '<li><a href="category.php?id='.$result['id'].'" name="category">'.$result['category'].'</a></li>';

Adres będzie: category.php?id=ID KATEGORII

Tylko tutaj jest za mało szczegółów. Jak wygląda baza? Konkretnie baza newsów. Podaj jeden przykładowy wpis z bazy dla jakiejś kategorii.
Szagii
Cytat(Niree @ 30.11.2016, 15:39:21 ) *
]
Adres będzie: category.php?id=ID KATEGORII


Ale przecież tak mam
CODE
'<li><a href="category.php?id='.$result['id'].'" name="category">'.$result['category'].'</a></li>';

Czyli te id kategorii o którym mówisz, to te $result['id']

Baza:
CODE
CREATE TABLE `news` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`title` VARCHAR( 30 ) NOT NULL ,
`date` DATETIME NOT NULL ,
`author` VARCHAR( 15 ) NOT NULL
`category` VARCHAR( 15 ) NOT NULL ,
`text` LONGTEXT NOT NULL
) ENGINE = MYISAM ;


Niree
W wyświetlaniu postów 2x dałeś

  1. require_once("admin/db.php");


Poza tym jeśli chcesz wyświetlać posty tylko z danej kategorii, to musisz dać warunek w zapytaniu do bazy.
Ponadto nadpisujesz
  1. $result
drugą pętlą.

Masz
  1. while($result = $stmt->fetch(PDO::FETCH_ASSOC))

a w tej pętli kolejna pętla:
  1. while($result = $stmt->fetch(PDO::FETCH_ASSOC))

i nadpisujesz
  1. $result
danymi z drugiego zapytania. Daj w drugiej pętli
  1. $result2 = $stmt->fetch(PDO::FETCH_ASSOC)


Dalej: wykorzystujesz $_GET['id'] (link: category.php?id=blabla) a w kodzie w ogóle tego nie ma.

Przy wyświetlaniu musisz uwzględnić $_GET['id'], przykład:
  1. require_once("admin/db.php");
  2.  
  3. if(isset($_GET['id']))
  4. {
  5. $category = $_GET['id'];
  6. //reszta kodu, pokazywanie newsów dla danej kategorii
  7. }


Dodatkowo musisz zrobić zabezpieczenie, jak np. ktoś wpisze samo strona.pl/category.php.
Wtedy dajesz:

  1. if(isset($_GET['id']))
  2. {
  3. $category = $_GET['id'];
  4. //reszta kodu, pokazywanie newsów dla danej kategorii
  5. }
  6. else
  7. {
  8. //kod pokazujący wszystkie newsy albo header przekierowujący na stronę główną.
  9. }
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.