Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Licznik komentarzy (PHP + mysql)
Forum PHP.pl > Forum > PHP
kimu
Witam. Chciałbym zrobić licznik komentarzy który wyświetlał by się obok każdego dodanego tekstu. Czyli
obok każdego tekstu pojawiała by się odpowiednia do danego tekstu.

Puki co wygląda to tak (KLIK)

Gdzie każde "0" powinno być odpowiednią wartością odpowiadającą liczbie komentarzy danego tekstu. Tak
jednak nie jest.

Skrypt PHP w pliku "teksty.php" to:

  1. <?php
  2. $conn = mysql_connect("xxx","xxx","xxx");
  3. mysql_select_db("teksty");
  4. ?>
  5.  
  6. <?php
  7. $sql = 'SELECT * FROM `katalog`; ';
  8. $sqla = "SET CHARSET latin2";
  9. mysql_query($sqla);
  10. $sql = 'SELECT * FROM `katalog`; ';
  11. $wykonaj = mysql_query($sql);
  12. $sql3 = mysql_query("SELECT COUNT(*) as il_komentarzy FROM kom WHERE tek='".$_GET['id']."'");
  13. $row = mysql_fetch_array($sql3);
  14.  
  15.  
  16. while($wiersz = mysql_fetch_assoc($wykonaj)) {
  17. echo '<table border="0" width="100%">'.'<tr>'.'<td bgcolor="#758588">'.'<font size="2">'.$wiersz['nazwa'].'</font>'.'</td>'.'</tr>'.'</table><hr color="#758588" size=1 /><a href="wpis.php?id='.$wiersz['id'].'"></a>';
  18.  
  19. $sql1 = "SELECT * FROM `tekst` WHERE kat = '".$wiersz['id']."' ORDER BY id";
  20. $wykonaj1 = mysql_query($sql1);
  21.  
  22. while($wiersz1 = mysql_fetch_assoc($wykonaj1)) {
  23. echo '<table border="0" width="100%">'.'<tr>'.'<td bgcolor="#C1C9C9">'.'<font size="2">'.[b]$row['il_komentarzy'][/b].'- <a href="strona-teksty.php?id='.$wiersz1['id'].'">'.$wiersz1['tytul'].' </a>'.'</font>'.'</td>'.'</tr>'.'</table>';
  24. }
  25. echo '<br>';
  26. }
  27. mysql_close($conn);
  28. ?>


$sql3 = mysql_query("SELECT COUNT(*) as il_komentarzy FROM kom WHERE tek='".$_GET['id']."'");
$row = mysql_fetch_array($sql3);

$row['il_komentarzy']


Gdzie część pogrubiona skryptu odpowiada za wyświetlane zera.

Baza danych wygląda następująco:

Teksty:
* katalog
* kom
- id, imie, tresc, tek (id jest pojedyncze dla jednego komentarza, tek odpowiada przynależności do danego tekstu).
* tekst
- id, tytul, tekst, kat (id jest pjedyncze dla jednego tekstu i odpowiada wartości tek w komentarzach).


Czy ktoś może wie co musze zrobić aby liczba komentarzy była wyświetlana poprawnie?
DawidF
A próbowałeś to samo zapytanie, tzn.

  1. SELECT COUNT(*) AS il_komentarzy FROM kom WHERE tek='".$_GET['id']."'");


przetestować w np. w PhpMyAdminie?

Jest to poza tym raczej mało skomplikowane zapytanie. Czemu wobec tego nie napisać po prostu:

  1. $sql3 = mysql_query("SELECT * FROM kom WHERE tek='".$_GET['id']."'");
  2. echo mysql_num_rows($sql3);


Tylko zaraz kombinować??

Pozdrawiam,
kimu
Teraz wygląda to tak:

  1. <?php
  2. $conn = mysql_connect("xxx","xxx","xxx");
  3. mysql_select_db("teksty");
  4.  
  5. $sql = 'SELECT * FROM `katalog`; ';
  6. $sqla = "SET CHARSET latin2";
  7. mysql_query($sqla);
  8. $sql = 'SELECT * FROM `katalog`; ';
  9. $wykonaj = mysql_query($sql);
  10. $sql3 = mysql_query("SELECT * FROM kom WHERE tek='".$_GET['id']."'");
  11.  
  12.  
  13. while($wiersz = mysql_fetch_assoc($wykonaj)) {
  14. echo '<table border="0" width="100%">'.'<tr>'.'<td bgcolor="#758588">'.'<font size="2">'.$wiersz['nazwa'].'</font>'.'</td>'.'</tr>'.'</table><hr color="#758588" size=1 /><a href="wpis.php?id='.$wiersz['id'].'"></a>';
  15.  
  16. $sql1 = "SELECT * FROM `tekst` WHERE kat = '".$wiersz['id']."' ORDER BY id";
  17. $wykonaj1 = mysql_query($sql1);
  18.  
  19. while($wiersz1 = mysql_fetch_assoc($wykonaj1)) {
  20. echo '<table border="0" width="100%">'.'<tr>'.'<td bgcolor="#C1C9C9">'.'<font size="2">'.mysql_num_rows($sql3).'- <a href="strona-teksty.php?id='.$wiersz1['id'].'">'.$wiersz1['tytul'].' </a>'.'</font>'.'</td>'.'</tr>'.'</table>';
  21. }
  22. }
  23. mysql_close($conn);
  24. ?>


I dalej pojawiają się zera. Moze problem tkwi w "tek" i "id" komentarzy i tekstów ?
chlebik
U mnie zliczanie komentarzy wyglada nastepuajco:


  1. <?php
  2. $query = "SELECT * FROM komentarze WHERE id = '$tablica_z_wpisami2[1]'";
  3. $tablica_zliczanych_komentarzy = mysql_query($query, $link);
  4.  
  5. while($row = mysql_fetch_row($tablica_zliczanych_komentarzy)) 
  6. {
  7. $liczba_komentarzy++;
  8. }
  9. ?>



Po prostu pobieram juz komentarze zawczasu i sa one w tablicy, ktora szybko moge odczytac, a zliczanie ilosci tych komentarzy tym samym jest po prostu zliczaniem ilosci wierszy w tabeli. Nie jest to moze do konca efektywne rozwiazanie, ale dziala calkiem sprawnie - zycie nauczylo, ze operowanie na funkcjach MySQLa z definicji mi nie wychodzi, ale ja w koncu lama jestem smile.gif
Strzałek
Ja wtrącę swoje parę groszy.

Otóż takie liczenie komentarzy jest mało wydajne. Wyobraź sobie że na stronie głównej masz 10 newsów i do każdego wykonujesz zapytanie z COUNT'em żeby pokazać ile jest komentarzy. Masz 1 zapytanie + 10 + jeszcze jakieś inne. Nie fajnie, nie wspominając o tym że przy dużeeej ilości komentarzy COUNT nie jest błyskawicą winksmiley.jpg Zdecydowanie lepszym rozwiązaniem jest trzymanie w kolumnie z newsami czy czymś innym ilości komentarzy.

Przy dodaniu i usuwaniu komentarza zrobić UPDATE, żeby licznik się zgadzał i gra gitara winksmiley.jpg
kimu
Teraz zrobiłem w ten sposób i dalej pokazują się zera :/

  1. <?php
  2. $conn = mysql_connect("xxx","xxx","xxx");
  3. mysql_select_db("teksty");
  4.  
  5. $sql = 'SELECT * FROM `katalog`; ';
  6. $sqla = "SET CHARSET latin2";
  7. mysql_query($sqla);
  8. $sql = 'SELECT * FROM `katalog`; ';
  9. $wykonaj = mysql_query($sql);
  10.  
  11. while($wiersz = mysql_fetch_assoc($wykonaj)) {
  12. echo '<table border="0" width="100%">'.'<tr>'.'<td bgcolor="#758588">'.'<font size="2">'.$wiersz['nazwa'].'</font>'.'</td>'.'</tr>'.'</table><hr color="#758588" size=1 /><a href="wpis.php?id='.$wiersz['id'].'"></a>';
  13.  
  14. $sql1 = "SELECT * FROM `tekst` WHERE kat = '".$wiersz['id']."' ORDER BY id";
  15. $wykonaj1 = mysql_query($sql1);
  16.  
  17. $sql3 = mysql_query("SELECT * FROM kom WHERE tek='".$wiersz['id']."'");
  18.  
  19. while($wiersz1 = mysql_fetch_assoc($wykonaj1)) {
  20. echo '<table border="0" width="100%">'.'<tr>'.'<td bgcolor="#C1C9C9" width="95%">'.'<font size="2">'.'- <a href="strona-teksty.php?id='.$wiersz1['id'].'">'.$wiersz1['tytul'].' </a>'.'</td>'.'<td align="center" bgcolor="#7C8F96">'.mysql_num_rows($sql3).'</font>'.'</td>'.'</tr>'.'</table>';
  21. }
  22. }
  23. mysql_close($conn);
  24. ?>
abc667
weź napisz dokładnie jak wygląda struktura twojej bazy
kimu
Jakbyś mógł odezwać się do mnie na gg (3164888) to podam ci dane do bazy i zobaczysz dokładnie jak ona wygląda ;-).

Problem już rozwiązałem. Dodałem nową kolumne w komentarzach liczącą ich liczbę. Teraz natomiast mam inne pytanie. Jakim skryptem moge obliczyć ilośc znaków znajduących się w danym wierszu np tabeli "tekst" ?
defrag
Cytat(Strzałek @ 26.06.2007, 13:46:47 ) *
Ja wtrącę swoje parę groszy.

Otóż takie liczenie komentarzy jest mało wydajne. Wyobraź sobie że na stronie głównej masz 10 newsów i do każdego wykonujesz zapytanie z COUNT'em żeby pokazać ile jest komentarzy. Masz 1 zapytanie + 10 + jeszcze jakieś inne. Nie fajnie, nie wspominając o tym że przy dużeeej ilości komentarzy COUNT nie jest błyskawicą winksmiley.jpg Zdecydowanie lepszym rozwiązaniem jest trzymanie w kolumnie z newsami czy czymś innym ilości komentarzy.

Przy dodaniu i usuwaniu komentarza zrobić UPDATE, żeby licznik się zgadzał i gra gitara winksmiley.jpg

Zgadzam sie w 100% ze strzalkiem. Jesli masz mysql 5 to latwym rozwiazaniem jest ustawienie triggera ktory bedzie inkrementowal warotsc danego pola przy kazym insercie
  1. DELIMITER $$
  2.  
  3. CREATE TRIGGER groupDeleteHandler
  4. AFTER INSERT ON groups
  5. FOR EACH ROW BEGIN UPDATE group_categories SET group_count = group_count + 1 WHERE id = OLD.category_id;
  6. END;
  7.  
  8. $$
cicik
Cytat(defrag @ 26.06.2007, 17:32:46 ) *
Zgadzam sie w 100% ze strzalkiem. Jesli masz mysql 5 to latwym rozwiazaniem jest ustawienie triggera ktory bedzie inkrementowal warotsc danego pola przy kazym insercie


Tylko jeszcze znajdź hosting, na którym admin da ci uprawnienia do tworzenia triggerów.
Mam nadzieję, że zrobią tak, żeby do ich tworzenia nie trzeba było być superuserem.
defrag
Cytat(cicik @ 26.06.2007, 19:01:21 ) *
Tylko jeszcze znajdź hosting, na którym admin da ci uprawnienia do tworzenia triggerów.
Mam nadzieję, że zrobią tak, żeby do ich tworzenia nie trzeba było być superuserem.


No masz racje z mysql 5 z triggerami w polsce sie jeszcze nie spotkalem, jednak mialem okazje pracowac na hostach z niemiec, ktore udostepnialy ten "ficzer":) Tak to juz jest z MySQL'em.
kimu
A czy ktoś moze zna odpowiedź na moje wcześniejsze pytanie ?
Norbas
Zastosuj funkcję CHAR_LENGTH
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.