Учу PHP, щас траблы с ООП. Суть такова: есть некоторая форма (создание фотоальбома, в форму я ввожу название и дату публикации). Форма ссылается на контроллер, в который подключен PHP-файлик с SQL-запросами. но выдаёт ошибку. Помогите плиз. Форма: HTML: <body> <form action="backend_controller.php" method="post"> <input type="hidden" name="add_album" value="true" /> <table width="350" border="0"> <tr> <td width="30%"> Album title </td> <td width="70%"> <input type="text" name="album_title" maxlength="20"/> </td> </tr> <tr> <td width="35%" valign="top"> Date of publish </td> <td width="65%"> <select name="year" size="1"> <option value="2009" selected="selected">2009</option> <option value="2010">2010</option> <option value="2011">2011</option> <option value="2012">2012</option> <option value="2013">2013</option> </select> <select name="month" size="1"> <option value="01" selected="selected">January</option> <option value="02">February</option> <option value="03">March</option> <option value="04">April</option> <option value="05">May</option> <option value="06">June</option> <option value="06">Jule</option> <option value="08">August</option> <option value="09">September</option> <option value="10">October</option> <option value="11">November</option> <option value="12">December</option> </select> <select name="day" size="1"> <option value="1" selected="selected">1</option> <?php for($i=2; $i<32; $i++) echo "<option value='".$i."'>".$i."</option>"; ?> </select> </td> </tr> </table> <input type="submit" value="Create" /> </form> </body> Контроллер: PHP: if(isset($_POST['add_album'])) { $album_title = $_POST['album_title']; $date_of_publish = $_POST['year']."-".$_POST['month']."-".$_POST['day']; $adm = new Adm_controller("localhost", "andrex", "master", "web_album", $tmp); $adm->addAlbumButton($album_title, $date_of_publish); $album_view = $adm->execOutputQuery("SELECT album_title FROM album_list"); for($i=0; $i<count($album_view); $i++) echo " <button><img src='album.JPG' border='0'></button>$album_view[0][$i]<br /> "; } Класс контроллера: PHP: require_once('interface.Interface_Adm.php'); require_once('SQL_query.php'); class Adm_controller implements Interface_Adm { private $DBHost, $DBUserLogin, $DBUserPassword, $DBDefaultDataBase, $DBLink; private $_path; private $_albumTitle; private $_dateOfPublish; private $_pictureTitle; private $_pictureDescription; private $_publish; private $_fileName; private $_fileTmpName; private $_fileType; private $_fileSize; public function __construct($DBHost, $DBUserLogin, $DBUserPassword, $DBDefaultDataBase, $albums_dir) { $this->DBUserLogin = $DBUserLogin; $this->DBUserPassword = $DBUserPassword; $this->DBDefaultDataBase = $DBDefaultDataBase; $this->DBHost = $DBHost; $this->_path = $albums_dir; $this->doConnect(); } public function doConnect() { /* * connection to DB */ $this->DBLink = mysql_connect($this->DBHost, $this->DBUserLogin, $this->DBUserPassword); /* * sselect DataBase * * @return boolean */ $this->selectDB(); } /** * Select database * * @return boolean */ public function selectDB() { return mysql_select_db($this->DBDefaultDataBase, $this->DBLink); } public function addAlbumButton($album_title, $date_of_publish) { $this->_albumTitle = $album_title; $this->_dateOfPublish = $date_of_publish; $this->execInputQuery($add_album_query); $this->execInputQuery($__add_album_query); $this->createAlbum($album_title); } ....... public function createAlbum($album_title) { $result = true; chdir($this->_path); $dp = opendir($this->_path); while($some = readdir($dp)) { if($some != '.' && $some != '..') { if(is_dir($some)) if($some == $album_title) { $result = false; } } } if($result) { mkdir($this->_path."/".$album_title, 0700); return true; } else return false; closedir($dp); } Файлик с запросами: PHP: $add_album_query = "INSERT INTO album_list VALUES ( null, '$this->_albumTitle', '$this->_dateOfPublish', ) "; $__add_album_query = "CREATE TABLE $this->_albumTitle ( id SMALLINT(5) NOT NULL AUTO_INCREMENT, picture_title VARCHAR(30) BINARY NOT NULL, picture_description VARCHAR(100) NOT NULL, publish ENUM('true', 'false') NOT NULL DEFAULT 'false', picture_file VARCHAR(50) NOT NULL, UNIQUE (id, picture_title), PRIMARY KEY (id, picture_title) ) "; И, собственно, сама ошибка: Fatal error: Using $this when not in object context in Z:\home\yandex\www\web_album\SQL_query.php on line 4
Ошибка говорит сама за себя...... Использование $this при попытке вызова метода \ доступа к атрибутам вне класса.
А почему контроллер получился самый "низкий" по уровню? По идее он должен связывать модель данных и представление. А тут получается вперемешку. Запросы в файле - жесть. ээ... у тебя написана сотня строк кода в ООП и ты задаешь такие вопросы? Наверное нужно создать экземпляр класса, чтобы использовать свойства извне его или сделать свойство статичным (если это возможно). А еще можно передать значение в глобальную область или в класс, что выше.
а насчёт контроллера - просто ещё не ковырялся в смарти, вот ща читаю, поэтому view и влеплено в контроллер
а это: PHP: $adm = new Adm_controller("localhost", "andrex", "master", "web_album", $tmp); $adm->addAlbumButton($album_title, $date_of_publish);