За последние 24 часа нас посетили 17738 программистов и 1280 роботов. Сейчас ищут 1419 программистов ...

проблема в ООП

Тема в разделе "PHP для новичков", создана пользователем Andrey, 19 авг 2009.

  1. Andrey

    Andrey Активный пользователь

    С нами с:
    3 авг 2009
    Сообщения:
    10
    Симпатии:
    0
    Адрес:
    Simferopol
    Учу PHP, щас траблы с ООП.
    Суть такова: есть некоторая форма (создание фотоальбома, в форму я ввожу название и дату публикации).
    Форма ссылается на контроллер, в который подключен PHP-файлик с SQL-запросами. но выдаёт ошибку. Помогите плиз.
    Форма:
    HTML:
    1.  
    2.  
    3.     <form action="backend_controller.php" method="post">
    4.         <input type="hidden" name="add_album" value="true" />
    5.        
    6.         <table width="350" border="0">
    7.             <tr>
    8.               <td width="30%">
    9.                     Album title
    10.               </td>
    11.                 <td width="70%">
    12.                     <input type="text" name="album_title" maxlength="20"/>
    13.                 </td>
    14.             </tr>
    15.             <tr>
    16.                 <td width="35%" valign="top">
    17.                     Date of publish
    18.                 </td>
    19.                 <td width="65%">
    20.                     <select name="year" size="1">
    21.                         <option value="2009" selected="selected">2009</option>
    22.                         <option value="2010">2010</option>
    23.                         <option value="2011">2011</option>
    24.                         <option value="2012">2012</option>
    25.                         <option value="2013">2013</option>
    26.                     </select>
    27.                    
    28.                     <select name="month" size="1">
    29.                         <option value="01" selected="selected">January</option>
    30.                         <option value="02">February</option>
    31.                         <option value="03">March</option>
    32.                         <option value="04">April</option>
    33.                         <option value="05">May</option>
    34.                         <option value="06">June</option>
    35.                         <option value="06">Jule</option>
    36.                         <option value="08">August</option>
    37.                         <option value="09">September</option>
    38.                         <option value="10">October</option>
    39.                         <option value="11">November</option>
    40.                         <option value="12">December</option>
    41.                     </select>
    42.  
    43.                     <select name="day" size="1">
    44.                         <option value="1" selected="selected">1</option>
    45.                         <?php
    46.                             for($i=2; $i<32; $i++)
    47.                                 echo "<option value='".$i."'>".$i."</option>";
    48.                         ?>
    49.                     </select>
    50.                 </td>
    51.             </tr>
    52.         </table>
    53.         <input type="submit" value="Create" />
    54.     </form>
    55.  
    56. </body>
    57.  
    58.  
    Контроллер:
    PHP:
    1.  
    2.     if(isset($_POST['add_album']))
    3.     {
    4.         $album_title = $_POST['album_title'];  
    5.         $date_of_publish = $_POST['year']."-".$_POST['month']."-".$_POST['day'];
    6.        
    7.         $adm = new Adm_controller("localhost", "andrex", "master", "web_album", $tmp);
    8.         $adm->addAlbumButton($album_title, $date_of_publish);
    9.        
    10.         $album_view = $adm->execOutputQuery("SELECT album_title FROM album_list");
    11.        
    12.         for($i=0; $i<count($album_view); $i++)
    13.             echo "
    14.                     <button><img src='album.JPG' border='0'></button>$album_view[0][$i]<br />
    15.                  ";
    16.     }
    17.  
    Класс контроллера:
    PHP:
    1.  
    2.     require_once('interface.Interface_Adm.php');
    3.     require_once('SQL_query.php');
    4.    
    5.     class Adm_controller implements Interface_Adm
    6.     {
    7.        
    8.          private $DBHost, $DBUserLogin, $DBUserPassword, $DBDefaultDataBase, $DBLink;
    9.          private $_path;
    10.          private $_albumTitle;
    11.          private $_dateOfPublish;
    12.          private $_pictureTitle;
    13.          private $_pictureDescription;
    14.          private $_publish;
    15.          private $_fileName;
    16.          private $_fileTmpName;
    17.          private $_fileType;
    18.          private $_fileSize;
    19.          
    20.          
    21.          public function __construct($DBHost, $DBUserLogin, $DBUserPassword, $DBDefaultDataBase, $albums_dir)
    22.          {
    23.             $this->DBUserLogin = $DBUserLogin;
    24.             $this->DBUserPassword = $DBUserPassword;
    25.             $this->DBDefaultDataBase = $DBDefaultDataBase;
    26.             $this->DBHost = $DBHost;
    27.             $this->_path = $albums_dir;
    28.            
    29.             $this->doConnect();
    30.          }
    31.          
    32.          public function doConnect()
    33.          {
    34.             /*
    35.             * connection to DB
    36.             */
    37.            
    38.             $this->DBLink = mysql_connect($this->DBHost, $this->DBUserLogin, $this->DBUserPassword);
    39.            
    40.             /*
    41.             *   sselect DataBase
    42.             *
    43.             *   @return boolean
    44.             */
    45.            
    46.             $this->selectDB();
    47.          }
    48.  
    49.         /**
    50.          * Select database
    51.          *
    52.          * @return boolean
    53.          */
    54.         public function selectDB()
    55.         {
    56.           return mysql_select_db($this->DBDefaultDataBase, $this->DBLink);
    57.         }
    58.  
    59.        
    60.         public function addAlbumButton($album_title, $date_of_publish)
    61.         {
    62.             $this->_albumTitle = $album_title;
    63.             $this->_dateOfPublish = $date_of_publish;
    64.            
    65.             $this->execInputQuery($add_album_query);
    66.             $this->execInputQuery($__add_album_query);
    67.            
    68.             $this->createAlbum($album_title);
    69.            
    70.         }
    71. .......
    72.         public function createAlbum($album_title)
    73.         {
    74.             $result = true;
    75.             chdir($this->_path);
    76.             $dp = opendir($this->_path);
    77.             while($some = readdir($dp))
    78.             {
    79.                 if($some != '.' && $some != '..')
    80.                 {
    81.                     if(is_dir($some))
    82.                         if($some == $album_title)
    83.                         {
    84.                             $result = false;
    85.                         }
    86.                        
    87.                 }
    88.             }
    89.             if($result)
    90.             {                      
    91.                 mkdir($this->_path."/".$album_title, 0700);
    92.                 return true;
    93.             }
    94.             else
    95.                 return false;
    96.             closedir($dp); 
    97.         }
    98.  
    99.  
    Файлик с запросами:

    PHP:
    1.  
    2.     $add_album_query = "INSERT INTO album_list VALUES (
    3.                                                         null,
    4.                                                         '$this->_albumTitle',
    5.                                                         '$this->_dateOfPublish',
    6.                                                         )
    7.                         ";
    8.     $__add_album_query = "CREATE TABLE $this->_albumTitle (
    9.                                                             id SMALLINT(5) NOT NULL AUTO_INCREMENT,
    10.                                                             picture_title VARCHAR(30) BINARY NOT NULL,
    11.                                                             picture_description VARCHAR(100) NOT NULL,
    12.                                                             publish ENUM('true', 'false') NOT NULL DEFAULT 'false',
    13.                                                             picture_file VARCHAR(50) NOT NULL,
    14.                                                             UNIQUE (id, picture_title),
    15.                                                             PRIMARY KEY (id, picture_title)
    16.                                                             )
    17.                         ";
    18.  
    И, собственно, сама ошибка:
    Fatal error: Using $this when not in object context in Z:\home\yandex\www\web_album\SQL_query.php on line 4
     
  2. admyx

    admyx Активный пользователь

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    Ошибка говорит сама за себя......
    Использование $this при попытке вызова метода \ доступа к атрибутам вне класса.
     
  3. Andrey

    Andrey Активный пользователь

    С нами с:
    3 авг 2009
    Сообщения:
    10
    Симпатии:
    0
    Адрес:
    Simferopol
    я это понял.... а как исправить???
     
  4. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    А почему контроллер получился самый "низкий" по уровню? По идее он должен связывать модель данных и представление. А тут получается вперемешку.

    Запросы в файле - жесть.

    ээ... у тебя написана сотня строк кода в ООП и ты задаешь такие вопросы?
    Наверное нужно создать экземпляр класса, чтобы использовать свойства извне его или сделать свойство статичным (если это возможно). А еще можно передать значение в глобальную область или в класс, что выше.
     
  5. Andrey

    Andrey Активный пользователь

    С нами с:
    3 авг 2009
    Сообщения:
    10
    Симпатии:
    0
    Адрес:
    Simferopol
    а насчёт контроллера - просто ещё не ковырялся в смарти, вот ща читаю, поэтому view и влеплено в контроллер
     
  6. Andrey

    Andrey Активный пользователь

    С нами с:
    3 авг 2009
    Сообщения:
    10
    Симпатии:
    0
    Адрес:
    Simferopol
    а это:
    PHP:
    1.  
    2.         $adm = new Adm_controller("localhost", "andrex", "master", "web_album", $tmp);
    3.         $adm->addAlbumButton($album_title, $date_of_publish);
    4.  
    5.