Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SMATY][SQL] Wyświetanie tabeli bez kilku wierszy
Forum PHP.pl > Forum > Przedszkole
PawelW
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ć?
Cienki1980
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}
PawelW
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)?
Cienki1980
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.
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.