Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ZF]Zapis do bazy -> ucina po polskim znaku
IceManSpy
post
Post #1





Grupa: Zarejestrowani
Postów: 1 006
Pomógł: 111
Dołączył: 23.07.2010
Skąd: Kraków

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


Mam problem z wrzucaniem danych do bazy. Jeśli ręcznie wrzucę do bazy polskie znaki, to działa bardzo dobrze. Jednak, jeśli chcę wrzucić przez formularz to przy wystąpieniu polskiego znaku reszta jest ucinana.
Moja funkcja w modelu na dodawanie:
  1. public function AddArticle($title, $article){
  2. $row = $this->createRow();
  3. if($row) {
  4. $row->title = $title;
  5. $row->article = $article;
  6. $row->date = date("Y-m-d");
  7. $row->save();
  8. return true;
  9. } else {
  10. throw new Zend_Exception('Nie można utworzyć artykułu. Błąd bazy danych!');
  11. }
  12. }

Kontroler:
  1. public function addAction()
  2. {
  3. $add_article = new Admin_Form_AddArticle();
  4. if($this->_request->isPost() && $add_article->isValid($_POST)) {
  5. $article_model = new Admin_Model_Article();
  6. $title = $add_article->getValue('title');
  7. $article = $add_article->getValue('article');
  8.  
  9. try{
  10. $add = $article_model->AddArticle($title,$article);
  11. }
  12. catch(Exception $ex) {
  13. $this->view->exception = "Błąd dodawania artykułu do bazy danych";
  14. }
  15.  
  16. if($add) {
  17. return $this->_redirect('/admin/article');
  18. }
  19. }
  20. if($add_article->isErrors()) {
  21. $add_article->populate($_POST);
  22. }
  23. $this->view->form = $add_article;
  24. }

Kod formularza chyba nie jest potrzebny?
A w pliku application.ini mam:
Kod
resources.db.adapter = "pdo_mysql"
resources.db.params.host = "localhost"
resources.db.params.username = "root"
resources.db.params.password = "haselko"
resources.db.params.dbname = "zendblog"
resources.db.params.charset = "utf8"
resources.db.isDefaultTableAdapter = true

Próbowałem nawet tak:
  1. public function AddArticle($title, $article){
  2. $db = $this->getDefaultAdapter(); // TUTAJ DOPISEK
  3. $db->query("SET NAMES 'utf8'"); // TUTAJ DOPISEK
  4. $db->query ("SET CHARACTER SET 'utf8'"); // TUTAJ DOPISEK
  5. $row = $this->createRow();
  6. if($row) {
  7. $row->title = $title;
  8. $row->article = $article;
  9. $row->date = date("Y-m-d");
  10. $row->save();
  11. return true;
  12. } else {
  13. throw new Zend_Exception('Nie można utworzyć artykułu. Błąd bazy danych!');
  14. }
  15. }
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
quality
post
Post #2





Grupa: Zarejestrowani
Postów: 172
Pomógł: 9
Dołączył: 13.02.2006
Skąd: Warszawa

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


Sprawdz czy baza jest kodowana w utf8_general_ci + dodatkow w application.ini: resources.db.params.driver_options.1002 = "SET NAMES UTF8;"
Go to the top of the page
+Quote Post
IceManSpy
post
Post #3





Grupa: Zarejestrowani
Postów: 1 006
Pomógł: 111
Dołączył: 23.07.2010
Skąd: Kraków

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


Baza ma kodowanie UTF8_genreal_ci, a chociaż to dopiszę do appliacation.ini to i tak ucina.
Go to the top of the page
+Quote Post
Pilsener
post
Post #4





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


1. Sprawdź w jakim kodowaniu leci string do bazy: http://www.php.net/manual/pl/function.mb-detect-encoding.php i wyechuj zapytanie.
2. Przy prostych insertach nie musisz pisać własnej metody, wystarczy z poziomu kontrolera wywołać zwykły insert i wrzucić tablicę jako parametr.
Go to the top of the page
+Quote Post
IceManSpy
post
Post #5





Grupa: Zarejestrowani
Postów: 1 006
Pomógł: 111
Dołączył: 23.07.2010
Skąd: Kraków

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


Cytat(Pilsener @ 10.06.2011, 20:20:10 ) *
1. Sprawdź w jakim kodowaniu leci string do bazy: http://www.php.net/manual/pl/function.mb-detect-encoding.php i wyechuj zapytanie.

Niestety nie wiem jak to zrobić. Dopiero zaczynam Zenda (IMG:style_emoticons/default/sad.gif) Jednak jak wpisałem w widoku "echo mb_detect_encoding($str);" to pokazało mi się ASCII. Tylko czemu takie, skoro plik zapisany jest w UTF8 i w headzie jest charset ustawione na UTF8.
Cytat(Pilsener @ 10.06.2011, 20:20:10 ) *
2. Przy prostych insertach nie musisz pisać własnej metody, wystarczy z poziomu kontrolera wywołać zwykły insert i wrzucić tablicę jako parametr.

Chcę się nauczyć pracować na modelach (IMG:style_emoticons/default/wink.gif) Zmieniłem nawet na taki zapis:
  1. public function AddArticle($title, $article){
  2. $date = date("Y-m-d");
  3. $data = array(
  4. 'title' => $title,
  5. 'article' => $article,
  6. 'date' => $date
  7. );
  8.  
  9. $this->insert($data);
  10. return true;
  11. }

Nic to nie dało (IMG:style_emoticons/default/sad.gif)


== MAŁA EDYCIA==
Znalazłem takie coś:
http://www.peacocksuit.com/blog/2008/09/02...ies-to-firebug/
I tam w FireBugu pokazuje zapytania. Więc odpaliłem dodawanie tego i patrzę:
Cytat
connect NULL
SET NAMES 'utf8' NULL
SET CHARACTER SET 'utf8' NULL
DESCRIBE `article` NULL
INSERT INTO `article` (`title`, `article`, `date`) VALUES (?, ?, ?) array('1'=>'hgjgjghj', '2'=> NULL, '3'=> ... )

2 parametr jest pusty po wpisaniu polskiego znaku! Chociaż dodało się tylko to, co było przed polskim znakiem.

Ten post edytował IceManSpy 10.06.2011, 22:03:01
Go to the top of the page
+Quote Post
widmogrod
post
Post #6





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 28.10.2005
Skąd: kraków

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


1. jakie masz kodowanie ustawione w dokumencie html?
- jeżeli jest to ISO-8859-2 (lub inner != utf8) to może spróbuj iconv

  1. $article = iconv('ISO-8859-2','UTF-8//TRANSLIT', $article);
  2. // lub
  3. $article = iconv('','UTF-8//TRANSLIT', $article);


2. jeżeli to nie pomoże to jaką masz konfigurację?
- jaki system operacyjny
- jaka wersja PHP
- jaka wersja BD
- jaka wersja Zend
- czy korzystasz z xamp'a.. lub innego gotowca L(W)AMP

EDIT:
3. Czy kodowanie bazy jest takie samo jak kodowanie tabeli? Czy masz może włączone na bazie porównywanie znaków

4. resources.db.params.charset = "utf8" - ... spróbuj za komentować ten fragment (IMG:style_emoticons/default/smile.gif)

P.S. czy masz włączony cache?

Ten post edytował widmogrod 10.06.2011, 23:04:30
Go to the top of the page
+Quote Post
IceManSpy
post
Post #7





Grupa: Zarejestrowani
Postów: 1 006
Pomógł: 111
Dołączył: 23.07.2010
Skąd: Kraków

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


1. Plik zapisany jako UTF8, a w layoutcie jest:
  1. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

2. Win 7 64 bit, PHP Version 5.3.5, DB 5.5.8, Zend 1.11.4, korzystam z XAMPPa

3. Kodowanie w bazie jest ustawione na utf8 -- UTF-8 Unicode -> collaction: utf8_general_ci.

4. Jak usunę z application.ini , dodam "artykuł" to przy listowaniu wychodzą znaki zapytania ?, czyli coś z kodowaniem, ale nie ucina po polskim znaku! Jak tak wrzucone dane zapiszę do bazy, przywrócę tą linijkę w application.ini, to przy odczycie wyskakują krzaki: ?. Ale w FireBugu nadal pokazuje NULLa przy dodawaniu artykułu po usunięciu resources.

Cahce wyłączony.

== SUPER EDYCIA (IMG:style_emoticons/default/smile.gif) ==
Stworzyłem nowy projekt. Taki pure zend (IMG:style_emoticons/default/biggrin.gif) Też nie działało. W końcu się wkurzyłem i zacząłem bawić się formularzem. Przyczyną takiego zachowania był filtr: Zend_Filter_StringToLower. Jak jego za komentuję to wszystko pięknie działa (IMG:style_emoticons/default/smile.gif)

Ten post edytował IceManSpy 11.06.2011, 11:59:34
Go to the top of the page
+Quote Post
drPayton
post
Post #8





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

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


A może:
http://www.zfforums.com/zend-framework-com...cents-1237.html
Go to the top of the page
+Quote Post
IceManSpy
post
Post #9





Grupa: Zarejestrowani
Postów: 1 006
Pomógł: 111
Dołączył: 23.07.2010
Skąd: Kraków

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


Już to rozwiązałem:
Przyczyną takiego zachowania był filtr: Zend_Filter_StringToLower. Jak jego za komentuję to wszystko pięknie działa (IMG:style_emoticons/default/smile.gif)

Ten post edytował IceManSpy 11.06.2011, 11:59:26
Go to the top of the page
+Quote Post
drPayton
post
Post #10





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

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


Super, ale nie musisz powtarzać dwa razy (IMG:style_emoticons/default/wink.gif)

Zajrzyj pod link, który podałem...

Wyłączenie filtra to żadne rozwiązanie problemu...

Ten post edytował drPayton 11.06.2011, 12:10:25
Go to the top of the page
+Quote Post
tr!ckle
post
Post #11





Grupa: Zarejestrowani
Postów: 21
Pomógł: 2
Dołączył: 12.05.2009

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


Jeśli chcesz skorzystać z tego filtra (tj zamienić inputy na małe litery), to możesz napisać własny filtr, albo ręcznie po przechwyceniu inputów zamienić. Ja przy polskich znakach korzystam z funkcji mb_convert_case()

Przykładowe użycie:
Kod
mb_convert_case($string, MB_CASE_LOWER, "UTF-8")


Sprobuj. Powinna zadziałać

Go to the top of the page
+Quote Post
IceManSpy
post
Post #12





Grupa: Zarejestrowani
Postów: 1 006
Pomógł: 111
Dołączył: 23.07.2010
Skąd: Kraków

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


Cytat(drPayton @ 11.06.2011, 13:09:25 ) *
Super, ale nie musisz powtarzać dwa razy (IMG:style_emoticons/default/wink.gif)
Zajrzyj pod link, który podałem...
Wyłączenie filtra to żadne rozwiązanie problemu...

Myślałem, że przeczytałeś kawałek postu i zacząłeś odpisywać (IMG:style_emoticons/default/smile.gif) Podane przez Ciebie rozwiązanie nie działa. Ten filtr akurat używam tylko testowo, ale jak to się mówi: "człowiek uczy się na błędach" (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
drPayton
post
Post #13





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

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


Heh, ok (IMG:style_emoticons/default/wink.gif)

Tak czy siak - wyłączenie filtru to nie rozwiązanie, a poddanie się bez walki (IMG:style_emoticons/default/wink.gif)

Filtr korzysta z zestawu funkcji mb_* o ile istnieją, jeśli nie - ze "zwykłych". Czy na serwerze na którym występuje ten problem, włączony jest mb_string?
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: 25.12.2025 - 13:37