kamil1114
21.10.2009, 15:15:50
Proszę o pomoc , nakierowanie mnie , bo nie wiem jak się za to zabrać Mam system newsów , które dodaje co jakiś czas nowsze i mam napisać skrypt , który pozwoliłby dodać do każdego newsa komentarz (od zwykłych użytkowników , którzy czytają te newsy). Myślałem , czy zrobić to w mysqlu , albo na plikach. Wolałbym jednak w mysqlu. Te newsy , które się wyświetlają na stronie są zapisane w bazie danych mysql. Myślałem , czy można jakoś relacjami to powiązać , ale nie mam pomysłu , a z relacyjnymi bazami danych nigdy nie miałem do czynienia.
MateuszS
21.10.2009, 15:28:42
pola w tabeli komentarze
id (int, auto-inc, prim-key)
id_newsa (int) - id newsa do ktorego ma byc przypisany komentarz
tytul (text)
tresc (text)
email/nick (text) - dane jakies autora
ip (text) - ip autora
przykladowa prosta tabela
reszta tak jak w dodawaniu newsa, tylko pamietaj o tym id_newsa, zeby tam wlepic id tego newsa pod ktorym jest komentarz i dobrze wyswietlic zapytaniem
zalozmy nasza strona ma adres news.php?id=15 <- gdzie 15 to id newsa
dajemy zapytanie do komentarzy
SELECT * FROM `komentarze` WHERE `id_newsa`='".$_GET['id']."'";
to taka ogolna prosta koncepcja
kamil1114
21.10.2009, 15:39:14
Ok , dziękuję za nakierowanie mnie , spróbuję coś z tego zrobić.
Mam tylko jeszcze jedno pytanie:
Bo napisałeś tak:
"zalozmy nasza strona ma adres news.php?id=15 <- gdzie 15 to id newsa
dajemy zapytanie do komentarzy
SELECT * FROM `komentarze` WHERE `id_newsa`='".$_GET['id']."'"; "
Tylko te newsy dodają się tak , że na stronie nic się nie zmienia ( chodzi mi o id w urlu). Po prostu na stronie głównej , newsy się wyświetlają , a nazwa strony to www.jakasnazwa.pl , nie mam czegoś takiego jak id=x , nie wyświetla mi się to w ogóle w urlu. Czemu mi się to nie wyświetla , co mogę zrobić w takim przypadku ?
Chodzi mi o to ,że pod każdym z osobna newsem był by link zobacz komentarze i ten link przenosił by do strony na której wyświetlał by się tylko ten jeden komentowany news i można było go skomentować i zobaczyć komentarze.
Kroolik1
21.10.2009, 16:25:33
Musisz w skrypcie wyświetlającym kolejne newsy dodać linijkę "<a href='strona.php?id=".$id_newsa.">Zobacz komentarze</a>' (w skrócie) w miejscu w którym chcesz aby ten napis się wyświetlał, np.
$newsy = mysql_query("SELECT id, autor, tresc, data FROM `newsy` LIMIT 5 SORT BY id DESC");
$result .= "Dodano ".$newsy_arr['data']." przez ".$newsy_arr['autor']."<br/>".$newsy_arr['tresc']."<br/><a href='strona.php?id=".$newsy_arr['id'].">Zobacz komentarze</a>";
}
Blame
21.10.2009, 16:36:25
A na stronie na której wyświetlasz komentarze dajesz:
$id=$_GET['id'];
$zapytanie = "SELECT * FROM `komentarze` WHERE `id_newsa`=".$id."";
echo "Tytuł:<br>".$komentarz['tytuł']."<br>Treść komentarza:<br>".$komentarz['tresc']. }
//itd.
kamil1114
21.10.2009, 18:15:16
Ale dla każdego newsa , muszę stworzyć osobną stronę , na której będą wyświetlane komentarze ?
thek
21.10.2009, 18:22:01
Masz jedna stronę, jeden plik PHP, ale jej zawartość jest generowana dynamicznie. Tak samo jak newsy na głównej, tyle że tutaj zamiast newsów masz komentarze użytkowników.
kamil1114
21.10.2009, 21:43:17
Czyli podsumowując , jeżeli mój plik wyświetlający newsy wygląda tak:
<?php
$wyswietl=mysql_query('select * from newsy ORDER BY id DESC');
$tytul=$i['tytul'];
$tresc=$i['tresc'];
$data=$i['data'];
echo "<div align='right'><img src='./cal.gif'></img> $data</div>"; echo "<h2><center><dig style='color:#4682B4'>$tytul </div></center></h2><br/><br/>"; echo "$tresc<br/><br/><hr color='olivedrab'/>";
}
?>
to muszę go zmodyfikować , żeby wyglądał tak:
<?php
$wyswietl=mysql_query('select * from newsy ORDER BY id DESC');
$tytul=$i['tytul'];
$tresc=$i['tresc'];
$data=$i['data'];
echo "<div align='right'><img src='./cal.gif'></img> $data</div>"; echo "<h2><center><dig style='color:#4682B4'>$tytul </div></center></h2><br/><br/>"; echo "$tresc<br/><br/><hr color='olivedrab'/>";
$komentarze=mysql_query('select * from komentarze ORDER BY id DESC');
$id_newsa=$a['id_newsa'];
$nick=$a['nick'];
$tresc=$a['tresc'];
echo "<a href='index.php?id=".$id_newsa."'>Zobacz komentarze</a>";}
}
?>
A skrypt wyświetlający komentowanego newsa i komentarz tak:
<?php
$id=$_GET['id'];
$zapytanie = "SELECT * FROM `komentarze` WHERE `id_newsa`=".$id."";
$komentarze = [url
="http://www.php.net/mysql_query"]mysql_query[/url
]($zapytanie)
while($komentarz = [url
="http://www.php.net/mysql_fetch_array"]mysql_fetch_array[/url
]($komentarze){
[url
="http://www.php.net/echo"]echo[/url
] "Tytuł:<br>".$komentarz['tytuł']."<br>Treść komentarza:<br>".$komentarz['tresc'].
}
echo "<b>Dodawanie komentarzy:</b></br</br>"; echo "<form method='post'>"; echo "<input type='text' name='nick'> </br>"; echo "Tresć komentarza: </br>"; echo "<textarea name='text' cols='40' rows='15'></textarea> </br>"; echo "<input type='submit' value='Dopisz'>";
?>
Coś mi tu nie gra. Proszę o poprawkę , chciałbym , żeby jeszcze komentowany news był wyświetlany.
Proszę o pomoc , bo się gubię w tym.
thek
21.10.2009, 23:17:41
Jeśli ma być jeszcze wyświetlany news to sobie wyciągnij go z bazy. Znasz jego ID, więc napisać zapytanie by go z niej wyciągnąć to pryszcz

Potem wyświetl przed komentarzami i masz po sprawie.
kamil1114
21.10.2009, 23:30:40
Ok , wyciągnę go sobie , tylko powiedzcie mi co źle robię w skrypcie:
$wyswietl=mysql_query('select * from newsy ORDER BY id DESC');
$tytul=$i['tytul'];
$tresc=$i['tresc'];
$data=$i['data'];
echo "<div align='right'><img src='./cal.gif'></img> $data</div>"; echo "<h2><center><dig style='color:#4682B4'>$tytul </div></center></h2><br/><br/>"; echo "$tresc<br/><br/><hr color='olivedrab'/>";
//TU SIĘ ZACZYNA WYŚWIETLANIE LINKU ODSYŁAJĄCE DO KOMENTARZY
$link=mysql_query('SELECT id from newsy order by id desc');
echo '<a href="komentarze.php?id='.$wiersz['id'].'">Komentarze</a>'; }
}
Na stronie pod każdym newsem wyświetla się link Komentarze ,ale problem jest taki , że tych linków , wyświetla się tyle ile w danej chwili jest newsów w bazie. Pierwszy wyświetlony link ma id=1 ,drugi id=2 , trzeci id=3 itd.
Proszę o pomoc.
Blame
22.10.2009, 06:47:41
To dlatego, że wyświetlanie newsa i linku do niego musisz zrobić w jednej pętli. Czyli powinno to wyglądać tak:
$wyswietl=mysql_query('select * from newsy ORDER BY id DESC');
$tytul=$i['tytul'];
$tresc=$i['tresc'];
$data=$i['data'];
echo "<div align='right'><img src='./cal.gif'></img> $data</div>"; echo "<h2><center><dig style='color:#4682B4'>$tytul </div></center></h2><br/><br/>"; echo "$tresc<br/><br/><hr color='olivedrab'/>";
echo '<a href="komentarze.php?id='.$i['id'].'">Komentarze</a>';
}
kamil1114
22.10.2009, 13:15:57
Teraz wszystko działa , dziękuję za pomoc. Zaraz będę kombinował nad samym skryptem wyświetlania i dodawania komentarzy.
Tym razem zatrzymałem się na skrypcie wyświetlania komentarzy i ich dodawania. Nie umiem znaleźć błędu w tym kodzie:
<?php
$id=$_GET['id'];
$wyswietl=mysql_query("select * from newsy where id='$id'");
$tytul=$i['tytul'];
$tresc=$i['tresc'];
$data=$i['data'];
echo "<div align='right'><img src='./cal.gif'></img> $data</div>"; echo "<h2><center><dig style='color:#4682B4'>$tytul </div></center></h2><br/><br/>"; echo "$tresc<br/><br/><hr color='olivedrab'/>";
}
$kom=mysql_query("select * from komentarze where id='$id'");
$nick=$a['nick'];
$tresc=$a['tresc'];
$ip=$a['ip'];
{
echo "<center>$nick</center>"; echo "<center>$tresc</center>;
}
}
echo "<b>Dodawanie komentarzy:</b></br>";
echo "<form method='post'>";
echo "Twój nick: </br>";
echo "<input type='text' name='nick'> </br>";
echo "Tresć komentarza: </br>";
echo "<textarea name='text' cols='40' rows='15'></textarea> </br>";
echo "<input type='submit' value='Dopisz'>";
echo "</form>";
$nick=$_POST['nick'];
$text=$_POST['text'];
$ip=$_SERVER["REMOTE_ADDR"];
if(!empty($nick) && !empty($tresc)){
mysql_query("insert into komentarze (nick,tresc,ip) values ('$nick,'$tresc','$ip')");
}
}
?>
A na stronie wyskakuje mi cały czas błąd :Parse error: syntax error, unexpected '>' in /home/accounts_l/lockerzo/public_html/komentarze.php on line 44
Czy widzi ktoś tutaj jakiś błąd ?
thek
22.10.2009, 13:40:29
Ty lepiej sprawdź czemu kod po wklejeniu tutaj jest wyświetlany zrąbany

Podpowiadam... Linia 36
kamil1114
22.10.2009, 14:13:18
A dziękuję , taki mały znaczek(") , a tyle zmienia
Wybaczcie , że Was tak męczę , ale zależy mi na tym skrypcie , a dużo rzeczy mi nie wychodzi. Nie wiem , czemu ten kod nie działa:
<?php
$id=$_GET['id'];
$wyswietl=mysql_query("select * from newsy where id='$id'");
$tytul=$i['tytul'];
$tresc=$i['tresc'];
$data=$i['data'];
echo "<div align='right'><img src='./cal.gif'></img> $data</div>"; echo "<h2><center><dig style='color:#4682B4'>$tytul </div></center></h2><br/><br/>"; echo "$tresc<br/><br/><hr color='olivedrab'/>";
}
$kom=mysql_query("select * from komentarze where id='$id'");
$nick=$a['nick'];
$tresc1=$a['tresc'];
$ip=$a['ip'];
echo "<center>$nick</center>"; echo "<center>$tresc1</center>"; }
else {
echo "Brak komentarzy do tego newsa"; }
}
echo "<b>Dodawanie komentarzy:</b></br>";
echo "<form method='post'>";
echo "<input type='text' name='nick'> </br>";
echo "Tresć komentarza: </br>";
echo "<textarea name='komentarz' cols='40' rows='15'></textarea> </br>";
echo "<input type='submit' value='Dopisz'>";
$nick=$_POST['nick'];
$text=$_POST['komentarz'];
$ip=$_SERVER['REMOTE_ADDR'];
mysql_query("insert into komentarze (nick,tresc,ip) values ('$nick,'$text','$ip')"); }
}
?>
Nie dodaje do bazy danych komentarzy i nie wyświetla ich. Gdzieś w tym skrypcie umieściłem polecenie , że jeżeli w bazie nie ma komentarzy do tego newsa , to wypisać , na ekranie , że nie ma komentarzy w bazie , ale też nie wypisuje , więc domyślam się że coś jest nie tak. Proszę o pomoc.
Blame
22.10.2009, 14:58:10
Wydaje mi się, że coś jest nie tak z formularzem, ale nie jestem pewny. Spróbuj na samym końcu wyświetlić $nick, $text i $ip. Możesz też ręcznie wstawić jakiś komentarz do bazy i zobaczyć czy się wyświetli.
kamil1114
22.10.2009, 17:58:24
Jak wyświetlę $nick,$text i $ip , to wszystko działa , zmienne się wyświetlają. A jak ręcznie dodam dane , to na stronie też się wyświetla. Proszę o pomoc w znalezieniu błędu.
potreb
22.10.2009, 18:05:54
Stosuj dla zapytań or die(mysql_error()); oraz error_reporting(E_ALL) dla wyświetlania błędów.
Jest jeszcze taki coś jak var_dump(); i print_r(); które też ułatwiają pracę.
Blame
22.10.2009, 18:10:45
Spróbuj zamiast:
mysql_query("insert into komentarze (nick,tresc,ip) values ('$nick,'$text','$ip')");
dać:
mysql_query("INSERT INTO komentarze ('nick', 'tresc', 'ip') VALUES('$nick,'$text','$ip')");
A w pierwszym nawiasie wypisujesz wszystkie pola tabeli? Bo jeśli masz na przykład jeszcze na początku pole id o wartość AUTO_INCREMENT to zapytanie powinno wyglądać tak:
mysql_query("INSERT INTO komentarze ('id', 'nick', 'tresc', 'ip') VALUES(0 '$nick,'$text','$ip')");
Lub tak:
mysql_query("INSERT INTO komentarze VALUES(0 '$nick,'$text','$ip')");
Chociaż nie wiem czy to coś da...
Spawnm
22.10.2009, 18:17:16
@Blame -> to nic nie zmieni

@kamil1114 -> poczytaj o sql injection...
Cytat
że jeżeli w bazie nie ma komentarzy do tego newsa , to wypisać , na ekranie , że nie ma komentarzy w bazie , ale też nie wypisuje
Dziwne?
echo z info o braku dajesz w while dla mysql_fetch_assoc która wykona się tyle razy ile znajdzie pól ,a tych nie ma.Przed while daj ablo mysql_num_rows albo count(*) i mysql_result, jeśli zwróci 0 dajesz echo 'brak wpisów'; else -> pętla z assoc
kamil1114
22.10.2009, 18:21:53
Dziękuję już znalazłem błąd , brakowało znaku ' , w zapytaniu: mysql_query("INSERT INTO komentarze ('nick', 'tresc', 'ip') VALUES('$nick','$text','$ip')");
Teraz wyświetla się news i dodaje się na stronę. Znalazłem jeszcze jeden duży problem , mam nadzieję że ostatni. Jak dodaję komentarz do któregoś newsa , to one się zapisują w bazie , ale jak je później wyświetlam , to do każdego newsa powinny być inne komentarze , ale jak wejdę w komentarz , gdzie id newsa jest równe 1 , to wyświetla mi się komentarz , którego id też jest równe 1. Mam jeszcze kolumnę id_newsa , ale tam wyświetlają się same zera. Domyślam się że trzeba jeszcze jakoś połączyć to , tak żeby do każdego newsa były określone komentarze. Mam nadzieję , że już Was ostatni raz proszę o pomoc w tym systemie komentarzy.
Spawnm
22.10.2009, 18:26:55
to przy insercie daj
mysql_query("insert into komentarze (nick,tresc,ip,news_id) values ('$nick','$text','$ip','$news_id')");
Blame
22.10.2009, 18:28:38
Oczywiście musisz ją zadeklarować wcześniej poprzez:
$news_id=$_GET['id'];
kamil1114
22.10.2009, 19:20:48
Teraz id komentarza już poprawnie przypisuje do id newsa. Tylko teraz nie wyświetla tego poprawnie , chodzi mi o to , że do newsa o id=1 nie wyświetla komentarzy , które mają id newsa=1
A taki mam kod teraz:
<?php
$id=$_GET['id'];
$wyswietl=mysql_query("select * from newsy where id='$id'");
$tytul=$i['tytul'];
$tresc=$i['tresc'];
$data=$i['data'];
echo "<div align='right'><img src='./cal.gif'></img> $data</div>"; echo "<h2><center><dig style='color:#4682B4'>$tytul </div></center></h2><br/><br/>"; echo "$tresc<br/><br/><hr color='olivedrab'/>";
}
$kom=mysql_query("select * from komentarze where id='$id'");
$nick=$a['nick'];
$tresc1=$a['tresc'];
$ip=$a['ip'];
echo "<center>$nick</center><br/>"; echo "<center>$tresc1</center>";
}
echo "<b>Dodawanie komentarzy:</b></br>";
echo "<form method='post'>";
echo "<input type='text' name='nick'> </br>";
echo "Tresć komentarza: </br>";
echo "<textarea name='komentarz' cols='40' rows='15'></textarea> </br>";
echo "<input type='submit' value='Dopisz'>";
$nick=$_POST['nick'];
$text=$_POST['komentarz'];
$ip=$_SERVER['REMOTE_ADDR'];
$id_newsa=$_GET['id'];
mysql_query("insert into komentarze (id,nick,tresc,ip,id_newsa) values (0,'$nick','$text','$ip','$id_newsa')");
echo '<script type="text/javascript"> window.location.href = "index1.php";
</script>';
}
}
?>
Blame
22.10.2009, 19:25:56
Cytat(kamil1114 @ 22.10.2009, 19:21:53 )

Mam jeszcze kolumnę id_newsa , ale tam wyświetlają się same zera. Domyślam się że trzeba jeszcze jakoś połączyć to , tak żeby do każdego newsa były określone komentarze. Mam nadzieję , że już Was ostatni raz proszę o pomoc w tym systemie komentarzy.
$kom=mysql_query("select * from komentarze where id='$id'");
Widzisz błąd?
kamil1114
22.10.2009, 19:32:05
Czy powinno być:
$kom=mysql_query("select * from komentarze where id='$id_newsa'");
?
Blame
22.10.2009, 19:41:35
Nie
Cytat(kamil1114 @ 22.10.2009, 19:21:53 )

Mam jeszcze kolumnę id_newsa , ale tam wyświetlają się same zera. Domyślam się że trzeba jeszcze jakoś połączyć to , tak żeby do każdego newsa były określone komentarze. Mam nadzieję , że już Was ostatni raz proszę o pomoc w tym systemie komentarzy.
$kom=mysql_query("select * from komentarze where id='$id'");
kamil1114
22.10.2009, 19:50:03
Wybacz , mi takie błędy ,ale cały czas się uczę php i nie do końca jeszcze umiem.
Czyli to będzie tak:
$kom=mysql_query("select * from komentarze where id_newsa='$id'");
Teraz wszystko działa , dziękuję bardzo wszystkim za pomoc.
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.