Udało mi się posklejać nautomatyczny system newsów na stronie, teraz chce dorobić do niego system komentarzy i hmm, totalnie nie wiem jak się za to zabrać.
Narazie mam tabelę od Newsów:
CREATE TABLE `news` ( `id` INT NOT NULL AUTO_INCREMENT , `tytul` TINYTEXT NOT NULL , `tresc` TEXT NOT NULL , `data` VARCHAR( 50 ) NOT NULL , PRIMARY KEY ( `id` )
I wyświetlają się one na stronie głównej, potrzebuję najpierw odnośnika (www.strona.pl/?news&id=1) przy czym id to id posta i w pliku news.php chcę wyświetlic post (o id pobieranym z linka) a pod nim komentarze..
Jakieś wskazówki?
To może pokolei..
Zróbmy najpierw przekierowanie do posta z komentarzem.
$result=$mysqli->query("SELECT * FROM news ORDER BY id DESC LIMIT 5"); while($row = $result->fetch_array()) { echo "<a href="?news&id='$row['0']'"> Komentarze: '.$ilosc_komentarzy.'</a>"
A ilość komentarzy jak wyliczyć?
Tabelkę comments utworzyłem tak;
CREATE TABLE `comments` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `post_id` int(10) NOT NULL, `autor` varchar(32) NOT NULL, `data` varchar(50) NOT NULL, `tresc` varchar(255) NOT NULL, PRIMARY KEY (`id`) );
Na głównej stronie wyświetlam pierwsze 5 postów:
<?php error_reporting(E_ALL); include("./modules/polacz.php"); // laczenie z baza $result=$mysqli->query("SELECT * FROM news ORDER BY id DESC LIMIT 5"); while($row = $result->fetch_array()) { /* $ilosc_komentarzy = mysqli_num_rows ??? */ echo '<div class="post"><div class="belka">'.$row[1].'</div><p>'.$row[4].'</p><div class="info"> Napisał: <b>'.$row[3].'</b> |<a href="?news&id='.$row['0'].'"> Komentarze:<b> '.$ilosc_komentarzy.'</a><div class="time">'.$row[2].'</b></div></div></div>'; } ?>
Dobrze, to rozumiem. A teraz chciałbyś aby po kliknięciu w link taki jak pokazywałeś wyżej wyświetliło treść wybranego newsa i do tego pod nim komentarze tak?
Zapoznaj się więc z przesyłaniem danych w linku - metoda GET. Nie wiem czy już to znasz czy nie ale konstrukcje linku znasz więc może już wiesz o co chodzi?
Jeśli tak to trzeba pobrać to id posta z linka mnie więcej tak:
$id=$_GET['id'];
Najpierw jeszcze trzeba sprawdzić czy wybrany został konkretny post czy trzeba wyświetlić listę wszystkich ale to chyba wiesz (funkcja isset). Listę wszystkich już masz, jeśli zostało podane id to trzeba podstawić je pod zapytanie które pobierze tylko ten dany post czyli coś w stylu SELECT ... FROM news WHERE id=$id Oczywiście należy jeszcze dodać zabezpiecznie przed sql injection.
Teraz jakieś tam wyświetlanie tego jednego posta itd i teraz pobranie do niego komentarzy:
SELECT .... FROM comments WHERE post_id=$id
No i tutaj wyświetlenie tych komentarzy. Rozumiesz już teraz trochę?
Uff troche się pomęczyłem ale nadal nie mogę wyjść z tematu przekierowania ze strony głównej (www.strona.pl?home) na stronę z komentarzami do postu (www.strona.pl?news&id=1)
Mój index php docelowo załącza plik /pages/home.php dla linku www.strona.pl?home, wygląda to tak:
<?php include("modules/header.php"); switch($_SERVER['QUERY_STRING']) { case 'home': include("pages/home.php"); break; case 'news': if (isset($_GET['id'])){ include("pages/news.php"); } default: include("pages/home.php"); } include("modules/footer.php"); ?>
A więc teraz jak zrobię <a href="?news&id=1"> to wraca mi na home.php, domyślam się, że chodzi o to, że mój kod dopuszcza tylko jeden parametr (news) w przeciwnym wypadku wraca do "default"...
Po pierwsze to w case news brakuje Ci break.
A po drugie to z tego co pamiętam $_SERVER['QUERY_STRING'] zwraca wszystkie parametry jakie są przesyłane (wyświetl sobie wartość tego na ekran). Czyli gdy klikniesz w link do danego newsa to skrypt w tej zmiennej dostaje np. news&id=1. A takiej ewentualności w case nie masz czyli zostaje default :)
Nie wiem po co pchać się w jakiś switch skoro można to zrobić po prostu na warunku. Ja bym zrobił to tak:
if(isset($_GET['news']) && isset($_GET['id']) && $_GET['id']>0) { //wyświetlanie jednego newsa o podanym id } else { //skoro warunek się nie spełnił to pokazujemy home - wszystkie newsy }
Nie wiem o co Ci chodzi, pusta strona się wyświetla jak wklejam ten kod do index.php
<?php if(isset($_GET['news']) && isset($_GET['id']) && $_GET['id']>0) { include("pages/news.php") // wyswietlanie jednego postu + komentarze } else { include("pages/home.php") // wyswietlanie wszystkich postow } ?>
93,772 zapytań
142,730 odpowiedzi
323,382 komentarzy
63,368 pasjonatów
Motyw:
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
Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.