За последние 24 часа нас посетили 133769 программистов и 2850 роботов. Сейчас ищут 1509 программистов ...

Вопрос с ООП

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

  1. Михаил

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

    С нами с:
    12 июл 2009
    Сообщения:
    545
    Симпатии:
    0
    Адрес:
    Bielarus
    Привет!

    написал довольно скудный класс, осваивая ООП, но что-то идёт не так, хотя и работает:
    PHP:
    1. <?php
    2. class Inquest
    3.  {
    4.  public $up;
    5.  
    6.  function __Construct()
    7.   {
    8.  
    9.   $this->up=$n;
    10.  
    11.   }
    12.  
    13. public function add()
    14.  {
    15.     print"<form method='POST'>";
    16.     print"Вопрос:<input type=text size=45 maxsize=45 name='question'><br>";
    17.     print"Ответ:<textarea cols=33 rows=16 name='answer'>";
    18.     print"</textarea>
    19.    <input type=submit value='Отправить'></form>";
    20.  }
    21. public function add_q($answer,$question)
    22.   {
    23.     $link=mysql_connect("localhost","root","1234");
    24.     mysqL_select_db("mybd",$link);
    25.     $i=$this->up+1;
    26.     $query="INSERT INTO quest VALUES($i,'$answer','$question')";  
    27.     mysql_query($query,$link)or print mysql_error();
    28.     return true;
    29.   }
    30.    }
    31.  
    32.  
    33.        
    34.  
    35.  
    36.  
    37. $n= new Inquest();
    38. $n->add();
    39.  if (isset($_POST['question'],$_POST['answer']))
    40.   {
    41.   $m=$n->add_q($_POST['question'],$_POST['answer']);
    42.    if ($m==true)
    43.     {print "Ok!";}
    44.    else {print "No";}
    45.   }
    46.  
    47. phpinfo(32);
    48. ?>
    49.  
    Вот вроде всё работает, но при каждом обновлении в браузере, когда просматриваю, он добавляет ноую запись в БД, как этого избежать и можно ли всё это выполнять в одной функции, а не в двух как я сделал, и если возможно как это организуется?

    Спасибо.
     
  2. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    и при чем тут ООП?
     
  3. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Это не ООП, это дерьмо собачье.
    Мало того, что непонять откуда в конструкторе взята переменная $n, так ещё и метод add до неприличия дибилен и ничерта полезного не делает.
    Задача ООП в АБСТРАКЦИИ, а то, что вы делаете — это вообще нельзя назвать ООП.
     
  4. Михаил

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

    С нами с:
    12 июл 2009
    Сообщения:
    545
    Симпатии:
    0
    Адрес:
    Bielarus
    ни шутя...
    ну почти ооп, ну дерьмо...
    ну да с конструктором я конечно не ошибся, но там просто она так была,
    PHP:
    1.  
    2. <?php
    3. __construct($n)
    4.  {
    5.  $this->up=$n;
    6.  }
    7.  ?>
    8.  
    вот... не все ж такие вумные как вы тут...
    +1
    я и спросил как туда добавить add_q, чтобы всё вполне номрально работало...
     
  5. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    для начала, напиши это без ООП. чтобы работало.
     
  6. Михаил

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

    С нами с:
    12 июл 2009
    Сообщения:
    545
    Симпатии:
    0
    Адрес:
    Bielarus
    Вот дельный совет...
    спасибо!
     
  7. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Михаил
    То, что вы написали — это не ООП.
    На таких примерах ООП не учат, учтите.
    Дам абстрактный пример, который ничего не делает, но демонстрирует кое какие принципы:

    PHP:
    1. <?php
    2.  
    3. class Inquest
    4. {
    5.     protected $up;
    6.    
    7.     /**
    8.      * Конструктор изменяет значение закрытого члена
    9.      */
    10.     public function __construct($some_arg)
    11.     {
    12.         if(intval($some_arg) < -3)
    13.             $this->up = (int) $some_arg;
    14.     }
    15.    
    16.     /**
    17.      * Добавление какого-либо контента
    18.      */
    19.     public function Add($content)
    20.     {
    21.         // Проверка
    22.         if(!$this->up) throw new Exception("Cannot add content");
    23.        
    24.         if(($mysql = Allocate::GetActiveLink())) {
    25.             $this->AddQuery($content);
    26.         }
    27.     }
    28. };
    29.  
    30. ?>
     
  8. Михаил

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

    С нами с:
    12 июл 2009
    Сообщения:
    545
    Симпатии:
    0
    Адрес:
    Bielarus
    Спасибо Apple

    Сказал спасибо, просмотрел совет...
    суперглобально и классно абстрактно!
    Ещё раз спасибо.