Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: php i MySQL a typy int oraz string (bardziej php)
Forum PHP.pl > Forum > PHP
Aztech
Czy możliwym jest, aby pole pobrane z bazy (gdzie jest typu mediumint) stało by się podczas zapisywnia do zmiennej "jakimś magicznym sposobem" stringiem?
Pytam się, bo zgłupiałem, gdyż wywala mi błąd, że zmienna nie jest typu INT!

a teraz kod
z pliku głównego
  1. <?php
  2. #utwórz użytkownika
  3. $luser = new LoginUser($_SESSION["username"]);
  4. $luser->createNewUserSQL($_SESSION,$_POST);
  5.  
  6. ?>

z klasy LoginUser, która dziedziczy po User
  1. <?php
  2.  
  3. public function createNewUserSQL($session, $post)
  4. {
  5. #zapisz dane o użytkowniku
  6. $this->setUsername($session["username"]);
  7. /*wyciąłem instrukcje przypisywania
  8. pole user_id nie jest zmieniane*/
  9. #generuj kod aktywacji
  10. $this->generateActivationCode();
  11. #oblicz datę do kiedy kod aktywacyjny jest ważny
  12. $expire_date = date ("Y-m-d", mktime (0,0,0,date("m"), date("d") + ACTIVATION_CODE_VALID_PERIOD,date("Y"))); #ustaw datę ważności kodu aktywacyjnego
  13. $this->setActivationCodeExpirationDate($expire_date);
  14. #ustaw konto jako aktywne @todo: napisać aktywację konta
  15. $this->activate();
  16. #stwórz użytkownika
  17. $this->createSQL();
  18. /* został utworzony użytkownik, nie zostało mu przypisane id, a pole user_id jest
     auto_increment, więc należy je odczytać, co też poniżej jest czynione */
  19. #odczytaj zapisane dane = uaktualnij dane o ID użytkownika
  20. $this->readDataFromSqlByEmail($this->getEmail());
  21. #stwórz użytkownika w tabeli uzytkowników jako zwykłego usera
  22. $groupuser = new GroupUser(REGISTERED_USER,$this->getUserID());
  23. #stwórz wpis o użytkowniku w bazie
  24. $groupuser->createSQL();
  25. }
  26.  
  27. ?>


readDataFromSqlByEmail() wywołuje w sobie między innymi taką funkcję
  1. <?php
  2.  
  3. /**
  4.    * Wczytaj użytkownika z wyników zapytania SQL
  5.    *
  6.    * @param array $table tabela z danymi uzytkonika
  7.    * @access public
  8.    */
  9. public function setFromSQL($table){
  10. #ustaw dane użytkownika poprzez odczyt danych z talicy wyników
  11. #zwróconej przez zapytanie do bazy danych
  12. $this->setUserID($table["user_id"]);
  13. $this->setEmail($table["email"]);
  14. $this->setGG($table["gg"]);
  15. /* i tak dalej i tak dalej....*/
  16. } 
  17.  
  18. ?>


Konstruktor GroupUser
  1. <?php
  2.  
  3. /**
  4.  * Konstruktor
  5.  *
  6.  * @param array $rbx_db
  7.  * @param integer $guidorgid
  8.  * @param ingeter $user_id
  9.  * @access public
  10.  */
  11. public function __construct($guidorgid, $user_id=NULL){
  12.  
  13. #inicjacja połaczenia PDO poprzez wyłołanie konstruktora rodzica
  14. parent::__construct();
  15.  
  16. #ustaw wartości domyślne
  17. $this->setDefault();
  18.  
  19. #zlicz ilość argumentów wejściowych
  20. $arg = func_num_args();
  21.  
  22. #parsuj argumenty wejściowe
  23. if (isset($guidorgid) && ($arg==|| $arg==2)) {  
  24. if (is_int($guidorgid)) {
  25. #konstruktor dla obiektu pobierającego dane z bazy  
  26. if ($arg == 1) {
  27. $this->id = $guidorgid;
  28. }
  29. #konstruktor tworzący ($arg==2)
  30. elseif (is_int($user_id)){ /* <- OKAZUJE SI ŻE TO NIE JEST INT!?!?*/
  31. $this->user_id = $user_id;
  32. $this->group_id = $guidorgid;
  33. }
  34. else throw new CreateObjectException(INCORRECT_VALUE);
  35. }
  36. else throw new CreateObjectException(INCORRECT_ARGUMENT_TYPE);
  37. }
  38. else throw new CreateObjectException(INCORRECT_ARGUMENTS_NUMBER);
  39. }
  40.  
  41. ?>

getUserID() wygląda tak
  1. <?php
  2.  
  3. /**
  4.    * Zwraca identyfiaktor użytkownika
  5.    *
  6.    * @return int identyfikator użytkowika
  7.    * @access public
  8.    */
  9. public function getUserID(){
  10. return $this->user_id;
  11. }
  12.  
  13. ?>


Mi już ręce opadają, nie mam zielonego pojęcia dlaczego się tak dzieje!

Zmieniłem getUserId() w ten sposób, działać działą, ale nie zmienia to faktu, że i bez tego powinno mi zwrócić INT!
  1. <?php
  2.  
  3. /**
  4.    * Zwraca identyfiaktor użytkownika
  5.    *
  6.    * @return int identyfikator użytkowika
  7.    * @access public
  8.    */
  9. public function getUserID(){
  10. return intval($this->user_id);
  11. }
  12.  
  13. ?>
nospor
Cytat
Czy możliwym jest, aby pole pobrane z bazy (gdzie jest typu mediumint) stało by 
się podczas zapisywnia do zmiennej "jakimś magicznym sposobem" stringiem?
Z php5 ma to malo wspolnego. przenosze.
A czy jest mozliwe? tak. liczby pobrane z mysql zwracane są jako string smile.gif
Aztech
Czyli kontrola typu nie ma tutaj najmniejszego sensu?
nospor
czemu nie? :
is_numeric
rzutowanie na int i wiele innych. do wyboru do koloru

Ale skoro pole w bazie jest typu int, to raczej z bazy nie wyciagniesz z niego tesktu: "ala ma kota" winksmiley.jpg
Aztech
To jest oczywiste, że Ali nie da się wyciągnąć biggrin.gif, walidacja typu zmiennej jest potrzebna przede wszystkim do tworzenia wpisów do bazy poprzez panel, a tam jak już wiadomo ludziska wpisują różne rzeczy (niekoneicznie te jakie miał na myśli autor biggrin.gif). Z racji, że jest ona (walidacja) zaszyta m.in w konstruktorze, to podczas tworzenia dowolnego obiektu musi ona zajść (i tutaj właśnie wystąpił taki przypadek).
Dzięki za podpowiedź.
Tak się zacukwałem w tym wszystkim, że cąłkowicie zapomniałem o is_numeric().
Zdrawim
EOT
nospor
Cytat
walidacja typu zmiennej jest potrzebna przede wszystkim do tworzenia wpisów do bazy
I teraz gadasz do rzeczy smile.gif W pierwszym poscie napisales, ze chcesz walidowac z bazy. teraz piszesz ze do bazy. Do bazy jak najbardziej trzeba walidowac smile.gif
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.