Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SMATY][SQL] Wyświetanie tabeli bez kilku wierszy, Czyli mam kod html w php a chce miec PHP + smarty
PawelW
post 7.04.2007, 18:01:33
Post #1





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 27.02.2007
Skąd: Kraków

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


Witam.

Mam taką funkcje która wyświetla mi zawartośc tabeli z bazy (ma dwa powiązania relacyjne do innych tablel).
  1. <?php
  2. function show_db($crystal = '%')
  3. {
  4. require_once 'smarty/Smarty.class.php'; // Dołączenie smarty
  5.  $smarty = new Smarty;
  6.  
  7. $zapytanie='SELECT * FROM properties, groups ,symetry WHERE crystal LIKE ''.$crystal.'
  8. AND properties.group_id=groups.group_id AND properties.symetry_id=symetry.symetr
    y_id'
    ;
  9.  
  10.  $lacz = connect_db_read(); // łączenie z baz danych tylko do odczytu
  11.  $wynik_zapytania = $lacz->query($zapytanie); // Wynik zapytania zadanego bazie
  12.  
  13.  if ($wynik_zapytania->num_rows)
  14.  { 
  15. echo '<div><table id="zaw_bazy" class="zawartosc_bazy">';
  16. echo '<tr><th>ID</th><th>Group</th><th>Crystal</th><th>Index</th><th>Symetry</th><th>Space group</th><th>Q1</th>
  17. <th>Q2</th><th>q3</th><th>Frequency</th><th>Czynności</th></tr>';
  18.  
  19. while ($parametry = $wynik_zapytania->fetch_assoc())
  20. {
  21.  // $tablicadb = array();
  22.  
  23.  // Dostp do poszczegnych parametrów poprzez odwołanie do tablicy $parametry['nazwa kolumny w bazie']
  24. $id = stripslashes($parametry['id']);
  25. $gr_id = stripslashes($parametry['group_id']);
  26. $gr_name = stripslashes($parametry['gr_name']);
  27. $crystal = stripslashes($parametry['crystal']);
  28. $spot = stripslashes($parametry['spot']);
  29. $sym_id = stripslashes($parametry['symetry_id']);
  30. $sym_name = stripslashes($parametry['sym_name']);
  31. $space_group = stripslashes($parametry['space_group']);
  32. $q1 = stripslashes($parametry['q1']);
  33. $q2 = stripslashes($parametry['q2']);
  34. $q3 = stripslashes($parametry['q3']);
  35. $frequency = stripslashes($parametry['frequency']);
  36.  
  37. // $temp[] = array ($id,$crystal,$spot,$sym_name,$space_group,$q1,$q2,$q3,$frequency,$gr_name) ;
  38. // $tablicadb = $temp;
  39.  
  40. // $smarty -> assign('baza', $tablicadb);
  41. // $smarty -> display('show_db.htpl');
  42.  
  43.  
  44. // Wywietlanie tabeli parametrw - rozmiar i inne wlasnoci DIV s w CSS
  45. <tr>
  46. <td>'.$id.'</td>
  47. <td>'.$gr_name.'</td>
  48. <td>'.$crystal.'</td>
  49. <td>'.$spot.'</td>
  50. <td>'.$sym_name.'</td>
  51. <td>'.$space_group.'</td>
  52. <td>'.$q1.'</td>
  53. <td>'.$q2.'</td>
  54. <td>'.$q3.'</td>
  55. <td>'.$frequency.'</td>
  56. <td> <a href="operate_db.php?edit='.$id.'">[Edytuj]</a>&nbsp;&nbsp;
  57. <a href="operate_db.php?delete='.$id.'">[Usuń]</a></td>
  58.  
  59. </tr>
  60. ';
  61.  }
  62.  
  63.  echo '</table></div>';
  64.  echo '<p><a href="operate_db.php?create=1"> Dodaj nowy rekord </a> </p>'; //dodać tutaj przekazanie grupy
  65.  }
  66. }
  67. ?>

Stosunkowo prostą iteracją wyświetla się wszystko co trzeba ( z pominięciem kulku kolumn takich jak gr_id sym_id bo potrzebne mi są tylko nazwy które są pozyskiwane z innych tabel przez relacje)

Teraz zasadnicze pytanie jak to przekonwertować aby zastosować smarty?
Wierszy w tej tabeli będzie ok 30.

1. Próbowałem przekazać do smarty bezpośredio wynik ale otrzymuje jeden (ostatni) wiersz ze wszystkimi kolumnami.

2. Próbowałem też tworzyć tablicę dwuwymiarową której indeksem jest numer iteracji a wartością tablica wyników.
W smarty zastosowałem Foreach które w zczytywało wartości poszczególnych iteracji i przekazywało do {html_table}. Otrzymałem po jednej osobnej tabeli dla każdego wpisu.

3. Zastanawiałem się też nad wpisaniem do smarty ręcznie tabeli i podstawianiem zmiennych. Ale co z iteracją? Trzeba by tu chyba zastosować modyfikacje drugiego rozwiązania.

Proszę o podpwiedź jak najlepiej to zrobić?

Ten post edytował PawelW 7.04.2007, 18:02:42
Go to the top of the page
+Quote Post
Cienki1980
post 7.04.2007, 18:33:26
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


Pokaże Ci to na prostym szablonie ( nie będę pisał przecież gotowca )

  1. <?php
  2. //zakladam ze mam zapytanie do bazy i otrzymuje jakies wiersze
  3. $i=0;
  4. while($row=mysql_fetch_array($zapytanie))
  5. {
  6.  $tablica[$i]=$row;
  7.  //nie robie tutaj stripslashes .. w Twoim przypadku powinno być to tak:
  8.  //$tablica[$i]['pole1']=stripslashes($row['pole1']);
  9. }
  10.  
  11. //deklaracja smartego
  12. $smarty=new Smarty();
  13.  
  14. $smarty->assign('tablica',$tablica);
  15. $smarty->display('plik.tpl');
  16. ?>


i plik.tpl
  1. <tr>
  2. <th>nagl1</th>
  3. </tr>
  4. {section loop=$tablica name=idx}
  5. <tr><td>{$tablica[idx].pole1}</td></tr>
  6. {/section}


--------------------
404
Go to the top of the page
+Quote Post
PawelW
post 7.04.2007, 19:12:07
Post #3





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 27.02.2007
Skąd: Kraków

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


Dzięki poradziłem sobie bazując na tym kodzie :-)

Jeszcze powiedz mi jak to jest z tym stripslashes. W książce "PHP i MySQL Tworzenie stron WWW" jest napisane, że wszystki dane powinny być dodawane do bazy z addslashes() i odczytywane ze stripshlases() ze wzdlędu bezpieczeństwa i możliwość wystąpienia znaków specjalnych.

Więc czy takie pominięcie tego mechanizmu jest sensowne (zakładając że na serwerze jest wyłączone magicqotes)?
Go to the top of the page
+Quote Post
Cienki1980
post 7.04.2007, 19:41:01
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

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


Co do bezpieczeństwa to poczytaj sobie ten wątek

Ja z założenia korzystam z addslashes i stripslashes od czasu jak pisałem portal dla firmy z Hiszpanii a tam często w nazwach pojawia się apostrof ... i podczas dodawania do bazy psuł mi dość dużo.


--------------------
404
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: 25.07.2025 - 07:56