Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Поиск в БД дает результат раньше чем происходит вставка

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Netix
Отправлено: 04 Августа, 2011 - 16:41:25
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




Проблема в следующем: банальная функция сохранения данных пользователя в таблицу. Перед вставкой естественно проверяю есть ли уже такой пользователь в таблице, и соответственно либо вставляю либо обновляю.

Так вот при отладке показывает, что при вставке нового пользователя он его находит в БД Не понял и соответственно строит update запрос. Но самое интересное, что запись в БД появляется!

Что за бред? Я проверяю его по echo - все идет как описал, но самого insert запроса я не вижу в упор.

Кто что скажет?
 
 Top
SAD
Отправлено: 04 Августа, 2011 - 16:43:15
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




скрипт в студию!
 
 Top
Netix
Отправлено: 04 Августа, 2011 - 18:08:18
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




DBCtrls.php

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3.         require_once("consts.php");
  4.        
  5.         class Core_DBControl {
  6.                 //Хост
  7.                 public $Host = "localhost";
  8.                 //пользователь MySQL
  9.                 public $DBUser = "root";
  10.                 //пароль
  11.                 public $Password = "";
  12.                 //БД MySQL
  13.                 public $DBName = "housectrl";
  14.                 //Идентификатор БД
  15.                 public $DBID;
  16.                 //Работоспособность БД
  17.                 public $IsOk = False;
  18.                 //Конструктор
  19.                 public function __construct(){
  20.                         debug_str("DBCtrl::__construct");
  21.                         //Необходимо в файле параметров
  22.                         //определить основные свойства для соединения с БД
  23.                        
  24.                        
  25.                        
  26.                         //Соединяемся с БД
  27.                         $this->ConnectDB();
  28.                 }
  29.                 //декструктор класса
  30.                 public function __destruct(){
  31.                         debug_str("DBCtrl::__destruct");
  32.                         $this->CloseConnectionDB();
  33.                 }
  34.                 //Соединяемся с БД
  35.                 public function ConnectDB(){
  36.                         debug_str("DBCtrl::ConnectDB");
  37.                         try {
  38.                                 $this->DBID=mysql_connect($this->Host, $this->DBUser, $this->Password);
  39.                                 mysql_select_db($this->DBName, $this->DBID);
  40.                         }
  41.                         catch (Exception $e) {
  42.                                 $this->IsOk=False;
  43.                         }
  44.                         $this->IsOk = True;
  45.                         return $this->IsOk;
  46.                 }
  47.                 //Закрытие соединения с БД
  48.                 public function CloseConnectionDB(){
  49.                         debug_str("DBCtrl::CloseConnectionDB");
  50.                         mysql_close($this->DBID);
  51.                 }
  52.                 //возвращает идентифкатор только что вставленного элемента
  53.                 public function GetInsertID(){
  54.                         debug_str("DBCtrl::GetInsertID");
  55.                         return mysql_insert_id($this->DBID);
  56.                 }
  57.                 //Функция выполняет запрос Select
  58.                 public function Query($Select) {
  59.                         debug_str("DBCtrl::Query");
  60.                         $result=NULL;
  61.                        
  62.                         if ($this->IsOk) {
  63.                                 try {
  64.                                        
  65.                                         echo "Query = $Select<br>";
  66.                                        
  67.                                         $result=mysql_query($Select, $this->DBID);
  68.                                                
  69.                                 }
  70.                                 catch (Exception $e){
  71.                                         die("Ошибка ".mysql_error());
  72.                                 }
  73.                         }
  74.                         return $result;
  75.                 }
  76.                
  77.         }
  78.        
  79.         //Базовый класс системы
  80.         class Core_BaseClass {
  81.                 //Наименование таблицы содержащей данные о домах
  82.                 private $TableName;
  83.                 //Идентификатор объекта
  84.                 public $ID;
  85.                 //флаг удаления
  86.                 public $IsDelete=false;
  87.                 //Конструктор класса
  88.                 // [in] TableName наименование таблицы
  89.                 public function __construct($TableName) {
  90.                         debug_str("Core_BaseClass::__construct()");
  91.                         $this->TableName = $TableName;
  92.                 }
  93.                 //Деструктор класса
  94.                 //Закрывает таблицу
  95.                 public function __destruct() {
  96.                         debug_str("Core_BaseClass::__destruct()");
  97.                         $this->SaveData();
  98.                         $this->CloseTable();
  99.                 }
  100.                 //Закрываем таблицу
  101.                 protected function CloseTable(){
  102.                         debug_str("Core_BaseClass::CloseTable()");                     
  103.                 }
  104.                 //Загружаем сведения
  105.                 protected function LoadData(){
  106.                         debug_str("Core_BaseClass::LoadData()");
  107.                 }
  108.                 //Сохраняем сведения
  109.                 protected function SaveData(){
  110.                         debug_str("Core_BaseClass::SaveData()");
  111.                 }
  112.                 //Удаление объекта из БД
  113.                 protected function DeleteData(){
  114.                         debug_str("Core_BaseClass::DeleteData()");
  115.                 }
  116.         }
  117.        
  118.        
  119.         //Базовый класс списка объектов
  120.         class Core_BaseList {
  121.                 //Внутренний список объектов
  122.                 private $List;
  123.                 //конструктор класса
  124.                 public function __construct() {
  125.                         //инициализируем массив
  126.                        
  127. //                      echo "Constructor Core_BaseList";
  128.                        
  129.                         unset($this->List);
  130.                         $this->List=array();
  131.                        
  132.                 }
  133.                 //деструктор класса
  134.                 public function __destruct() {
  135.                         unset($this->List);
  136.                 }
  137.                 //Количество элементов в списке
  138.                 public function GetCount() {
  139.                         return count($this->List);
  140.                 }
  141.                 //возвращает элемент по его индексу
  142.                 public function Items($index) {
  143.                         $result=NULL;
  144.                         if (($index>=0) && ($index<=(count($this->List))))
  145.                                 $result=$this->List[$index];
  146.                         return $result;                
  147.                 }
  148.                 //Добавляет элемент в список и возвращает его индекс
  149.                 public function Add($Obj) {
  150.                         $result=-1;
  151.                         if (isset($Obj)) {
  152.                                 $this->List[]=$Obj;
  153.                                 $result=count($this->List);
  154.                         }
  155.                         return $result;
  156.                 }
  157.                 //удаляет объект из списка
  158.                 public function Delete($ObjIdx) {
  159.                         if (is_integer($ObjIdx)){
  160.                         //Это индекс
  161.                                 unset($this->List[$ObjIdx]);
  162.                         }
  163.                         elseif (is_object($ObjIdx)) {
  164.                         //Это объект
  165.                                 for ($i=0; $i<count($this->List); $i++) {
  166.                                         if ($this->List[$i]===$ObjIdx) {
  167.                                                 unset($this->List[$i]);
  168.                                                 break;
  169.                                         }
  170.                                 }
  171.                         }
  172.                 }
  173.                 //Возвращает индекс объекта
  174.                 public function IndexOf($Obj) {
  175.                         $result=-1;
  176.                         if (!is_null($Obj)) {
  177.                                 for ($i=0; $i<count($this->List); $i++) {
  178.                                         if ($this->List[$i]===$ObjIdx) {
  179.                                                 $result=$i;
  180.                                                 break;
  181.                                         }
  182.                                 }
  183.                         }
  184.                         return $result;
  185.                 }
  186.                 //Ищет объект по указанному идентифкатору
  187.                 public function FindByID($ObjID) {
  188.                         $result=NULL;
  189.                         foreach ($this->List as $Obj) {
  190.                                 if (isset($Obj)) {
  191.                                         if ($Obj->ID === $ObjID) {
  192.                                                 $result=$Obj;
  193.                                                 break;
  194.                                         }
  195.                                 }
  196.                         }
  197.                         return $result;
  198.                 }
  199.         }
  200.        
  201. global $DBCtrl;
  202.  
  203. function DBCtrl() {
  204.         if (!isset($DBCtrl)) {
  205.                 $DBCtrl = new Core_DBControl();
  206.         }
  207.         return $DBCtrl;
  208. }
  209. ?>


Это код где и происходит глюк:

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4.         require_once("Consts.php");
  5.         require_once("DBCtrls.php");
  6.  
  7.  
  8.         //Базовый класс для управления пользователями
  9.         class UserControl extends Core_BaseClass {
  10.                 //Уникальный идентифкатор пользователя используется
  11.                 //для автоматичесой идентифкации пользователя
  12.                 public $UniID;
  13.                 //Имя пользователя (неизменно) (совпадает с личным счетом)
  14.                 public $UserName;
  15.                 //Пароль (хеш)
  16.                 public $Password;
  17.                 //Указатель на объект клиента
  18.                 public $ClientID;
  19.                 //Авторизирован ли пользователь в данный момент
  20.                 public $IsLogin = false;
  21.                 //Дата последнего входа
  22.                 public $LastLogin;
  23.                 //Сохранен ли объект
  24.                 public $IsSave = false;
  25.                 //конструктор
  26.                 public function __construct($ID="") {
  27.                         debug_str("UserControl::__construct()");
  28.                         parent::__construct(_USER_AUTH_TABLE_);
  29.                         $this->ID=$ID;
  30.                         if ($ID<>"") {
  31.                                 $this->LoadData();
  32.                         }
  33.                 }
  34.                 //деструктор
  35.                 public function __destruct() {
  36.                         debug_str("UserControl::__destruct()");
  37.                         if (!$this->IsDelete) {
  38.                                 if (!$this->IsSave) {
  39.                                 $this->SaveData();
  40.                                 }
  41.                         }
  42.                         parent::__destruct();
  43.                 }
  44.                 //Закрываем таблицу
  45.                 public function CloseTable(){
  46.                         debug_str("UserControl::CloseTable()");
  47.                        
  48.                 }
  49.                 //Ищем пользователя по его имени
  50.                 public function FindByName($UserName, $SetID=false) {
  51.                         debug_str("UserControl::FindByName()");
  52.                         $IsExists=true;
  53.                         $res=DBCtrl()->Query("select * from
  54.  
  55. "._USER_AUTH_TABLE_." where UserName='".$UserName."' limit 1");
  56.                         $result=mysql_fetch_row($res);
  57.                         debug_str("<br />");
  58.                         var_export($result);
  59.                         debug_str("<br />");
  60.                         debug_str("Имя в массиве $result[2] = $UserName  <br
  61.  
  62. />");
  63.                         if ($result[2]===$UserName) {
  64.                                 debug_str("Пользователь в БД <br />");
  65.                                 $IsExists=true;
  66.                                 if ($SetID) {
  67.                                         $this->ID=$result[0];
  68.                                 }
  69.                         } else {
  70.                                 debug_str("Пользователя $UserName в БД
  71.  
  72. нет <br />");
  73.                                 $IsExists=false;
  74.                         }
  75.                         return $IsExists;
  76.                 }
  77.                
  78.                
  79.                 //Загружаем сведения
  80.                 public function LoadData(){
  81.                         debug_str("UserControll::LoadData()");
  82.                         if (isset($this->ID) and ($this->ID!==-1)) {
  83.                                 //загружаем сведения
  84.                                 $res=DBCtrl()->Query("select * from
  85.  
  86. "._USER_AUTH_TABLE_." where ID=".$this->ID);
  87.                                 if (!is_null($res)) {
  88.                                         // Разбираем результат
  89.                                         $row=mysql_fetch_assoc($res);
  90.                                         $this->ClientID=$row["ClientID"];
  91.                                         $this->IsLogin=$row["IsLogin"];
  92.                                        
  93.  
  94. $this->Password=$row["Password"];
  95.                                        
  96.  
  97. $this->UserName=$row["UserName"];
  98.                                         $this->UniID=$row["UniID"];
  99.                                        
  100.  
  101. $this->LastLogin=$row["LastLogin"];
  102.                                         $this->IsSave=True;
  103.                                 }
  104.                         }
  105.                 }
  106.                 //Сохраняем сведения
  107.                 public function SaveData(){
  108.                         debug_str("UserControl::SaveData()");
  109.                         if (!$this->IsSave) {          
  110.                                 $new=false;
  111.                                 if (!isset($this->ID) or ($this->ID===-1)) {
  112.                                         //Пользователя еще нет в БД
  113.                                         //Пытаемся найти его в БД по
  114.  
  115. имени
  116.                                        
  117.                                         if
  118.  
  119. ($this->FindByName($this->UserName, true)) {
  120.                                                 //Пользователь с таким
  121.  
  122. именем уже существует в БД
  123.                                                 debug_str("пользователь
  124.  
  125. существует его ID=$this->ID <br />");
  126.                                                
  127.                                                 $new=false;
  128.                                         } else {
  129.                                                
  130.                                                 debug_str("Новый <br
  131.  
  132. />");
  133.                                                
  134.                                                 $new=true;
  135.                                         }
  136.                                 }
  137.                                 if ($new) {
  138.                                         $query="insert into
  139.  
  140. "._USER_AUTH_TABLE_." (UinID, UserName, UserPassword, ClientID, LastLogin)
  141.  
  142. values('".
  143.                                                         $this->UniID."',
  144.  
  145. '".$this->UserName."', '".$this->Password."', '".$this->ClientID."', '".$this->LastLogin."')";
  146.                                 } else {
  147.                                         $query="update
  148.  
  149. "._USER_AUTH_TABLE_." set UinID='$this->UniID', UserName='$this->UserName', ".
  150.                                                        
  151.  
  152. "UserPassword='$this->Password', ClientID='$this->ClientID',
  153.  
  154. LastLogin='$this->LastLogin' where ID=$this->ID";
  155.                                 }
  156.                                
  157.                                 debug_str("Получившийся запрос $query
  158.  
  159. <br />");
  160.                                
  161.                                 DBCtrl()->Query($query);                       
  162.  
  163.        
  164.                                 $this->IsSave=true;                            
  165.                                 if ($new) {$this->ID=DBCtrl()->GetInsertID();}
  166.                                
  167.                                 debug_str("Наш ID = $this->ID <br />");        
  168.  
  169.                
  170.                         }
  171.                 }
  172.                
  173.                 //Удаление объекта из БД
  174.                 public function DeleteData(){
  175.                         debug_str("UserControl::DeleteData()");
  176.                         if (isset($this->ID) and ($this->ID!==-1)) {
  177.                                 $query="delete from
  178.  
  179. "._USER_AUTH_TABLE_." where ID='$this->ID'";
  180.                                 DBCtrl()->Query($query);
  181.                         }
  182.                 }
  183.         }
  184.        
  185.         //Список пользователей
  186.         class UserList extends Core_BaseList {
  187.                 //Создание нового пользователя
  188.                 // [in] $UserPassword - пароль в простом виде
  189.                 // [in] $UserClient - ссылка на объект клиента
  190.                 // [out] - ссылка на объект пользователя класса UserControl
  191.                 public function CreateUser($UserPassword, $UserClient){
  192.                        
  193.                         //echo "Создаем пользователя";
  194.                        
  195.                         $result=new UserControl();
  196.                        
  197.                         //echo "создали";
  198.                         $result->ID=-1;
  199.                        
  200.                         $result->Password=$UserPassword;
  201.                         if (isset($UserClient)) {
  202.                         $result->ClientID=$UserClient->ID;
  203.                         }  else
  204.                         { $result->ClientID=-1;}
  205.                         $result->IsDelete=False;
  206.                         $result->IsLogin=False;
  207.                         $result->UniID=uniqid(mt_rand(), True);
  208.                         //echo "пытаемся добавить";
  209.                         $this->Add($result);
  210.                         //echo "добавили";
  211.                        
  212.                         return $result;
  213.                 }
  214.                 //Авторизация пользователя
  215.                 // [in] $UserName - имя пользователя
  216.                 // [in] $UserPassword - пароль пользователя (как хеш)
  217.                 // [out] - объект пользователя
  218.                 public function Login($UserName, $UserPassword){
  219.                         $result=true;
  220.                         for ($i=0; $i < $this->GetCount(); $i++) {
  221.                                 $obj=$this->Items($i);
  222.                                 if (($UserName===$obj->UserName) and
  223.  
  224. ($UserPassword===$obj->Password)) {
  225.                                         $obj->IsLogin=True;
  226.                                         $result=$obj;
  227.                                         break;
  228.                                 }
  229.                         }
  230.                         return $result;
  231.                 }
  232.                 //Выход пользователя
  233.                 // [in] - идентифкатор пользователя
  234.                 public function Logout($UserID) {
  235.                         if (isset($UserID) and (!is_null($UserID))) {
  236.                                 $obj=$this->FindByID($UserID);
  237.                                 if (!is_null($obj)) {
  238.                                         if ($obj->IsLogin) {
  239.                                                 $obj->IsLogin=false;
  240.                                         }
  241.                                 }
  242.                         }
  243.                        
  244.                 }
  245.                 //Ищет пользователя по его UinID
  246.                 public function FindByUinID($UinID) {
  247.                         $result=NULL;
  248.                         foreach ($this->List as $Obj) {
  249.                                 if (isset($Obj)) {
  250.                                         if ($Obj->UniID === $UinID) {
  251.                                                 $result=$Obj;
  252.                                                 break;
  253.                                         }
  254.                                 }
  255.                         }
  256.                         return $result;
  257.                 }
  258.         }
  259.  
  260. ?>
  261.  


Вот как я его запускаю:

CODE (html):
скопировать код в буфер обмена
  1.  
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
  5. <?php
  6.   require_once("Core/authCtrl.php");
  7. ?>
  8. <title>Тест</title>
  9. </head>
  10. <body>
  11. <?php
  12.        
  13.         $users=new UserList;
  14.        
  15.         $u=$users->CreateUser("andy", NULL);
  16.         $u->UserName="Lolo";
  17.        
  18.         error_reporting(-1);
  19.        
  20.         $u->SaveData();
  21.  
  22.        
  23. ?>
  24. </body>
  25. </html>
  26.  
  27.  


А вот что он мне пишет (при этом пользователя Lolo в базе нет):

CODE (html):
скопировать код в буфер обмена
  1.  
  2. UserControl::__construct()
  3. Core_BaseClass::__construct()
  4. UserControl::SaveData()
  5. UserControl::FindByName()
  6. DBCtrl::__construct
  7. DBCtrl::ConnectDB
  8. DBCtrl::Query
  9. Query = select * from userctrl where UserName='Lolo' limit 1
  10. DBCtrl::__destruct
  11. DBCtrl::CloseConnectionDB
  12.  
  13.  
  14. array ( 0 => '23', 1 => '889555594e3ab0cb62cb51.38451106', 2 => 'Lolo', 3 => 'andy', 4 => '-1', 5 => '0000-00-00 00:00:00', )
  15.  
  16. Имя в массиве Lolo = Lolo
  17.  
  18. Пользователь в БД
  19.  
  20. пользователь существует его ID=23
  21.  
  22. Получившийся запрос update userctrl set UinID='7490603724e3ab1ade99754.38321747', UserName='Lolo', UserPassword='andy', ClientID='-1', LastLogin='' where ID=23
  23.  
  24. DBCtrl::__construct
  25. DBCtrl::ConnectDB
  26. DBCtrl::Query
  27. Query = update userctrl set UinID='7490603724e3ab1ade99754.38321747', UserName='Lolo', UserPassword='andy', ClientID='-1', LastLogin='' where ID=23
  28. DBCtrl::__destruct
  29. DBCtrl::CloseConnectionDB
  30. Наш ID = 23
  31.  
  32. UserControl::__destruct()
  33. Core_BaseClass::__destruct()
  34. UserControl::SaveData()
  35. UserControl::CloseTable()
  36.  
  37.  
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB