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 ООП + mysql

 PHP.SU

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


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

> Описание: не записывает в ДБ
nordghost
Отправлено: 03 Мая, 2012 - 00:26:02
Post Id



Посетитель


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


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




Есть класс:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. class news {
  4.     private $author;
  5.     private $title;
  6.     private $short;
  7.     private $full;
  8.  
  9.  
  10.  
  11.     const DB_HOST = 'localhost';
  12.     const DB_USER = 'site';
  13.     const DB_PWD = 'site';
  14.     const DB_NAME = 'site';
  15.  
  16.     function addToDataBase($author, $title, $short, $full){
  17.         mysql_connect(self::DB_HOST, self::DB_USER, self::DB_PWD) or die ("Невозможно соеденится");
  18.         mysql_select_db(self::DB_NAME) or die (mysql_error());
  19.         mysql_query("INSERT INTO site (title,
  20.                                       author,
  21.                                       short,
  22.                                       full,
  23.                                       date)
  24.                VALUES ('$this->title',
  25.                        '$this->author',
  26.                        '$this->short',
  27.                        '$this->full',
  28.                        12)") or die (mysql_error());
  29.     }
  30. }
  31.    
  32. ?>
  33.  
  34.  


Вызываю его так:

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. function __autoload($name){
  4.         include "library".DIRECTORY_SEPARATOR.$name.".class.php";
  5. }
  6.  
  7. $author = "Vasia";
  8. $title = "Vasia";
  9. $short = "Vasia";
  10. $full = "Vasia";
  11. $news = new news();
  12. $news->addToDataBase($author, $title, $short, $full);
  13.  
  14.  
  15. ?>
  16.  
  17.  
  18.  


В итоге база данных пустая добавилось только число 12.

По началу вместо кирилицы были знаки вопроса, в PHPMyAdmin после смены кодировки на UTF-8_bin всё перестало работать хотя правда я и скрипт поменял.
(Добавление)
Попробывал процедурный подход - всё заработло - значит с моим "ООП" что то не так, не могу понять что!


-----
<a href="http://netbeans[dot]org/">Моя любимая IDE</a> :3
 
My status
 Top
DelphinPRO
Отправлено: 03 Мая, 2012 - 01:17:32
Post Id



Активный участник


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


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




вы в метод передаете параметры, а в запросе используете члены класса. Будьте внимательнее.

// совсем не лишне будет брамлять кавычками имена таблиц и полей INSERT INTO `site` (`title`, `author`, `short`, `full`, `date`) ...


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Wol_fi
Отправлено: 04 Мая, 2012 - 01:16:19
Post Id


Новичок


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


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




Передаёте параметры в функцию, а в функции используете вместо них переменные объекта, вот и не работает. $this-> запросе уберите, и за функционирует.
PS. Use PDO, luke
PPS. я бы написал так(учитывая как вы используете данный класс):
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. class news {
  3.     private $author;
  4.     private $title;
  5.     private $short;
  6.     private $full;
  7.  
  8.  public function __construct($author,$title,$short,$full)
  9. {
  10.    $this->author = $author;
  11.  
  12.    $this->title = $title;
  13.  
  14.    $this->short = $short;
  15.  
  16.    $this->full = $full;
  17.  
  18. }
  19.  
  20.     const DB_HOST = 'localhost';
  21.     const DB_USER = 'site';
  22.     const DB_PWD = 'site';
  23.     const DB_NAME = 'site';
  24.  
  25.     function addToDataBase(){
  26.         mysql_connect(self::DB_HOST, self::DB_USER, self::DB_PWD) or die ("Невозможно соеденится");
  27.         mysql_select_db(self::DB_NAME) or die (mysql_error());
  28.         $query = "INSERT INTO site (title,author,short,full,date)VALUES ('$this->title','$this->author','$this->short','$this->full',12)";
  29.         if(mysql_query($query))
  30. {
  31.    return true; //ну или можно вернуть id сохранённой новости из базы для дальнейшей работы, тут по вкусу вобщем
  32. }
  33. else
  34. {
  35.   die(mysql_error());//дурной тон использовать die() для дебага, и не ООП-подход конечно, вообще тут исключение вызвать нужно, но для примера вполне сгодится
  36. }
  37.     }
  38. }
  39.    
  40. ?>

тогда и править запрос не нужно, и вызывать проще:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. function __autoload($name){
  3.         include "library".DIRECTORY_SEPARATOR.$name.".class.php";
  4. }
  5.  
  6. $author = "Vasia";
  7. $title = "Vasia";
  8. $short = "Vasia";
  9. $full = "Vasia";
  10. $news = new news($author, $title, $short, $full); //создали новость, получили объект, и делаем с ним маниипуляции, например валидация и т.д. и в конце сохраняем:
  11. $news->addToDataBase();
  12.  
  13.  
  14. ?>

(Отредактировано автором: 04 Мая, 2012 - 01:32:42)

 
 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