Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php/mysql] archiwum
Forum PHP.pl > Forum > PHP
Majcok12
Mam funkcje archiv(), ktora wyswietla mi starsze newsy (tzn. wszystkie oprocz 6 najnowszych). Jednak nie wszystko działa tak jak powinno.
Funkcja:
  1. <?
  2. function archiv()
  3. {
  4. html_header(Archiwum, 800);
  5.  
  6. //ilosc wyswietlanych newsow na strone
  7. $news_per_page = 6; 
  8. //ilosc wszystkich newsow w bazie, oprocz ostatnich 6 najnowszych
  9. $all = mysql_fetch_row(mysql_query(&#092;"SELECT count(*) FROM news\")); 
  10.  
  11. $razem = $all[0] - 6;
  12.  
  13. echo &#092;"Razem $razem wszystkich newsów w archiwum<br><br>\";
  14.  
  15. //jezeli ta zmienna istnieje(jezeli uzytkownik wyslal formularz) zostaja odpowiednio posortowane newsy
  16. if(isset($_POST[&#092;"sort\"]))
  17. {
  18. //pobiera z bazy dane, odpowiednio je sortujac
  19. $query = &#092;"SELECT news_num, news_headline, add_ndate FROM news ORDER BY \".$_POST[\"sort\"].\" LIMIT \".$_GET[\"str\"]*$news_per_page.\",\".$news_per_page;
  20. $wynik = mysql_query($query);
  21. if(!$wynik) error_message(sql_error());
  22.  
  23. //formularz sortowania
  24. sort_form();
  25.  
  26. //petla wyswietlajaca wszystkie newsy w archwium
  27. while ($dane = mysql_fetch_array($wynik)) 
  28. {
  29. //id newsa, potrzebne do wyswietlenia calej jego zawartosci
  30. $id_news = $dane[&#092;"news_num\"]; 
  31. $naglowek = $dane[&#092;"news_headline\"]; 
  32. $data = $dane[&#092;"add_ndate\"];
  33. //id komentarzy do newsa, potrzebne do wyswietlenia komentarzy do danego newsa
  34. $id_comm = $dane[&#092;"news_c_id\"]; 
  35.  
  36. ?>
  37.  
  38. <?php echo &#092;"$data\"; ?> |
  39. <?
  40. echo &#092;"<a href=\"index.php?id=$id_news&id_commnts=$id_comm&action=v_r\">$naglowek </b></a>\"; 
  41. echo &#092;"<br>\";
  42. }
  43. }
  44. //jezeli nie istenjeje zmienna $_post['sort'] wyswietla sie formularz sortowania oraz newsy w archiwum posortowane domysl
  45. ie
  46. else 
  47. {
  48. sort_form();
  49.  
  50. $query = &#092;"SELECT news_num, news_headline, add_ndate FROM news ORDER BY news_num DESC 
    L
  51. MIT \".$_GET[\"str\"] * $news_per_page.\",\".$news_per_page; 
  52. $wynik = mysql_query($query);
  53. if(!$wynik) error_message(sql_error());
  54.  
  55. while ($dane = mysql_fetch_array($wynik)) 
  56. {
  57. //id newsa, potrzebne do wyswietlenia calej jego zawartosci
  58. $id_news = $dane[\"news_num\"]; 
  59. $naglowek = $dane[\"news_headline\"]; 
  60. $data = $dane[\"add_ndate\"];
  61. //id komentarzy do newsa, potrzebne do wyswietlenia komentarzy do danego newsa
  62. $id_comm = $dane[\"news_c_id\"]; 
  63.  
  64. ?>
  65. <b>
  66. <?php echo &#092;"$data\"; ?> |
  67. <?
  68. echo &#092;"<a href=\"index.php?id=$id_news&id_commnts=$id_comm&action=v_r\">$naglowek </b></a>\"; 
  69. echo &#092;"<br>\";
  70. }
  71. echo &#092;"<br>\";
  72. echo &#092;"<br>\";
  73. echo &#092;"<center>\";
  74.  
  75.  //dzielenie na strony
  76. $ile_str = ceil($razem/$news_per_page);
  77. $zmienna = 0;
  78.  
  79. if($_GET[&#092;"str\"]>1)
  80. {
  81. $zmienna2 = $_GET[&#092;"str\"]-1;
  82. echo &#092;"<a href=\"index.php?action=archiv&str=$zmienna2\"> Poprzednia </b></a>|\"; 
  83. }
  84.  
  85. for($i=0; $i<$ile_str; $i++)
  86. {
  87. $zmienna++;
  88. if($_GET[&#092;"str\"]==$zmienna)
  89. {
  90. echo &#092;"<a href=\"index.php?action=archiv&str=$zmienna\"><b>$zmienna</b></a>\"; 
  91. }
  92. else
  93. {
  94. echo &#092;"<a href=\"index.php?action=archiv&str=$zmienna\">$zmienna</a>\"; 
  95. }
  96.  
  97. }
  98.  
  99. if($_GET[&#092;"str\"]<$ile_str)
  100. {
  101. $zmienna3 = $_GET[&#092;"str\"]+1;
  102. echo &#092;"|<a href=\"index.php?action=archiv&str=$zmienna3\"> Następna </a>&nbsp;\"; 
  103. }
  104.  
  105. echo &#092;"</center>\";
  106.  
  107. }
  108. html_footer();
  109.  
  110. }
  111. ?>


Funkcja sort_form():
  1. <?
  2. function sort_form()
  3. {
  4. ?>
  5. <form method=\"post\" enctype=\"multipart/form-data\" action=\"<?php echo $PHP_SELF ?>\">
  6. <font style=\"font-family: Verdana; font-size: 10px; color: gray;\">Sortuj:
  7. &nbsp;<select name=\"sort\" size=\"1\" class=\"pollItem\">
  8. <option value=\"news_num DESC\">Domyślnie</option>
  9. <option value=\"news_num DESC\">Najnowsze</option>
  10. <option value=\"news_num\">Najstarsze</option>
  11. <option value=\"news_headline\">Alfabetycznie</option>
  12. </select>
  13. &nbsp;&nbsp;&nbsp;<input type=\"submit\" class=\"pollButton\" value=\"Sortuj!\" onmouseover=\"this.className='pollButton-over'\" onmouseout=\"this.className='pollButton'\">
  14. <br>
  15. <br>
  16. <?
  17. }
  18. ?>


Cos jest nie tak z sortowaniem. Otoz, gdy wybieram zeby mi posortowalo odpowiednie newsy alfabetycznie to (news_headline - to rekord z naglowekiem newsa) w ogole nie ma zadnej roznicy, a gdy wybiore aby mi posortowalo chronologicznie to sortuje, jednak nie do konca tak jakbym tego chcial. Tzn. przy wartościach zmiennych:
$_GET[str] = 1
$news_per_page = 6
zapytanie:
  1. <?
  2. $query = &#092;"SELECT news_num, news_headline, add_ndate FROM news ORDER BY \".$_POST[\"sort\"].\" LIMIT \".$_GET[\"str\"]*$news_per_page.\",\".$news_per_page;
  3. ?>

powinno wygladac tak:
  1. <?
  2. SELECT news_num, news_headline, add_ndate FROM news ORDER BY news_num LIMIT 6,6
  3. ?>

I pobrac posortowane od najstarszego do najnowszego 6 newsow, oprocz 6 najnowszych (jak wybiore zeby posortowalo odwrotnie to wszystko dziala). Jednak pobiera 6 newsow dobrze posortowanych, ale zaczynajac od 7 do 12 (razem mam 13 rekordow).

Dziekuje za pomoc.

PZdr
tiraeth
  1. SELECT news_num, news_headline, add_ndate
  2. FROM news WHERE news_num>$_GET["str"]*$news_per_page ORDER BY news_num LIMIT 0 ,$news_per_page


A o takim znaczku jak > (większe od...) nie pamiętałeś ? smile.gif
Majcok12
Cytat(Tiraeth @ 2005-01-24 20:14:51)
  1. SELECT news_num, news_headline, add_ndate
  2. FROM news WHERE news_num>$_GET["str"]*$news_per_page ORDER BY news_num LIMIT 0 ,$news_per_page


A o takim znaczku jak > (większe od...) nie pamiętałeś ? smile.gif

Jak zmienilem zapytanie tak jak to pokazales to wynik byl prawie identyczny z tym co wczesniej, jednak troche je zmienilem i juz wszystko dziala. Ale dzieki, bo bez zadnej pomocy raczej nie rozwiazalbym tego smile.gif.
Teraz to wyglada tak:
  1. <?
  2.  
  3. $cos = $news_per_page+1;
  4.  
  5. $query = &#092;"SELECT news_num, news_headline, add_ndate FROM news WHERE news_num<=\".$_GET[\"str\"]*$cos.\" ORDER BY \".$_POST[\"sort\"].\" LIMIT 0,\".$news_per_page;
  6.  
  7. ?>


Pzdr
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.