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<?php
#utwórz użytkownika
$luser = new LoginUser($_SESSION["username"]);
$luser->createNewUserSQL($_SESSION,$_POST);
?>
z klasy LoginUser, która dziedziczy po User<?php
public function createNewUserSQL($session, $post)
{
#zapisz dane o użytkowniku
$this->setUsername($session["username"]);
/*wyciąłem instrukcje przypisywania
pole user_id nie jest zmieniane*/
#generuj kod aktywacji
$this->generateActivationCode();
#oblicz datę do kiedy kod aktywacyjny jest ważny
$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 $this->setActivationCodeExpirationDate($expire_date);
#ustaw konto jako aktywne @todo: napisać aktywację konta
$this->activate();
#stwórz użytkownika
$this->createSQL();
/* 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 */
#odczytaj zapisane dane = uaktualnij dane o ID użytkownika
$this->readDataFromSqlByEmail($this->getEmail());
#stwórz użytkownika w tabeli uzytkowników jako zwykłego usera
$groupuser = new GroupUser(REGISTERED_USER,$this->getUserID());
#stwórz wpis o użytkowniku w bazie
$groupuser->createSQL();
}
?>
readDataFromSqlByEmail() wywołuje w sobie między innymi taką funkcję<?php
/**
* Wczytaj użytkownika z wyników zapytania SQL
*
* @param array $table tabela z danymi uzytkonika
* @access public
*/
public function setFromSQL($table){
#ustaw dane użytkownika poprzez odczyt danych z talicy wyników
#zwróconej przez zapytanie do bazy danych
$this->setUserID($table["user_id"]);
$this->setEmail($table["email"]);
$this->setGG($table["gg"]);
/* i tak dalej i tak dalej....*/
}
?>
Konstruktor GroupUser<?php
/**
* Konstruktor
*
* @param array $rbx_db
* @param integer $guidorgid
* @param ingeter $user_id
* @access public
*/
public function __construct($guidorgid, $user_id=NULL){
#inicjacja połaczenia PDO poprzez wyłołanie konstruktora rodzica
parent::__construct();
#ustaw wartości domyślne
$this->setDefault();
#zlicz ilość argumentów wejściowych
#parsuj argumenty wejściowe
if (isset($guidorgid) && ($arg==1
|| $arg==2
)) { #konstruktor dla obiektu pobierającego dane z bazy
if ($arg == 1) {
$this->id = $guidorgid;
}
#konstruktor tworzący ($arg==2)
elseif (is_int($user_id)){ /* <- OKAZUJE SI ŻE TO NIE JEST INT!?!?*/ $this->user_id = $user_id;
$this->group_id = $guidorgid;
}
else throw new CreateObjectException(INCORRECT_VALUE);
}
else throw new CreateObjectException(INCORRECT_ARGUMENT_TYPE);
}
else throw new CreateObjectException(INCORRECT_ARGUMENTS_NUMBER);
}
?>
getUserID() wygląda tak<?php
/**
* Zwraca identyfiaktor użytkownika
*
* @return int identyfikator użytkowika
* @access public
*/
public function getUserID(){
return $this->user_id;
}
?>
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!
<?php
/**
* Zwraca identyfiaktor użytkownika
*
* @return int identyfikator użytkowika
* @access public
*/
public function getUserID(){
return intval($this->user_id); }
?>
Ten post edytował Aztech 21.03.2006, 20:17:26