• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

"dorobienie" komentarzy do systemu newsów

Object Storage Arubacloud
+1 głos
218 wizyt
pytanie zadane 27 lipca 2015 w PHP przez niezalogowany

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` (
`
idINT NOT NULL AUTO_INCREMENT ,
`
tytulTINYTEXT NOT NULL ,
`
trescTEXT NOT NULL ,
`
dataVARCHAR50 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?

1 odpowiedź

0 głosów
odpowiedź 27 lipca 2015 przez Arkadiusz Waluk Ekspert (287,950 p.)
Robisz drugą tabelę na komentarze, dajesz tam wszystkie kolumny jakie potrzebujesz w stylu treść komentarza, data czy co tam jeszcze i dorzucasz też kolumnę id newsa. Przy dodawaniu komentarza zapisujesz do bazy wszystkie potrzebne rzeczy i to id newsa do którego jest ten komentarz. A przy wyświetlaniu pod newsem dajesz drugie zapytanie w stylu SELECT .... FROM komentarze WHERE id newsa= i tutaj podstawiasz id newsa który jest obecnie wyświetlany.

Tak w skrócie to może wyglądać ;)
komentarz 27 lipca 2015 przez niezalogowany

To może pokolei.. wink

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ć?

komentarz 27 lipca 2015 przez Arkadiusz Waluk Ekspert (287,950 p.)
"Zróbmy" - to raczej ty masz zrobić, ja mogę tylko trochę Cię nakierować ;)

Czyli czekaj, podglądu danego newsa też nie masz? Coś już się dzieje po kliknięciu w link taki jak podałeś powyżej? Tzn chcesz aby po kliknięciu w ten link "Komentarze ..." pokazywało tylko same komentarze już bez treści newsa czy treść też?

O ilości komentarzy będzie można myśleć dopiero gdy będziesz miał tabelę na komentarze bo na razie to nie ma z czego wyliczać.
komentarz 27 lipca 2015 przez niezalogowany

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

 

komentarz 27 lipca 2015 przez Arkadiusz Waluk Ekspert (287,950 p.)

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ę?

komentarz 27 lipca 2015 przez niezalogowany

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

komentarz 27 lipca 2015 przez Arkadiusz Waluk Ekspert (287,950 p.)

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
}
komentarz 27 lipca 2015 przez niezalogowany

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

 

komentarz 27 lipca 2015 przez Arkadiusz Waluk Ekspert (287,950 p.)
Za include powinny być średniki być może przez to nic się nie dzieje. Dodaj i zobacz wtedy.

Podobne pytania

0 głosów
1 odpowiedź 316 wizyt
pytanie zadane 31 lipca 2015 w PHP przez SikorKK Użytkownik (610 p.)
0 głosów
1 odpowiedź 164 wizyt
pytanie zadane 8 sierpnia 2015 w JavaScript przez Damian13 Obywatel (1,430 p.)
0 głosów
2 odpowiedzi 488 wizyt
pytanie zadane 9 lipca 2015 w SQL, bazy danych przez niezalogowany

92,568 zapytań

141,421 odpowiedzi

319,629 komentarzy

61,956 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!

...