Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP][Zend] Dziwny problem przy pobieraniu danych z MySQL'a
Forum PHP.pl > Forum > Przedszkole
sweter
Witam,
od niedawna uczę się Zend Frameworka i już natrafiłem na problem:
przy pobieraniu danych z MySQL'a metodą fetchRow nie mogę wyświetlić wszystkich rekordów.
Np. przy
  1. $this->view->wydarzenie->tytul

wszystko jest OK, ale już
  1. $this->view->wydarzenie->tresc

nie wyświetla mi się nic sad.gif

Gdy zawartość $this->view->wydarzenie->tresc sprawdziłem if'em
  1. if($this->view->wydarzenie->tresc==""){
  2. $this->view->tytul_strony = "pusty";
  3. }else{
  4. $this->view->tytul_strony = "nie pusty";
  5. }

zmienna tytul_strony zawierała wartość "nie pusty".
Dodam, że w MySQL'u kolumna "tresc" jest typu "text".
zend
Kod w kontrolerze, będziesz wiedział jakie dane masz ustawione
  1. echo '<pre>';
  2. print_r($this -> view -> wydarzenie -> toArray());
  3. echo '</pre>';
sweter
@zend:
Teraz widzę, że mam jakąś wartość w "wydarzenie->tresc".
Są tylko 2 ale:
1. po wyświetleniu nie ma polskich znaków (MySQL mam ustawione na utf-8_general_ci, strona jest zakodowana w UTF-8, mój edytor zapisuje pliki również w UTF-8)
2. "tresc" nie wyświetla mi się gdy wywołuję
  1. $this->view->wydarzenie->tresc

sad.gif
zend
Wysyłaj nagłówki z kodowaniem w index'ie & ustaw kodowanie dla połączeń z bazą resources.db.params.charset = utf8 w konfiguracji application.ini
sweter
Utworzyłem plik i folder /configs/application.ini w ./application bo go wcześniej nie było i wpisałem tam "resources.db.params.charset = utf8" (bo o to chodziło, tak?).
Cytat
Wysyłaj nagłówki z kodowaniem w index'ie

Tego nie bardzo rozumiem. Zrobić to za pomocą header('Content-type: text/html;charset=utf-8') na samym początku kontrolera?
zend
Z której wersji zenda korzystasz? Jak inicjujesz aplikację w index.php? Przez Zend_Application czy wszystko ustawiasz sam? Jeśli sam to DODAJ ten kod do kodu inicjującego bazę
  1. Zend_Db::factory(array('options' => array('charset' => 'utf-8')));
sweter
Korzystam z wersji 1.10.4.

Nie używałem Zend_Application.

Index.php wygląda tak:
  1. <?php
  2. error_reporting(E_ALL|E_STRICT);
  3. date_default_timezone_set('Europe/London');
  4. set_include_path('.' . PATH_SEPARATOR . './library'
  5. . PATH_SEPARATOR . './application/models/'
  6. . PATH_SEPARATOR . get_include_path());
  7.  
  8. include "Zend/Loader.php";
  9. Zend_Loader::loadClass('Zend_Controller_Front');
  10. Zend_Loader::loadClass('Zend_Config_Ini');
  11. Zend_Loader::loadClass('Zend_Registry');
  12. Zend_Loader::loadClass('Zend_Db');
  13. Zend_Loader::loadClass('Zend_Db_Table');
  14.  
  15. // load configuration
  16. $config = new Zend_Config_Ini('./application/config.ini', 'general');
  17. $registry = Zend_Registry::getInstance();
  18. $registry->set('config', $config);
  19.  
  20. // setup database
  21. $db = Zend_Db::factory( $config->db->adapter, $config->db->config->toArray());
  22. Zend_Db_Table::setDefaultAdapter($db);
  23. Zend_Db::factory(array('options' => array('charset' => 'utf-8')));
  24.  
  25. // setup controller
  26. $frontController = Zend_Controller_Front::getInstance();
  27. $frontController->throwExceptions(true);
  28. $frontController->setControllerDirectory('./application/controllers');
  29.  
  30.  
  31. // run!
  32. $frontController->dispatch();


W 23. linijce dodałem Twój kod.
Niestety po dodaniu go strona nie uruchamia mi się sad.gif Wywala mi błąd:
Cytat
Fatal error: Uncaught exception 'Zend_Db_Exception' with message 'Adapter name must be specified in a string' in /var/www/qwerty/library/Zend/Db.php:234 Stack trace: #0 /var/www/qwerty/index.php(23): Zend_Db::factory(Array) #1 {main} thrown in /var/www/qwerty/library/Zend/Db.php on line 234


BTW:
Dzięki za takie zainteresowanie moim problemem smile.gif
zend
Wywal 23 linijkę. w sekcji general daj db.params.charset = utf8
sweter
[quote]
w sekcji general daj db.params.charset = utf8
[/qoute]
czyli w pliku ./application/confg.ini questionmark.gif

Zrobiłem tak jak kazałeś, niestety problem z polskimi znakami nie zniknął sad.gif

A mógłbyś poradzić mi coś na temat tego drugiego problemu, czyli nie wyświetlaniu się niektórych elementów obiektu?
kielich
CO do znaków to ja używam :

  1. resources.db.params.charset = "utf8"


I działa jak należy

CO do drugiego problemu podaj konkretny kod i co nie dział to Ci pomogę smile.gif
zend
Dodaj jeszcze
  1. $view = new Zend_View();
  2. $view -> setEncoding('UTF-8');
  3.  
  4. $r = new Zend_Controller_Action_Helper_ViewRenderer($view);
  5. Zend_Controller_Action_HelperBroker::addHelper($r);

Możesz jeszcze sprawdzić kodowanie index.php czy jest na utf-8 ustawione
sweter
Cytat
Dodaj jeszcze
  1. $view = new Zend_View();
  2. $view -> setEncoding('UTF-8');
  3.  
  4. $r = new Zend_Controller_Action_Helper_ViewRenderer($view);
  5. Zend_Controller_Action_HelperBroker::addHelper($r);

Sorry za trywialne pytanie, ale gdzie? W ./index.php ? Bo jak tak to wywala błąd, że "Class 'Zend_View' not found" sad.gif

A mój drugi problem polega na tym, że mając taki rozpoczęty konstruktor:
  1. $wydarzenia = new Wydarzenia();
  2. $wydarzenie = new Wydarzenie();
  3. $zdjecia = new Zdjecia();
  4. $kom_uzyt = new Kom_uzyt();
  5.  
  6. $id_wydarznia = $this->getRequest()->getParam('id');
  7.  
  8. $this->view->wydarzenie = $wydarzenie->fetchRow('id='.$id_wydarznia);

oraz taki fragment plik widoku:
  1. <?php echo $this->escape($this->wydarzenie->tresc);?>

nie wyświetla mi się pole "tresc", mimo że nie jest ono puste
Why?
zend
Pytanie faktycznie trywialne smile.gif A klase załadowałeś? Albo chociaż ustawiłeś autoloader? Jak nie to nie masz się co dziwić że nie działa smile.gif Nie musisz escapować bo z tego co pamiętam zend sam to robi. A co masz w tej treści? Kilka spacji czy jakieś zdanie?
sweter
Ech... problemy początkującego... Oczywiście, że nie załadowałem smile.gif
No, ale polskie znaki nadal się nie pokazują - jest ciągle � sad.gif

A co do tego drugiego: wystarczyło usunąć $this->escape() i jest git smile.gif
zend
Masz to ustawione w layoucie w sekcji head?
  1. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
sweter
Naturalnie
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.