Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Kohana, ORM, zapis znaków specjalnych
Forum PHP.pl > Forum > Przedszkole
in5ane
Cześć. Jak w Kohana 3.3 zapisywać poprzez ORM znaki specjalne, jak:
Kod
" ' . - _ ,


Wszystkie te znaki mi wywala i treść po nich.
Damonsson
Musiałeś sam coś dopisać, żeby je wywalało, domyślnie nie ma takiego problemu.
in5ane
Tak wygląda moja metoda:
  1. public function action_settings()
  2. {
  3. $user = Auth::instance()->get_user();
  4.  
  5. if ($_POST)
  6. {
  7. $password = $this->request->post('password');
  8. $password_c = $this->request->post('password_c');
  9. $email = $this->request->post('email');
  10. $company_telephone = $this->request->post('company_telephone');
  11.  
  12. if (!empty($password) && !empty($password_c))
  13. {
  14. if ($password != $password_c)
  15. {
  16. $errors[] = 'Wpisane hasłą różnią się.';
  17. }
  18. }
  19.  
  20. if (empty($email))
  21. {
  22. $errors[] = 'E-mail nie może być pusty.';
  23. }
  24. elseif (!filter_var($email, FILTER_VALIDATE_EMAIL))
  25. {
  26. $errors[] = 'Podany adres e-mail nie jest poprawny.';
  27. }
  28.  
  29. if (empty($company_telephone))
  30. {
  31. $errors[] = 'Telefon nie może być pusty.';
  32. }
  33.  
  34. if (empty($errors))
  35. {
  36. $editUser = ORM::factory('User')->where('id', '=', $user->id)->find();
  37. if (!empty($password) && !empty($password_c))
  38. {
  39. $editUser->password = $password;
  40. }
  41.  
  42. $editUser->email = $email;
  43. $editUser->company_short_name = $this->request->post('company_short_name');
  44. $editUser->company_name = $this->request->post('company_name');
  45. $editUser->company_address = $this->request->post('company_address');
  46. $editUser->company_postcode = $this->request->post('company_postcode');
  47. $editUser->company_city = $this->request->post('company_city');
  48. $editUser->company_nip = $this->request->post('company_nip');
  49. $editUser->company_telephone = $company_telephone;
  50. $editUser->company_fax = $this->request->post('company_fax');
  51. $editUser->save();
  52.  
  53. Flash::success('Dane poprawnie zaktualizowano.');
  54. Request::current()->redirect('account/settings');
  55. }
  56. else
  57. {
  58. foreach ($errors as $error)
  59. {
  60. Flash::warning($error);
  61. }
  62.  
  63. Request::current()->redirect('account/settings');
  64. }
  65. }
  66.  
  67. $this->render();
  68. }
Damonsson
Tu jest ok, może w Model_User?
in5ane
W sumie to nie mam Model_User klasycznego, to jest ten Kohanowy.
phpion
W modelu User nie masz przypadkiem ustawionych żadnych filtrów, które powodowałyby takie zamieszanie?

Jeszcze możesz sobie sprawdzić to w taki sposób (przykład dla jednego pola):
  1. $editUser->company_fax = $this->request->post('company_fax');
  2. var_dump($this->request->post('company_fax'));
  3. var_dump($editUser->company_fax);
  4. $editUser->save();
  5. var_dump($editUser->company_fax);

Jako company_fax podstaw to pole, w którym ucina Ci wartość.

PS: Dlaczego nie korzystasz z kohanowej walidacji tylko wszystkie "regułki" klepiesz z palca w postaci if'ów?
in5ane
Zwraca poprawnie:
Kod
string(10) "asd "test""
string(10) "asd "test""
string(10) "asd "test""
phpion
No to w takim razie gdzie Ci ucina? smile.gif Z formularza przychodzą poprawne dane, przed zapisem są poprawne, po zapisie też. Jeszcze dla pewności możesz zrobić ->reload() po zapisie i dopiero wówczas zrobić ostatniego var_dumpa.
in5ane
Kurcze, dalej poprawnie:
Kod
string(10) "asd "test""
string(10) "asd "test""
string(10) "asd "test""
string(10) "asd "test""


@edit: w bazie jest poprawnie zapisane, teraz tak patrzę. Czyżby coś z odczytem?
phpion
No to pokaż jak to wyświetlasz bo (jak sam napisałeś) zapis przebiega prawidłowo.
in5ane
Dziwne, bo coś takiego:
  1. <?=$user->company_fax?>
wyświetla poprawnie asd "test". Zaś coś takiego:
  1. <input type="text" name="company_fax" value="<?=$user->company_fax?>" />
wyświetla tylko asd.
phpion
:| no bo zobacz co masz w źródle strony! Ucina Ci po pierwszym " bo traktuje to jako zamykanie atrybutu value. Korzystaj z helperów (Form::input) a unikniesz tego typu wpadek.
in5ane
Boże, rzeczywiście. Jaki umysł dziś niechłonny. Dzięki.
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.