Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]System tagów - nie dopasowuje tagów do newsa
coomler
post 31.08.2010, 14:19:18
Post #1





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 26.06.2010

Ostrzeżenie: (10%)
X----


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.

Ten post edytował coomler 31.08.2010, 14:21:07
Go to the top of the page
+Quote Post
Blame
post 31.08.2010, 14:35:03
Post #2





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

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


Dodaj sobie po if($rows >=1):
  1. $tags = '';

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


--------------------
Go to the top of the page
+Quote Post
Janek85
post 31.08.2010, 14:41:43
Post #3





Grupa: Zarejestrowani
Postów: 12
Pomógł: 2
Dołączył: 31.08.2010

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


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
Go to the top of the page
+Quote Post
coomler
post 31.08.2010, 15:02:25
Post #4





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 26.06.2010

Ostrzeżenie: (10%)
X----


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.

Go to the top of the page
+Quote Post
Janek85
post 31.08.2010, 15:23:40
Post #5





Grupa: Zarejestrowani
Postów: 12
Pomógł: 2
Dołączył: 31.08.2010

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


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.  

Go to the top of the page
+Quote Post
coomler
post 31.08.2010, 15:36:59
Post #6





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 26.06.2010

Ostrzeżenie: (10%)
X----


O ile się nie mylę, bo nie sprawdzałem, to ten kod wyświetli mi
Cytat
tag1 tag2 tag3
zamiast
Cytat
tag1, tag2, tag3
Go to the top of the page
+Quote Post
Janek85
post 31.08.2010, 16:08:11
Post #7





Grupa: Zarejestrowani
Postów: 12
Pomógł: 2
Dołączył: 31.08.2010

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


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
Go to the top of the page
+Quote Post
coomler
post 31.08.2010, 16:41:45
Post #8





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 26.06.2010

Ostrzeżenie: (10%)
X----


I właśnie tak działa. Pozdrawiam.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 18.07.2025 - 07:02