Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> php i MySQL a typy int oraz string (bardziej php), zacukałem się i nie widzę błędu
Aztech
post 21.03.2006, 20:13:32
Post #1





Grupa: Zarejestrowani
Postów: 276
Pomógł: 3
Dołączył: 22.10.2003
Skąd: Wrocław

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


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. ?>


Ten post edytował Aztech 21.03.2006, 20:17:26
Go to the top of the page
+Quote Post
nospor
post 21.03.2006, 20:37:08
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Aztech
post 21.03.2006, 20:40:39
Post #3





Grupa: Zarejestrowani
Postów: 276
Pomógł: 3
Dołączył: 22.10.2003
Skąd: Wrocław

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


Czyli kontrola typu nie ma tutaj najmniejszego sensu?

Ten post edytował Aztech 21.03.2006, 20:40:49
Go to the top of the page
+Quote Post
nospor
post 21.03.2006, 20:45:58
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Aztech
post 22.03.2006, 19:13:53
Post #5





Grupa: Zarejestrowani
Postów: 276
Pomógł: 3
Dołączył: 22.10.2003
Skąd: Wrocław

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


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
Go to the top of the page
+Quote Post
nospor
post 23.03.2006, 08:17:38
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 13.06.2025 - 09:23