Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]System tagów - nie dopasowuje tagów do newsa
Forum PHP.pl > Forum > Przedszkole
coomler
Cześć, może temat nazwałem jakoś tak "niewyraźnie", ale nie miałem pomysłu jak go nazwać tongue.gif

Stworzyłem sobie system tagów i teraz mam problem.

To się znajduje w pętli for:

  1. <?php
  2.  
  3. $query = "SELECT tags.tagname FROM tags, newstotags WHERE newstotags.newsid = $id AND tags.tagid = newstotags.tagid";
  4.  
  5. $result = mysql_query($query);
  6.  
  7. $rows = mysql_num_rows($result);
  8.  
  9. if($rows >= 1)
  10. {
  11. while($row = mysql_fetch_array($result))
  12. {
  13. echo '<a href="tag/' . $row['tagname'] . '/">' . $row['tagname'] . '</a>, ';
  14. }
  15. }
  16.  
  17. else
  18. {
  19. echo '<span class="no-tags">Nie przypisano żadnych tagów.</span>';
  20. }
  21.  
  22. ?>


Jak widać na końcu będę mia przecinek. W celu jego usunięcia postanowiłem użyć rtrim więc i mój kod się zmienił:

  1. <?php
  2.  
  3. $query = "SELECT tags.tagname FROM tags, newstotags WHERE newstotags.newsid = $id AND tags.tagid = newstotags.tagid";
  4.  
  5. $result = mysql_query($query);
  6.  
  7. $rows = mysql_num_rows($result);
  8.  
  9. if($rows >= 1)
  10. {
  11. while($row = mysql_fetch_array($result))
  12. {
  13. $tags .= ' <a href="tag/' . $row['tagname'] . '/">' . $row['tagname'] . '</a>,';
  14. }
  15.  
  16. echo rtrim($tags, ',');
  17. }
  18.  
  19. else
  20. {
  21. echo '<span class="no-tags">Nie przypisano żadnych tagów.</span>';
  22. }
  23.  
  24. ?>


Problem pole na tym, że usuwa przecinek, ale nie tylko... zobaczcie efekt na zrzucie http://img294.imageshack.us/img294/4186/problemm.png Te tagi oddzielone czerwonym nie powinny się tam znajdować. Ten problem występuje tylko, gdy stosuję ten drugi skrypt. Tworzy się tak zwana piramida. Na dole(tych starczych newsach) są wszystkie możliwe tagi.

Problem nie pojawia się również, gdy nie przechodzę pętlą po newsach a wyświetlam tylko jednego nie używając pętli.
Blame
Dodaj sobie po if($rows >=1):
  1. $tags = '';

Bo teraz do zmiennej cały czas dodajesz nowe winksmiley.jpg
Janek85
Dlaczego cały czas dodajesz do ciągu nowe dane ?

Zamiast:

  1. $tags .= ' <a href="tag/' . $row['tagname'] . '/">' . $row['tagname'] . '</a>,';


wpisz ta:
  1. $tags = ' <a href="tag/' . $row['tagname'] . '/">' . $row['tagname'] . '</a>,';


Powinno zadziałać.

pozdrawiam
coomler
Cytat(Blame @ 31.08.2010, 15:35:03 ) *
Dodaj sobie po if($rows >=1):
  1. $tags = '';

Bo teraz do zmiennej cały czas dodajesz nowe winksmiley.jpg



No to żeś mnie zalatwil smile.gif Dzięki Ci bardzo.

Cytat(Janek85 @ 31.08.2010, 15:41:43 ) *
Zamiast:

  1. $tags .= ' <a href="tag/' . $row['tagname'] . '/">' . $row['tagname'] . '</a>,';


wpisz ta:
  1. $tags = ' <a href="tag/' . $row['tagname'] . '/">' . $row['tagname'] . '</a>,';


Powinno zadziałać.

pozdrawiam


Zauważ, że dane wyświetlam poza pętlą więc ten sposób nie zadziała. Jeżeli miałbym iść Twoim tropem musiałbym utworzyć tablicę, a dopiero potem wyświetlić ją poza pętlą. Zresztą rozwiązanie podobne do tego, gdzie dodaję tekst do zmiennej, jak się mylę poprawcie.

Janek85
Jeśli w pierwszym przykładzie wyświetlasz dane w pętli i wszystko działa, to dlaczego nie chcesz tego zrobić w przykładzie drugim ?
  1.  
  2. while($row = mysql_fetch_array($result)){
  3.  
  4. $tags = ' <a href="tag/' . $row['tagname'] . '/">' . $row['tagname'] . '</a>,';
  5. echo rtrim($tags, ',');
  6.  
  7. }
  8.  
  9.  
  10.  

coomler
O ile się nie mylę, bo nie sprawdzałem, to ten kod wyświetli mi
Cytat
tag1 tag2 tag3
zamiast
Cytat
tag1, tag2, tag3
Janek85
Skoro nie chcesz mieć tylko ostatniego przecinka, to spróbuj po wyświetleniu wyniku poza pętlą (Twój przykład), nadać zmiennej $tags wartość null. Tak żeby do zmiennej dopisywały się tyko dane z aktualnej pętli. Może tak zadziała smile.gif

pozdrawiam
coomler
I właśnie tak działa. Pozdrawiam.
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.