Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: System Tagów
Forum PHP.pl > Forum > PHP
KrzysiekKCN
Cześć wszystkim, wraz z tym forum oraz manualem udało mi się napisać na pozór dobry skrypt do wyświetlania oraz do wybierania tagów z bazy danych.

Część która odpowiada za wyświetlanie tagów, wraz z ich losowym stylem działa i wygląda tak:
  1. <?php
  2. // tagi z bazy
  3. $tz= 'select * from `wiadomosci` ORDER by `id` DESC';
  4. $tw = mysqli_query($mysql, $tz);
  5. $tag2 = "";
  6. while ($tags = mysqli_fetch_array($tw)) {
  7. $tag = $tags['tagi'];
  8. $tag2 = $tag2.$tag;
  9. }
  10. // tagi do tablicy
  11. $tablica = explode(',', $tag2);
  12. array_walk($tablica, function(&$v){ $v = '<a href="?body=search&type='.$v.'">'.$v.'</a>';});
  13. $wielkosc_tablicy = count( $tablica );
  14. $wielkosc_tablicy = $wielkosc_tablicy - 1;
  15. if ($wielkosc_tablicy >= 15) {
  16. $ile_losow = 10;
  17. } else {
  18. $ile_losow = $wielkosc_tablicy;
  19. }
  20. // losowanie tagow z tablicy
  21. $rand_keys = array_rand($tablica, $ile_losow);
  22. for ($i=0; $i<$ile_losow; $i++) {
  23. $font_size = rand (14, 36);
  24. $font_style = rand (1, 8);
  25. if ($font_style <= 5) {
  26. $styl = "font-style: normal;";
  27. }
  28. if ($font_style == 6) {
  29. $styl = "font-weight: bold;";
  30. }
  31. if ($font_style == 7) {
  32. $styl = "font-style: italic;";
  33. }
  34. if ($font_style == 8) {
  35. $styl = "text-decoration: underline;";
  36. }
  37. $font_style2 = rand (1, 3);
  38. if ($font_style2 == 1) {
  39. $styl2 = "text-align: right;";
  40. }
  41. if ($font_style2 == 2) {
  42. $styl2 = "text-align: left;";
  43. }
  44. if ($font_style2 == 3) {
  45. $styl2 = "text-align: center;";
  46. }
  47.  
  48. echo '<font style="font-size:'.$font_size.'pt; '.$styl.$styl2.'">'.$tablica[$rand_keys[$i]]."</font>\n";
  49. }
  50. ?>

a link po kliknięciu takiego tagu wygląda tak:
Kod
?body=search&type=test


i takie zapytanie przechodzi do pliku search.php którego częścią jest kod odpowiadający za GET TYPE:
  1. //type
  2. if ((!empty($_GET['type'])) && (empty($_GET['kat'])) && (empty($_GET['arch']))) {
  3. $tag = $_GET['type'];
  4. $zapytanie = 'select * from `wiadomosci` WHERE `typ` !=3 ORDER by `id` DESC';
  5. $wynik = mysqli_query($mysql, $zapytanie);
  6. $licznik = 0;
  7. $cufon = 0;
  8. $cufon2 = 0;
  9. while ($wiersz = mysqli_fetch_array($wynik)) {
  10. $tagi = explode(",", $wiersz['tagi']);
  11. $licznik++;
  12. for ($i=0; $i<=$licznik; $i++) {
  13. if ($tagi[$i]==$tag) {
  14. //
  15. $cufon++;
  16. $cufon2++;
  17. //
  18. if ($wiersz['typ'] == 1) {
  19. $tytul = $wiersz['tytul'];
  20. }
  21. if ($wiersz['typ'] == 2) {
  22. $tytul = $wiersz['tytul'].'<img src="images/loged_req.png" border="0" title="Wymagane zalogowanie." alt="Wymagane zalogowanie.">';
  23. }
  24. //
  25. // ilosc komentow
  26. $ilosc_koment = mysqli_num_rows(mysqli_query($mysql, 'SELECT * FROM `komentarze` WHERE `id_wiadomosci` = "'.$wiersz['id'].'"'));
  27. //
  28. $tresc = $wiersz['tresc'];
  29. $ile = 300;
  30. $licz = strlen($tresc);
  31. if ($licz>=$ile) {
  32. $tnij = substr($tresc,0,$ile);
  33. $txt = $tnij."...";
  34. } else {
  35. $txt = $tresc;
  36. }
  37. echo '
  38. <div class="article">
  39. <table style="text-align: left;" border="0" cellpadding="0" cellspacing="0">
  40. <tbody>
  41. <tr>
  42. <td style="width: 580px;"><h2 id="cufon'.$cufon.'"><span><a href="blog.php?body=artykul&id='.$wiersz['id'].'">'.$tytul.'</a></span></h2></td>
  43. <td style="width: 80px;"><span id="cufon2-'.$cufon2.'" class="koment">[ '.$ilosc_koment.' ]</span></td>
  44. </tr>
  45. </tbody>
  46. </table>
  47.  
  48. <div class="clr"></div>
  49. <p class="createdby" >Napisano <strong>'.$wiersz['data'].'</strong> przez <strong>'.$wiersz['autor'].'</strong>.</p>
  50. <p>'.$txt.'</p>
  51. <p><br><a href="blog.php?body=artykul&id='.$wiersz['id'].'"><input class="submit" type="submit" value="Czytaj dalej.."></a></p>
  52. </div>';
  53. }
  54. }
  55.  
  56. }
  57. echo '</ul>';
  58. }
  59. ?>


i każdy GET type który wybiore ma znaleźć mi artykuł do którego pasuje z tagów w bazie danych:
Artykuł 1 | Tagi:
Kod
,tag1,tag2,tag3,tag4,tag5,tag6,tag7,tag8,tag9,


ja sami widzicie muszę zaczynać od przecinka i kończyć przecinkiem co nie jest wygodne. a problem leży w tym że skrypt zadziała tylko dla GET['type'] === tag1, dla każdego innego już to się nie sprawdzi.

Czy jest ktoś łaskaw przeanalizować kod i wspomóc?

Z góry dziękuje za fatygę w czytaniu tego "czegoś" co stworzyłem :-)


Sory że w nowym poście ale jak znam życie to temat by się znacznie poszerzył.
Rozwiązałem problem.
  1. $licznik++;
  2. for ($i=0; $i<=$licznik; $i++) {
  3. if ($tagi[$i]==$tag) {


na
  1. $licznik = count($tagi);
  2. echo $licznik;
  3. for ($i=0; $i<=$licznik; $i++) {
  4. if ($tagi[$i]==$tag) {
nospor
ajajajjaaaaaaaa boli..... wink.gif
Masz załóżmy w bazie 10 tys wiadomości. Chcąć znaleźć wiadomośc z tagiem X, ty pobierasz te wszystkie wiadomości i w php szukasz. Toż to zarżnie ci serwer.

Masz źle zrobione tagi.
Oprócz tabeli wiadomości ma być tabela z tagami oraz tabela wiążąca tag z wiadomością. Wówczas wszystko bez problemu zrobisz na bazie danych i będzie to optymalne.
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.