Проблема в следующем: банальная функция сохранения данных пользователя в таблицу. Перед вставкой естественно проверяю есть ли уже такой пользователь в таблице, и соответственно либо вставляю либо обновляю.
Так вот при отладке показывает, что при вставке нового пользователя он его находит в БД и соответственно строит update запрос. Но самое интересное, что запись в БД появляется!
Что за бред? Я проверяю его по echo - все идет как описал, но самого insert запроса я не вижу в упор.
Кто что скажет?
1. Netix - 04 Августа, 2011 - 16:41:25 - перейти к сообщению
2. SAD - 04 Августа, 2011 - 16:43:15 - перейти к сообщению
скрипт в студию!
3. Netix - 04 Августа, 2011 - 18:08:18 - перейти к сообщению
DBCtrls.php
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- <?PHP
- require_once("consts.php");
- class Core_DBControl {
- //Хост
- public $Host = "localhost";
- //пользователь MySQL
- public $DBUser = "root";
- //пароль
- public $Password = "";
- //БД MySQL
- public $DBName = "housectrl";
- //Идентификатор БД
- public $DBID;
- //Работоспособность БД
- public $IsOk = False;
- //Конструктор
- public function __construct(){
- debug_str("DBCtrl::__construct");
- //Необходимо в файле параметров
- //определить основные свойства для соединения с БД
- //Соединяемся с БД
- $this->ConnectDB();
- }
- //декструктор класса
- public function __destruct(){
- debug_str("DBCtrl::__destruct");
- $this->CloseConnectionDB();
- }
- //Соединяемся с БД
- public function ConnectDB(){
- debug_str("DBCtrl::ConnectDB");
- try {
- }
- catch (Exception $e) {
- $this->IsOk=False;
- }
- $this->IsOk = True;
- return $this->IsOk;
- }
- //Закрытие соединения с БД
- public function CloseConnectionDB(){
- debug_str("DBCtrl::CloseConnectionDB");
- }
- //возвращает идентифкатор только что вставленного элемента
- public function GetInsertID(){
- debug_str("DBCtrl::GetInsertID");
- }
- //Функция выполняет запрос Select
- public function Query($Select) {
- debug_str("DBCtrl::Query");
- $result=NULL;
- if ($this->IsOk) {
- try {
- echo "Query = $Select<br>";
- }
- catch (Exception $e){
- }
- }
- return $result;
- }
- }
- //Базовый класс системы
- class Core_BaseClass {
- //Наименование таблицы содержащей данные о домах
- private $TableName;
- //Идентификатор объекта
- public $ID;
- //флаг удаления
- public $IsDelete=false;
- //Конструктор класса
- // [in] TableName наименование таблицы
- public function __construct($TableName) {
- debug_str("Core_BaseClass::__construct()");
- $this->TableName = $TableName;
- }
- //Деструктор класса
- //Закрывает таблицу
- public function __destruct() {
- debug_str("Core_BaseClass::__destruct()");
- $this->SaveData();
- $this->CloseTable();
- }
- //Закрываем таблицу
- protected function CloseTable(){
- debug_str("Core_BaseClass::CloseTable()");
- }
- //Загружаем сведения
- protected function LoadData(){
- debug_str("Core_BaseClass::LoadData()");
- }
- //Сохраняем сведения
- protected function SaveData(){
- debug_str("Core_BaseClass::SaveData()");
- }
- //Удаление объекта из БД
- protected function DeleteData(){
- debug_str("Core_BaseClass::DeleteData()");
- }
- }
- //Базовый класс списка объектов
- class Core_BaseList {
- //Внутренний список объектов
- private $List;
- //конструктор класса
- public function __construct() {
- //инициализируем массив
- // echo "Constructor Core_BaseList";
- }
- //деструктор класса
- public function __destruct() {
- }
- //Количество элементов в списке
- public function GetCount() {
- }
- //возвращает элемент по его индексу
- public function Items($index) {
- $result=NULL;
- $result=$this->List[$index];
- return $result;
- }
- //Добавляет элемент в список и возвращает его индекс
- public function Add($Obj) {
- $result=-1;
- $this->List[]=$Obj;
- }
- return $result;
- }
- //удаляет объект из списка
- public function Delete($ObjIdx) {
- //Это индекс
- }
- //Это объект
- for ($i=0; $i<count($this->List); $i++) {
- if ($this->List[$i]===$ObjIdx) {
- break;
- }
- }
- }
- }
- //Возвращает индекс объекта
- public function IndexOf($Obj) {
- $result=-1;
- for ($i=0; $i<count($this->List); $i++) {
- if ($this->List[$i]===$ObjIdx) {
- $result=$i;
- break;
- }
- }
- }
- return $result;
- }
- //Ищет объект по указанному идентифкатору
- public function FindByID($ObjID) {
- $result=NULL;
- foreach ($this->List as $Obj) {
- if ($Obj->ID === $ObjID) {
- $result=$Obj;
- break;
- }
- }
- }
- return $result;
- }
- }
- global $DBCtrl;
- function DBCtrl() {
- $DBCtrl = new Core_DBControl();
- }
- return $DBCtrl;
- }
- ?>
Это код где и происходит глюк:
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- <?PHP
- require_once("Consts.php");
- require_once("DBCtrls.php");
- //Базовый класс для управления пользователями
- class UserControl extends Core_BaseClass {
- //Уникальный идентифкатор пользователя используется
- //для автоматичесой идентифкации пользователя
- public $UniID;
- //Имя пользователя (неизменно) (совпадает с личным счетом)
- public $UserName;
- //Пароль (хеш)
- public $Password;
- //Указатель на объект клиента
- public $ClientID;
- //Авторизирован ли пользователь в данный момент
- public $IsLogin = false;
- //Дата последнего входа
- public $LastLogin;
- //Сохранен ли объект
- public $IsSave = false;
- //конструктор
- public function __construct($ID="") {
- debug_str("UserControl::__construct()");
- parent::__construct(_USER_AUTH_TABLE_);
- $this->ID=$ID;
- if ($ID<>"") {
- $this->LoadData();
- }
- }
- //деструктор
- public function __destruct() {
- debug_str("UserControl::__destruct()");
- if (!$this->IsDelete) {
- if (!$this->IsSave) {
- $this->SaveData();
- }
- }
- parent::__destruct();
- }
- //Закрываем таблицу
- public function CloseTable(){
- debug_str("UserControl::CloseTable()");
- }
- //Ищем пользователя по его имени
- public function FindByName($UserName, $SetID=false) {
- debug_str("UserControl::FindByName()");
- $IsExists=true;
- $res=DBCtrl()->Query("select * from
- "._USER_AUTH_TABLE_." where UserName='".$UserName."' limit 1");
- debug_str("<br />");
- debug_str("<br />");
- debug_str("Имя в массиве $result[2] = $UserName <br
- />");
- if ($result[2]===$UserName) {
- debug_str("Пользователь в БД <br />");
- $IsExists=true;
- if ($SetID) {
- $this->ID=$result[0];
- }
- } else {
- debug_str("Пользователя $UserName в БД
- нет <br />");
- $IsExists=false;
- }
- return $IsExists;
- }
- //Загружаем сведения
- public function LoadData(){
- debug_str("UserControll::LoadData()");
- //загружаем сведения
- $res=DBCtrl()->Query("select * from
- "._USER_AUTH_TABLE_." where ID=".$this->ID);
- // Разбираем результат
- $this->ClientID=$row["ClientID"];
- $this->IsLogin=$row["IsLogin"];
- $this->Password=$row["Password"];
- $this->UserName=$row["UserName"];
- $this->UniID=$row["UniID"];
- $this->LastLogin=$row["LastLogin"];
- $this->IsSave=True;
- }
- }
- }
- //Сохраняем сведения
- public function SaveData(){
- debug_str("UserControl::SaveData()");
- if (!$this->IsSave) {
- $new=false;
- //Пользователя еще нет в БД
- //Пытаемся найти его в БД по
- имени
- if
- ($this->FindByName($this->UserName, true)) {
- //Пользователь с таким
- именем уже существует в БД
- debug_str("пользователь
- существует его ID=$this->ID <br />");
- $new=false;
- } else {
- debug_str("Новый <br
- />");
- $new=true;
- }
- }
- if ($new) {
- $query="insert into
- "._USER_AUTH_TABLE_." (UinID, UserName, UserPassword, ClientID, LastLogin)
- values('".
- $this->UniID."',
- '".$this->UserName."', '".$this->Password."', '".$this->ClientID."', '".$this->LastLogin."')";
- } else {
- $query="update
- "._USER_AUTH_TABLE_." set UinID='$this->UniID', UserName='$this->UserName', ".
- "UserPassword='$this->Password', ClientID='$this->ClientID',
- LastLogin='$this->LastLogin' where ID=$this->ID";
- }
- debug_str("Получившийся запрос $query
- <br />");
- DBCtrl()->Query($query);
- $this->IsSave=true;
- if ($new) {$this->ID=DBCtrl()->GetInsertID();}
- debug_str("Наш ID = $this->ID <br />");
- }
- }
- //Удаление объекта из БД
- public function DeleteData(){
- debug_str("UserControl::DeleteData()");
- $query="delete from
- "._USER_AUTH_TABLE_." where ID='$this->ID'";
- DBCtrl()->Query($query);
- }
- }
- }
- //Список пользователей
- class UserList extends Core_BaseList {
- //Создание нового пользователя
- // [in] $UserPassword - пароль в простом виде
- // [in] $UserClient - ссылка на объект клиента
- // [out] - ссылка на объект пользователя класса UserControl
- public function CreateUser($UserPassword, $UserClient){
- //echo "Создаем пользователя";
- $result=new UserControl();
- //echo "создали";
- $result->ID=-1;
- $result->Password=$UserPassword;
- $result->ClientID=$UserClient->ID;
- } else
- { $result->ClientID=-1;}
- $result->IsDelete=False;
- $result->IsLogin=False;
- //echo "пытаемся добавить";
- $this->Add($result);
- //echo "добавили";
- return $result;
- }
- //Авторизация пользователя
- // [in] $UserName - имя пользователя
- // [in] $UserPassword - пароль пользователя (как хеш)
- // [out] - объект пользователя
- public function Login($UserName, $UserPassword){
- $result=true;
- for ($i=0; $i < $this->GetCount(); $i++) {
- $obj=$this->Items($i);
- if (($UserName===$obj->UserName) and
- ($UserPassword===$obj->Password)) {
- $obj->IsLogin=True;
- $result=$obj;
- break;
- }
- }
- return $result;
- }
- //Выход пользователя
- // [in] - идентифкатор пользователя
- public function Logout($UserID) {
- $obj=$this->FindByID($UserID);
- if ($obj->IsLogin) {
- $obj->IsLogin=false;
- }
- }
- }
- }
- //Ищет пользователя по его UinID
- public function FindByUinID($UinID) {
- $result=NULL;
- foreach ($this->List as $Obj) {
- if ($Obj->UniID === $UinID) {
- $result=$Obj;
- break;
- }
- }
- }
- return $result;
- }
- }
- ?>
Вот как я его запускаю:
CODE (html):
скопировать код в буфер обмена
скопировать код в буфер обмена
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
- <?php
- require_once("Core/authCtrl.php");
- ?>
- <title>Тест</title>
- </head>
- <body>
- <?php
- $users=new UserList;
- $u=$users->CreateUser("andy", NULL);
- $u->UserName="Lolo";
- error_reporting(-1);
- $u->SaveData();
- ?>
- </body>
- </html>