Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> W adresie przekazanie numeru id
primo
post
Post #1





Grupa: Zarejestrowani
Postów: 254
Pomógł: 0
Dołączył: 30.12.2003
Skąd: Strzegom

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


Czy jest taka możliwość, abym ręcznie nie musiał określać przypisania do adresu ramka_glowna.php?op=2&id=1235 -- ale tak aby ten id byl tym id najwyższym w danej tabeli (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

napisałem taką funkcję:

  1. <?php
  2. require_once(&#092;"BD.class.php\");
  3.  
  4. $bd = new BD;
  5.  
  6.  
  7. function najwyzszy_id_w_tabeli()
  8. {
  9. global $bd;
  10.  
  11. if (!$bd->otworz()) {
  12.     die ($bd->blad());
  13. }
  14.  
  15.  
  16.  
  17. if(!$bd->zapytaj(&#092;"Select * from filmy order by id desc LIMIT 0,1;\")){
  18.  die ($db->error());
  19. }
  20.  
  21.  
  22. while($row = $bd->pobierzTablice())
  23. {
  24. return $row[0];
  25.  
  26. }
  27. }           
  28. ?>


później dopisuję to do adresu:

  1. <a href="ramka_glowna.php?op=2&nosnik_dvd=tak&id=<?php echo najwyzszy_id_w_tabeli();?>" target="mainFrame">NOWE FILMY DVD</a><br>


i wszystko jest ok, dopóki nie chcę tej samej funkcji wykorzystać w poniższym przypadku:

  1. <a href="ramka_glowna.php?op=3&nosnik_vhs=tak&id=<?php echo najwyzszy_id_w_tabeli();?>" target="mainFrame">NOWE FILMY VHS</a><br>


funkcja sczytuje najwyzszy ip z tabeli, ale nie bierze pod uwagę ze to co pasuje przy dvd nie pasuje przy vhs. Co powinienem poprawić funkcję (zapytanie) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)


////////////////////////////////////////////////////////////////////////////////////////////
Zaś sam sobie odpowiadam, jednakże problem nadal istnieje:

rozwiązałem to w ten sposób, że rozbudowałem zapytanie o warunek where:

  1. <?php
  2. if(!$bd->zapytaj(&#092;"Select * from filmy where nosnik_dvd ='\".$nosnik_dvd.\"' order by id desc LIMIT 0,1;\")){
  3.  die ($db->error());
  4. }
  5. ?>


i nazwałem tą funkcję najwyzszy_id_w_tabeli_dvd. Stworzyłem identyczną drugą funkcję różniącą się tylko warunkim vhs, a do adresów przypisałem dwie różniące się funkcję:

  1. <a href="ramka_glowna.php?op=2&nosnik_dvd=tak&id=<?php echo najwyzszy_id_w_tabeli_dvd();?>" target="mainFrame">NOWE FILMY DVD</a><br>
  2. <a href="ramka_glowna.php?op=3&nosnik_vhs=tak&id=<?php echo najwyzszy_id_w_tabeli_vhs();?>" target="mainFrame">NOWE FILMY VHS</a><br>



Pewnie każdy odrobinę doświadczony mi powie, że jest to złe rozwiązanie, ale co człek poradzi. Taki pomysł mi wpadł do głowy. Nie wiem czy jest sens pisania klasy dla czegoś takiego, jak Wy to widzicie (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

Ten post edytował primo 17.12.2004, 00:32:08
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
DaNTe
post
Post #2





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 7.01.2004
Skąd: Katowice

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


Hmm nie bardzo rozumiem sens tego:
nosnik_dvd ='".$nosnik_dvd."

Moze ladniej bedzie (pomijam oczywisce fragmenty kodu):

  1. <?php
  2.  
  3. function najwyzszy_id($filtr = null)
  4. {
  5.    // db connect itp
  6.    switch($filtr)
  7.    {
  8.       case 'dvd':
  9.        $qadd='where nosnik_dvd='tak' ';
  10.        break;
  11.       case 'vhs':
  12.        $qadd='where nosnik_vhs='tak' ';
  13.        break;
  14.    }
  15.    $db->zapytaj(&#092;"SELECT max(id) FROM FILMY $qadd\");
  16.    if($row=$db->get())
  17.      return $row[0]
  18.    return 0;
  19. }
  20.  
  21. ?>


Wtedy masz najwyzszy_id() lub najwyzszy_id('dvd') lub najwyzszy_id('vhs')

Ten post edytował DaNTe 17.12.2004, 11:57:26
Go to the top of the page
+Quote Post
primo
post
Post #3





Grupa: Zarejestrowani
Postów: 254
Pomógł: 0
Dołączył: 30.12.2003
Skąd: Strzegom

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


no to rozwiązanie pomogło, ale urodziło się zaś coś nowego. Już dwa dni z tym walcze:

istota problemu ta sama, ale trudniejsza... Mianowicie, wyciągam z bazy dane na temat ilości pozycji danego gatunku i umieszczam na stronie po 5 wyników. To jest łatwe, ale teraz chcę aby jak w powyższym rozwiązaniu wczytywało mi wynik najwyższego id z danego przedziału: a wiec jak podzieli wyniki na 5 to niech wczytuje automatycznie id=5 itd.
W momencie kiedy dodam do poniższych adresów warunek ze id=moja_funkcja to wczytuje na kazdej podstronie najwyzszy id ogolnie, a nie z danego przedzilu (piątki).

przykład znajduje się tutaj: przykład

Wskazany powyżej link: Menu Nowości - działa poprawinie natomiast Menu - Filmy na dvd - tu jest problem - gatunek komedia.

  1. <?php
  2. $_ARTICLES['order'] = DESC;
  3. $_ARTICLES['optional_links'] = TRUE;
  4. $_ARTICLES['max_words'] = 10;
  5. $_ARTICLES['max_articles'] = 5;
  6.  
  7. $gatunek = $_GET[&#092;"gatunek\"];
  8. $nosnik_dvd = $_GET[&#092;"nosnik_dvd\"];
  9.  
  10. $page = ( IsSet($_GET['page']) ) ? $_GET['page'] : 0;
  11. $sort = ( IsSet($_GET['order']) ) ? $_GET['order'] :
  12.  $_ARTICLES['order']; 
  13.  
  14. $from = ( $page * $_ARTICLES['max_articles'] );
  15.  
  16. if (!$bd->zapytaj(&#092;"SELECT * FROM filmy WHERE gatunek = '\".$gatunek.\"' AND nosnik_dvd = '\".$nosnik_dvd.\"' ORDER BY id \" . $sort . \"
  17.  LIMIT &#092;" . $from .\", \" . $_ARTICLES['max_articles'])) {
  18. die ($db->error());
  19. }
  20.  
  21.  if (!$bd->zapytaj(&#092;"SELECT COUNT(*) FROM filmy WHERE gatunek = '\".$gatunek.\"' AND nosnik_dvd = '\".$nosnik_dvd.\"'\")) {
  22. die ($db->error());
  23. }
  24.  
  25. list($articles) = $bd->pobierzTablice();
  26.  
  27. $all_pages = ( round($articles / $_ARTICLES['max_articles']) - 1 );
  28.  
  29.  $page_prev = ( $page - 1 );
  30. if ( !($page_prev < 0) && $_ARTICLES['optional_links'] == TRUE ) 
  31. { 
  32. echo '<A HREF=\"index.php?op=4&gatunek=komedia&nosnik_dvd=tak&page=' . $page_prev . '&order=' . $sort . '\">'. '<< Poprzednia strona</A> [ ';
  33. } 
  34. else
  35. { 
  36. echo 'Linkownia [ ';
  37. } 
  38.  
  39. for ( $i = 0, $t = 1, $tt = 1; $i <= $all_pages; $i++, $t++, $tt++ ) 
  40. { 
  41. $spacer = $i == $all_pages ? ' ' : ' | '; 
  42. if ( $i == 0 ) 
  43. { 
  44.  $t = 'Pierwsza'; 
  45. } 
  46. else if ( $i == $all_pages ) 
  47. { 
  48.  $t = 'Ostatnia'; 
  49. } 
  50. else
  51. { 
  52.  $t = $tt; 
  53. } 
  54.  
  55. if ( $i == $page ) 
  56. { 
  57. echo $t . $spacer; 
  58. } 
  59. else 
  60. { 
  61. echo '<A HREF=\"index.php?op=4&gatunek=komedia&nosnik_dvd=tak&page=' . $i . '&order=' . $sort . '\">'. $t . '</A>' . $spacer;
  62. } 
  63. } 
  64. $page_next = ( $page + 1 ); 
  65. if ( !($page_next > $all_pages) && $_ARTICLES['optional_links'] ==
  66.  TRUE ) 
  67. { 
  68. echo '] <A HREF=\"index.php?op=4&gatunek=komedia&nosnik_dvd=tak&page=' . $page_next . '&order=' .$sort . '&id=\">'. 'Następna strona >></A>';
  69. } 
  70. else 
  71. { 
  72. echo ']'; 
  73. }
  74. ?>



oczywiści konstrukcę switch rozbudowałem o warunek:

  1. <?php
  2. case 'komedia':
  3. $qadd='where gatunek='komedia' ';
  4. break;
  5. ?>



proszę o podpowiedź

Ten post edytował primo 21.12.2004, 12:43:03
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 22:58