Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: System komentarzy..jak?
Forum PHP.pl > Forum > Przedszkole
eunix
Chce napisać skrypt komentarzy, napisałem już skrypt newsów ale chce teraz komentarzy, ale to jest chyba trudniejsze...
jak to napisać ?Ma ktoś już gotowy kod?
Chodzi mi o komentarze operujące na bazie danych!
minimal2
Byćmoże wprowadzę cię w błąd ale moim zdaniem to powimnno być tsk:
Pod każdym nwesem link komentuj do pliku na koments.php z $_GET["id"]
koments.php łączy się z SQLem i sprawdza czy taki artykół istnieje... jeśli tak pokazuje formularz dla wpisu... jeśli nie wywala błąd
submit wywołuje kioments.php z danymi (w zmiennych $_POST) i jeszcze jedną $_POST["done"]
koments.php sprawdza czy jest ustalona zmienna $_POST["done"] i jeśli tak wysyła dane z reszty $_POSTów do bazy
I to tyle...
strife
Zbytnio nie widzę tutaj czytelnej i treściwej odpowiedzi na pytanie, więc pozwolę sobie przedstawić moją wersję komentarzy.

Tworzysz kolejną tabelę w bazie danych, np. comments. Struktura takiej bazy może wyglądać np. tak:
Kod
id | uid | text | nickname

gdzie:
id - to unikalny numer komentarza.
uid - to numer newsa do którego skierowany jest dany komentarz.

Reszta pól myślę, że jest jasna i nie trzeba tłumaczyć.

I wtedy posiadając taką strukturę przy wyświetlniu newsa, robisz selecta, który wydobędzie wszystkie komentarze zawierające dany uid, czyli numer news'a.

Oczywiście wszystko przekazujesz poprzez $_GET. Wyglądało by to w ten sposób, przy wyświetlaniu news'a. ?news=100, a następnie:
  1. SELECT id, uid, text, nickname
  2. FROM comments
  3. WHERE uid = $uid

gdzie $uid to jak już wcześniej wspomniałem numer danego aktualnie wyświetlanego news'a na stronie, czyli zmienna $_GET['news'].

To tak po krótce... smile.gif

Pozdrawiam!
jacknn
Cytat(eunix @ 2006-02-24 21:34:29)
.. napisałem już skrypt newsów ale chce teraz komentarzy, ale to jest chyba trudniejsze...

Najprościej, skoro napisałeś system newsów to zrób to analogicznie do komentarzy tylko dodaj o jedno pole więcej dla id newsa.
Wyśiwetlając komentarze do newsa wyświetlaj za pomocą zapytania tak jak napisał to kolego powyżej. Tak naprawdę newsy i komentarze niczym się między sobą nie różnią, klasyczna metoda dodawania rekrdów do bazy danych i wyświetlanie ich.
eunix
Napisałem ale zatrzymałem się w jednym momencie:
wprowadziłem to wszystko w jeden plik:
  1. <?php 
  2.  
  3. include_once ('config.php');
  4. if(isset($_GET['news_id'])) {
  5.  $nid = $_GET['news_id']; }
  6. else {
  7. $nid = FALSE; }
  8. $query = "SELECT * FROM php_news WHERE news_id=$nid";
  9. $result = @mysql_query ($query);
  10. if ($result) {
  11. while ($row = mysql_fetch_array ($result))
  12. echo '<p class="MA">Temat: <b>' . $row['news_title'] . '</b>&nbsp;&nbsp;Autor: <b>' . $row['news_author'] . '</b>&nbsp;&nbsp;Dodano: <b>' . $row['news_date'] . '</b></p>
  13. <hr color="#54bfff"><p class="TEXT">' . $row['news_text'] . "<br><br></p>";
  14. } 
  15. if(isset($submit))
  16. {
  17. $query = "INSERT INTO php_coment (com_id, com_author, com_text, com_date, news_id) 
  18. VALUES ('', '$autor', '$tresc', NOW(), '$nid')";
  19. $result = @mysql_query ($query);
  20. }
  21. include ('dodaj_com.html');
  22. $query = "SELECT * FROM php_coment WHERE news_id=$nid";
  23. $result = @mysql_query ($query);
  24. if ($result) {
  25. while ($row = mysql_fetch_array ($result)) 
  26. echo '<p class="MA">Temat: <b>' . $row['com_title'] . '</b>&nbsp;&nbsp;Autor: <b>' . $row['com_author'] . '</b>&nbsp;&nbsp;Dodano: <b>' . $row['com_date'] . '</b></p>
  27. <hr color="#54bfff"><p class="TEXT">' . $row['com_text'] . "<br><br></p>";
  28. }
  29. ?>


na strone wchodze np. tak http://unix.pll/1s/coment.php?news_id=3
...pokazuje treśc newsa w coment.php dobrze ale gorzej z wyświetlaniem komentarzy, ponieważ przy dodawniu komenta do bazy nie chce się dodać id newsa..czemu?
Lars
Pole `id` musi miec auto_increment
eunix
ale to ma dodawać chyba id tego newsa co komentuje, a jak zrobie tak jak ty mówisz to
będzie dodawało po koleji 1, 2, 3 itd.
więc o to chyba nie chodzi :]

//jak może ktoś to niech poprawi ten kodzi co dałem wyżej smile.gif
jacknn
pole com_id w twojej bazie ma być auto_increment, twój komentarz identyfikowany jest do newsa po polu news_id tak jak to masz zresztą w zapytaniu do bazy i teraz jak piszesz:

  1. <?php
  2. $query = "INSERT INTO php_coment (com_id, com_author, com_text, com_date, news_id) 
  3. VALUES ('', '$autor', '$tresc', NOW(), '$nid')";
  4. ?>


to moim zdaniem powinno być tak:

  1. <?php
  2. $query = "INSERT INTO php_coment (com_author, com_text, com_date, news_id) 
  3. VALUES ('$autor', '$tresc', NOW(), '$nid')";
  4. ?>


sprawdź
eunix
zrobiłem to ale teraz chce utworzyc plik do edycji komentarzy jak to zrobić bo jak w formularzu zrobie value="asdasdas" to ja robiąc update w bazie nic się nie zmienia,
jak to zrobić?
jacknn
robisz mniejwięcej coś takiego (pamiętaj to tylko przykład):
  1. <?php
  2. $wynik = mysql_query("SELECT * FROM tabela WHERE id=$id");
  3. if ($wynik) {
  4. $pole = mysql_fetch_array($wynik);
  5. $id = htmlspecialchars($pole["id"], ENT_QUOTES);
  6. $tytul = htmlspecialchars($pole["tytul"], ENT_QUOTES);
  7. $tresc = htmlspecialchars($pole["tresc"], ENT_QUOTES);
  8. $tresc_long = htmlspecialchars($pole["tresc_long"], ENT_QUOTES);
  9. }
  10.  
  11. echo "<form method=\"post\" action=\"plik.php\" enctype=\"multipart/form-data\">
  12. <input type=\"hidden\" name=\"id\" value=\"".$id."\">
  13. <input type=\"hidden\" name=\"popraw\" value=\"".$id."\">
  14. <input type=\"text\" name=\"id\" value=\"".$tytul."\">
  15. <textarea name=\"tresc\" rows=12 cols=5>".$tresc."</textarea>
  16. <textarea name=\"tresc\" rows=12 cols=5>".$tresc."</textarea>
  17. <input type=\"submit\" value=\" zapisz \">";
  18.  
  19. ?>


teraz dodajemy to do bazy takim zapytaniem:
  1. <?php
  2. $query = "UPDATE tabela 
  3. SET id='$id', tytul='$tytul', tresc='$tresc', tresc_long='$tresc_long'
  4. WHERE id='$popraw'";
  5. ?>
eunix
sory ale coś mi to nie działa, podstawiłem swoje dane i teraz nic nie pokazuje :]
może coś innego?
jacknn
a możesz pokazać swój skrypt jak wygląda w całości questionmark.gif
eunix
nie nadpisuje danych z bazy, ciągle są takie same:
pliki wyglądają tak:
plik.php
  1. <?php 
  2. include('../config.php');
  3.  
  4. $query = "UPDATE php_news 
  5. SET news_id='$id', news_title='$tytul', news_text='$tresc',
  6. WHERE id='$popraw'";
  7. ?>

i
  1. <?php
  2.  
  3. include('../config.php');
  4.  
  5. $wynik = mysql_query("SELECT * FROM php_news WHERE news_id=$id");
  6. if ($wynik) {
  7. $pole = mysql_fetch_array($wynik);
  8. $id = htmlspecialchars($pole["news_id"], ENT_QUOTES);
  9. $tytul = htmlspecialchars($pole["news_title"], ENT_QUOTES);
  10. $tresc = htmlspecialchars($pole["news_text"], ENT_QUOTES);
  11. }
  12.  
  13. echo "<form method=\"post\" action=\"plik.php\" enctype=\"multipart/form-data\">
  14. <input type=\"hidden\" name=\"id\" value=\"".$id."\">
  15. <input type=\"hidden\" name=\"popraw\" value=\"".$id."\">
  16. <input type=\"text\" name=\"id\" value=\"".$tytul."\">
  17. <textarea name=\"tresc\" rows=12 cols=5>".$tresc."</textarea>
  18. <input type=\"submit\" value=\" zapisz \">";
  19.  
  20. ?>


a co do wyswietlania to wyswietla tylko tekst tytułu, a obecnej tressci nie pokazuje,
i do tego tabelki są jakieś pogięte. :/
jacknn
w moim przykładzie nie ma żadnych tabelek, poprostu napisałem główne składniki bez tabelek tylko same pola input i textarea resztę powinieneś umieć ubrać w tabelki ;>, czy nie ?

popraw to tak plik.php:

  1. <?php 
  2. include('../config.php');
  3.  
  4. $id = trim($_POST['id']);
  5. $tytul = trim($_POST['tytul']);
  6. $tresc = trim($_POST['tresc']);
  7. $popraw = trim($_POST['popraw']);
  8.  
  9. $query = "UPDATE php_news 
  10. SET news_id='$id', news_title='$tytul', news_text='$tresc',
  11. WHERE id='$popraw'";
  12.  
  13. if ($query) {
  14. echo "Potwierdzenie pozytywne";
  15. } else {
  16. echo "Potwierdzenie negatywne";
  17. }
  18. ?>


a co do wyswietlania treści newsa to nie ma </form> na końcu przed znakiem ";
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.