Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Wyświetlanie postów po kategoriach, Wyświetlanie postów po kategoriach
Szagii
post 30.11.2016, 15:33:31
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 25.11.2016

Ostrzeżenie: (0%)
-----


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>';

}
?>
Go to the top of the page
+Quote Post
Niree
post 30.11.2016, 15:39:21
Post #2





Grupa: Zarejestrowani
Postów: 220
Pomógł: 18
Dołączył: 5.02.2016
Skąd: Polska

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Szagii
post 30.11.2016, 16:41:34
Post #3





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 25.11.2016

Ostrzeżenie: (0%)
-----


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 ;


Go to the top of the page
+Quote Post
Niree
post 30.11.2016, 17:13:46
Post #4





Grupa: Zarejestrowani
Postów: 220
Pomógł: 18
Dołączył: 5.02.2016
Skąd: Polska

Ostrzeżenie: (0%)
-----


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. }


Ten post edytował Niree 30.11.2016, 17:16:07
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 00:18