Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [MySQL][PHP]System komentarzy
kamil1114
post
Post #1





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 22.02.2008
Skąd: katowice

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


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.
Go to the top of the page
+Quote Post
MateuszS
post
Post #2





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


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
Go to the top of the page
+Quote Post
kamil1114
post
Post #3





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 22.02.2008
Skąd: katowice

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


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.

Ten post edytował kamil1114 21.10.2009, 15:51:18
Go to the top of the page
+Quote Post
Kroolik1
post
Post #4





Grupa: Zarejestrowani
Postów: 5
Pomógł: 1
Dołączył: 19.10.2009

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


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.

  1.  
  2. $newsy = mysql_query("SELECT id, autor, tresc, data FROM `newsy` LIMIT 5 SORT BY id DESC");
  3.  
  4. while($newsy_arr = mysql_fetch_array($newsy, MYSQL_ASSOC){
  5.  
  6. $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>";
  7.  
  8. }
  9.  
  10. echo $result;
Go to the top of the page
+Quote Post
Blame
post
Post #5





Grupa: Zarejestrowani
Postów: 678
Pomógł: 124
Dołączył: 26.09.2009

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


A na stronie na której wyświetlasz komentarze dajesz:

  1. $id=$_GET['id'];
  2.  
  3. $zapytanie = "SELECT * FROM `komentarze` WHERE `id_newsa`=".$id."";
  4.  
  5. $komentarze = mysql_query($zapytanie)
  6.  
  7. while($komentarz = mysql_fetch_array($komentarze){
  8.  
  9. echo "Tytuł:<br>".$komentarz['tytuł']."<br>Treść komentarza:<br>".$komentarz['tresc'].
  10. }
  11. //itd.
  12.  


Ten post edytował Blame 21.10.2009, 16:37:18
Go to the top of the page
+Quote Post
kamil1114
post
Post #6





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 22.02.2008
Skąd: katowice

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


Ale dla każdego newsa , muszę stworzyć osobną stronę , na której będą wyświetlane komentarze ?
Go to the top of the page
+Quote Post
thek
post
Post #7





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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.
Go to the top of the page
+Quote Post
kamil1114
post
Post #8





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 22.02.2008
Skąd: katowice

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


Czyli podsumowując , jeżeli mój plik wyświetlający newsy wygląda tak:
  1. <?php
  2. mysql_connect('www','login','haslo');
  3.  
  4. $wyswietl=mysql_query('select * from newsy ORDER BY id DESC');
  5.  
  6. while($i=mysql_fetch_assoc($wyswietl)){
  7.  
  8. $tytul=$i['tytul'];
  9. $tresc=$i['tresc'];
  10. $data=$i['data'];
  11.  
  12. echo "<div align='right'><img src='./cal.gif'></img> $data</div>";
  13. echo "<h2><center><dig style='color:#4682B4'>$tytul </div></center></h2><br/><br/>";
  14. echo "$tresc<br/><br/><hr color='olivedrab'/>";
  15.  
  16. }
  17. ?>


to muszę go zmodyfikować , żeby wyglądał tak:

  1. <?php
  2.  
  3.  
  4. mysql_connect('www','login','haslo');
  5. mysql_select_db('baza');
  6.  
  7. $wyswietl=mysql_query('select * from newsy ORDER BY id DESC');
  8.  
  9. while($i=mysql_fetch_assoc($wyswietl)){
  10.  
  11. $tytul=$i['tytul'];
  12. $tresc=$i['tresc'];
  13. $data=$i['data'];
  14.  
  15. echo "<div align='right'><img src='./cal.gif'></img> $data</div>";
  16. echo "<h2><center><dig style='color:#4682B4'>$tytul </div></center></h2><br/><br/>";
  17. echo "$tresc<br/><br/><hr color='olivedrab'/>";
  18.  
  19. $komentarze=mysql_query('select * from komentarze ORDER BY id DESC');
  20.  
  21. while($a=mysql_fetch_assoc($komentarze)){
  22.  
  23. $id_newsa=$a['id_newsa'];
  24. $nick=$a['nick'];
  25. $tresc=$a['tresc'];
  26.  
  27. echo "<a href='index.php?id=".$id_newsa."'>Zobacz komentarze</a>";}
  28.  
  29. }
  30. ?>




A skrypt wyświetlający komentowanego newsa i komentarz tak:

  1. <?php
  2. $id=$_GET['id'];
  3.  
  4.  
  5. $zapytanie = "SELECT * FROM `komentarze` WHERE `id_newsa`=".$id."";
  6.  
  7. $komentarze = [url="http://www.php.net/mysql_query"]mysql_query[/url]($zapytanie)
  8.  
  9. while($komentarz = [url="http://www.php.net/mysql_fetch_array"]mysql_fetch_array[/url]($komentarze){
  10.  
  11. [url="http://www.php.net/echo"]echo[/url] "Tytuł:<br>".$komentarz['tytuł']."<br>Treść komentarza:<br>".$komentarz['tresc'].
  12.  
  13. }
  14.  
  15. echo "<b>Dodawanie komentarzy:</b></br</br>";
  16. echo "<form method='post'>";
  17. echo "Twój nick: </br>";
  18. echo "<input type='text' name='nick'> </br>";
  19. echo "Tresć komentarza: </br>";
  20. echo "<textarea name='text' cols='40' rows='15'></textarea> </br>";
  21. echo "<input type='submit' value='Dopisz'>";
  22. echo "</form>";
  23.  
  24. ?>
  25.  
  26.  



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.

Ten post edytował kamil1114 21.10.2009, 18:59:27
Go to the top of the page
+Quote Post
thek
post
Post #9





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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 (IMG:style_emoticons/default/smile.gif) Potem wyświetl przed komentarzami i masz po sprawie.
Go to the top of the page
+Quote Post
kamil1114
post
Post #10





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 22.02.2008
Skąd: katowice

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


Ok , wyciągnę go sobie , tylko powiedzcie mi co źle robię w skrypcie:
  1.  
  2. mysql_connect('serwer','login','haslo');
  3.  
  4. $wyswietl=mysql_query('select * from newsy ORDER BY id DESC');
  5.  
  6. while($i=mysql_fetch_assoc($wyswietl)){
  7.  
  8. $tytul=$i['tytul'];
  9. $tresc=$i['tresc'];
  10. $data=$i['data'];
  11.  
  12. echo "<div align='right'><img src='./cal.gif'></img> $data</div>";
  13. echo "<h2><center><dig style='color:#4682B4'>$tytul </div></center></h2><br/><br/>";
  14. echo "$tresc<br/><br/><hr color='olivedrab'/>";
  15.  
  16. //TU SIĘ ZACZYNA WYŚWIETLANIE LINKU ODSYŁAJĄCE DO KOMENTARZY
  17. $link=mysql_query('SELECT id from newsy order by id desc');
  18. while($wiersz=mysql_fetch_array($link)){
  19.  
  20. echo '<a href="komentarze.php?id='.$wiersz['id'].'">Komentarze</a>';
  21. }
  22.  
  23. }

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.
Go to the top of the page
+Quote Post
Blame
post
Post #11





Grupa: Zarejestrowani
Postów: 678
Pomógł: 124
Dołączył: 26.09.2009

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


To dlatego, że wyświetlanie newsa i linku do niego musisz zrobić w jednej pętli. Czyli powinno to wyglądać tak:

  1. mysql_connect('serwer','login','haslo');
  2.  
  3. $wyswietl=mysql_query('select * from newsy ORDER BY id DESC');
  4.  
  5. while($i=mysql_fetch_assoc($wyswietl)){
  6.  
  7. $tytul=$i['tytul'];
  8. $tresc=$i['tresc'];
  9. $data=$i['data'];
  10.  
  11. echo "<div align='right'><img src='./cal.gif'></img> $data</div>";
  12. echo "<h2><center><dig style='color:#4682B4'>$tytul </div></center></h2><br/><br/>";
  13. echo "$tresc<br/><br/><hr color='olivedrab'/>";
  14.  
  15. echo '<a href="komentarze.php?id='.$i['id'].'">Komentarze</a>';
  16.  
  17. }

Go to the top of the page
+Quote Post
kamil1114
post
Post #12





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 22.02.2008
Skąd: katowice

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


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:

  1. <?php
  2. if(isset($_GET['id'])){
  3. $id=$_GET['id'];
  4. mysql_connect('serwer','login','haslo');
  5.  
  6.  
  7. $wyswietl=mysql_query("select * from newsy where id='$id'");
  8.  
  9. while($i=mysql_fetch_assoc($wyswietl)){
  10.  
  11. $tytul=$i['tytul'];
  12. $tresc=$i['tresc'];
  13. $data=$i['data'];
  14.  
  15. echo "<div align='right'><img src='./cal.gif'></img> $data</div>";
  16. echo "<h2><center><dig style='color:#4682B4'>$tytul </div></center></h2><br/><br/>";
  17. echo "$tresc<br/><br/><hr color='olivedrab'/>";
  18.  
  19. }
  20.  
  21.  
  22.  
  23. $kom=mysql_query("select * from komentarze where id='$id'");
  24. while($a=mysql_fetch_assoc($kom)){
  25.  
  26. $nick=$a['nick'];
  27. $tresc=$a['tresc'];
  28. $ip=$a['ip'];
  29.  
  30. if(!empty($nick) && !empty($tresc))
  31. {
  32.  
  33.  
  34. echo "<center>$nick</center>";
  35. echo "<center>$tresc</center>;
  36.  
  37.  
  38. }
  39.  
  40. }
  41.  
  42.  
  43. echo "<b>Dodawanie komentarzy:</b></br>";
  44.  
  45. echo "<form method='post'>";
  46.  
  47. echo "Twój nick: </br>";
  48.  
  49. echo "<input type='text' name='nick'> </br>";
  50.  
  51. echo "Tresć komentarza: </br>";
  52.  
  53. echo "<textarea name='text' cols='40' rows='15'></textarea> </br>";
  54.  
  55. echo "<input type='submit' value='Dopisz'>";
  56.  
  57. echo "</form>";
  58.  
  59.  
  60. $nick=$_POST['nick'];
  61. $text=$_POST['text'];
  62. $ip=$_SERVER["REMOTE_ADDR"];
  63.  
  64.  
  65. if(!empty($nick) && !empty($tresc)){
  66.  
  67.  
  68. mysql_query("insert into komentarze (nick,tresc,ip) values ('$nick,'$tresc','$ip')");
  69.  
  70.  
  71.  
  72.  
  73. }
  74.  
  75.  
  76.  
  77. }
  78. ?>



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 ?
Go to the top of the page
+Quote Post
thek
post
Post #13





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Ty lepiej sprawdź czemu kod po wklejeniu tutaj jest wyświetlany zrąbany (IMG:style_emoticons/default/winksmiley.jpg) Podpowiadam... Linia 36 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
kamil1114
post
Post #14





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 22.02.2008
Skąd: katowice

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


A dziękuję , taki mały znaczek(") , a tyle zmienia (IMG:style_emoticons/default/winksmiley.jpg)

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:
  1. <?php
  2. if(isset($_GET['id'])){
  3. $id=$_GET['id'];
  4. mysql_connect('baza','login','haslo');
  5.  
  6.  
  7. $wyswietl=mysql_query("select * from newsy where id='$id'");
  8.  
  9. while($i=mysql_fetch_assoc($wyswietl)){
  10.  
  11. $tytul=$i['tytul'];
  12. $tresc=$i['tresc'];
  13. $data=$i['data'];
  14.  
  15. echo "<div align='right'><img src='./cal.gif'></img> $data</div>";
  16. echo "<h2><center><dig style='color:#4682B4'>$tytul </div></center></h2><br/><br/>";
  17. echo "$tresc<br/><br/><hr color='olivedrab'/>";
  18.  
  19. }
  20.  
  21. echo "<br/><br/>";
  22.  
  23. $kom=mysql_query("select * from komentarze where id='$id'");
  24. while($a=mysql_fetch_assoc($kom)){
  25.  
  26. $nick=$a['nick'];
  27. $tresc1=$a['tresc'];
  28. $ip=$a['ip'];
  29.  
  30. if(!empty($nick) && !empty($tresc1)){
  31. echo "<center>$nick</center>";
  32. echo "<center>$tresc1</center>";
  33. }
  34. else {
  35. echo "Brak komentarzy do tego newsa";
  36. }
  37.  
  38. }
  39.  
  40.  
  41. echo "<b>Dodawanie komentarzy:</b></br>";
  42.  
  43. echo "<form method='post'>";
  44.  
  45. echo "Twój nick: </br>";
  46.  
  47. echo "<input type='text' name='nick'> </br>";
  48.  
  49. echo "Tresć komentarza: </br>";
  50.  
  51. echo "<textarea name='komentarz' cols='40' rows='15'></textarea> </br>";
  52.  
  53. echo "<input type='submit' value='Dopisz'>";
  54.  
  55. echo "</form>";
  56.  
  57.  
  58. $nick=$_POST['nick'];
  59. $text=$_POST['komentarz'];
  60. $ip=$_SERVER['REMOTE_ADDR'];
  61.  
  62.  
  63. if(!empty($nick) && !empty($tresc)){
  64. mysql_query("insert into komentarze (nick,tresc,ip) values ('$nick,'$text','$ip')");
  65. }
  66.  
  67.  
  68. }
  69. ?>


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.
Go to the top of the page
+Quote Post
Blame
post
Post #15





Grupa: Zarejestrowani
Postów: 678
Pomógł: 124
Dołączył: 26.09.2009

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


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.
Go to the top of the page
+Quote Post
kamil1114
post
Post #16





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 22.02.2008
Skąd: katowice

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


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.
Go to the top of the page
+Quote Post
potreb
post
Post #17





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

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


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ę.
Go to the top of the page
+Quote Post
Blame
post
Post #18





Grupa: Zarejestrowani
Postów: 678
Pomógł: 124
Dołączył: 26.09.2009

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


Spróbuj zamiast:
  1. mysql_query("insert into komentarze (nick,tresc,ip) values ('$nick,'$text','$ip')");

dać:
  1. 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:
  1. mysql_query("INSERT INTO komentarze ('id', 'nick', 'tresc', 'ip') VALUES(0 '$nick,'$text','$ip')");

Lub tak:
  1. mysql_query("INSERT INTO komentarze VALUES(0 '$nick,'$text','$ip')");


Chociaż nie wiem czy to coś da...
Go to the top of the page
+Quote Post
Spawnm
post
Post #19





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




@Blame -> to nic nie zmieni (IMG:style_emoticons/default/winksmiley.jpg)

@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
Go to the top of the page
+Quote Post
kamil1114
post
Post #20





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 22.02.2008
Skąd: katowice

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


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.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 05:21