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
Форумы портала PHP.SU :: Версия для печати :: не могу в базу добавить ругается
Форумы портала PHP.SU » » Объектно-ориентированное программирование » не могу в базу добавить ругается

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

1. Pipka - 15 Марта, 2012 - 13:00:59 - перейти к сообщению
не могу в базу добавить ругается
Fatal error: Call to a member function prepare() on a non-object in Z:\home\liga\www\addRega.class.php on line 33


PHP:
скопировать код в буфер обмена
  1.  
  2. class addRega extends db_Con{
  3.  
  4.         protected $login;
  5.         protected $password;
  6.  
  7.         function __construct() { }
  8.  
  9.  
  10.         function ClearData(){
  11.  
  12.                 $this->login = trim(strip_tags($_POST['login']));
  13.                 $this->password = trim(strip_tags($_POST['password']));
  14.  
  15.                 return $this->login and $this->password;
  16.         }
  17.  
  18.         function addUser(){
  19.                 if(isset($_POST['submit'])){
  20.  
  21.                 $DB = self::Con();
  22.                
  23.                 $this->ClearData();
  24.  
  25.                         if ($this->login and $this->password){
  26.  
  27.                         $data = array('login' => $this->login,'password' => $this->password);
  28.                        
  29.                         $query = $DB->prepare("INSERT INTO users (login , password) VALUES (:login , :password)");
  30.                        
  31.                                 if ($query->execute($data)){
  32.                                 echo "Регестрация прошла успешно =)";
  33.                                 }
  34.                         }
  35.                 }
  36.         }
  37. }
2. Мелкий - 15 Марта, 2012 - 13:10:51 - перейти к сообщению
$DB не является объектом. Почему - не видно по приведённому коду. Скорей всего проблема в db_Con или выше по иерархии классов.

К слову, db_Con, видимо - класс базы данных. Нафиг вы от него наследуете? База должна быть синглтоном или фабрикой и вызываться там, где нужна непосредственно.
3. Pipka - 15 Марта, 2012 - 13:17:14 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. class db_Con{
  2.  
  3. const DB_HOST = "localhost";
  4. const DB_NAME = "liga";
  5. const DB_LOGIN = "root";
  6. const DB_PASS = "";
  7.  
  8. protected function Con(){
  9.  
  10. try {  
  11.  
  12.    # MySQL с PDO_MYSQL  
  13.  $DB = new PDO("mysql:host=".self::DB_HOST.";dbname=".self::DB_NAME."", self::DB_LOGIN, self::DB_PASS);  
  14.   $DB->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
  15.  
  16.  
  17. }  
  18. catch(PDOException $e) {  
  19.     echo $e->getMessage();  
  20. }
  21.  
  22.  
  23. }
  24.  
  25. }
4. Pipka - 15 Марта, 2012 - 15:37:02 - перейти к сообщению
так что сделать то надо?
5. Мелкий - 15 Марта, 2012 - 15:43:39 - перейти к сообщению
Вернуться обратно к основам. И изучать язык по порядку, как будто первый раз его видите, а не хвататься сразу за ООП.

Де факто:
Почему вы обращаетесь к результату метода Con, который в принципе ничего не возвращает?
6. Andrusa95 - 15 Марта, 2012 - 15:46:56 - перейти к сообщению
Попробуйте после

PHP:
скопировать код в буфер обмена
  1. $DB->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );


дописать

PHP:
скопировать код в буфер обмена
  1. return $DB;


Надеюсь поможет.
7. Pipka - 15 Марта, 2012 - 16:03:58 - перейти к сообщению
помогло спасибо =)

 

Powered by ExBB FM 1.0 RC1