Перейти к содержимому

Реферальная программа Мегаплана

Партнерская программа Kredov

Проблема с методом в классе

#1 Kuchuluk

Kuchuluk
  • Пользователь
  • 315 сообщений
  • Репутация: 5
0

Отправлено 27 Февраль 2013 - 18:51

здравствуйте.
у меня в индексном файле подключаются сначала несколько классов, в которых есть вывод на экран. потом я подключаю класс guestbook.php
require_once 'guestbook.php';
$guestbook = new Guestbook;
$new_mess = $guestbook->insMess();
$show = $guestbook->showPosts();
echo $show;
$form = $guestbook->form();
?>
в нем есть такой метод
public function insMess()
{
  if (isset($_REQUEST["submit"]))
  {
   $name = $_REQUEST["name"];
   $email = $_REQUEST["email"];
   $mess = $_REQUEST["mess"];
   $date = date("Y-m-d");
   $array = array("name"=>$name,"email"=>$email,"mess"=>$mess,"date"=>$date,"user_id"=>1);
   $this->insert("guest",$array);
   header('Location: index.php');
  }
}
вот header выдает ошибку, что уже был вывод на экран. вопрос такой - в ООП можно так делать, что в самом начале документа подключить класс и использовать один метод, а потом в последующем к нему возвращаться еще? или как то по другому это реализуется? просто с ООП недавно начал знакомиться, таких тонкостей не знаю еще.

 

 

  • 0

#2 isvetlichniy

isvetlichniy
  • Пользователь
  • 619 сообщений
  • Репутация: 93

Отправлено 27 Февраль 2013 - 19:30

не в ту сторону копаешь, функцию header('Location: index.php'); нельзя использовать , если был произведен вывод данных в браузер до использования этой функции, например использовалось echo
  • 0

#3 Kuchuluk

Kuchuluk
    Topic Starter
  • Пользователь
  • 315 сообщений
  • Репутация: 5

Отправлено 27 Февраль 2013 - 22:45

ну я это знаю. я же говорю, что у меня до этого класса подключены другие классы, в которых срабатывают методы с выводом на экран. я и спрашиваю класс guestbook.php можно подключить вначале, чтобы использовать только метод insMess(), а потом в другом месте кода опять использовать этот класс после других классов? вообще так можно делать?
  • 0

#4 Mr.Developer

Mr.Developer
  • Пользователь
  • 73 сообщений
  • Репутация: 12

Отправлено 28 Февраль 2013 - 10:54

А в чем собственно проблема?
Раз уж у вас такая интересная реализация где редирект происходит через header() в классе guestbook то можно самом начале создать новый объект класса Guestbook, применить необходимый метод с header(), а потом снова работать с объектом Guestbook там где вам необходимо. Никуда он не денется если вы его сами где-нить выше не уничтожите.

Кстати, в безвыходных ситуациях когда нужен редирект можно выводить либо мета-тег с редиректом (w3c не одобряет) либо же js window.location.href
  • 1

#5 isvetlichniy

isvetlichniy
  • Пользователь
  • 619 сообщений
  • Репутация: 93

Отправлено 28 Февраль 2013 - 16:10

я и спрашиваю класс guestbook.php можно подключить вначале, чтобы использовать только метод insMess(), а потом в другом месте кода опять использовать этот класс после других классов?

да подключить можно где угодно его, в любом месте. вопрос в том, где будет использоваться метод с редиректом. если после вывода на экран, то опять история повторится

я использую вот это, как бы это не выглядело. но работает в любом месте

function redirect($url){
echo '<script>window.location=''.$url.''</script>';
}

  • 1

#6 Kuchuluk

Kuchuluk
    Topic Starter
  • Пользователь
  • 315 сообщений
  • Репутация: 5

Отправлено 28 Февраль 2013 - 22:25

я использую вот это, как бы это не выглядело. но работает в любом месте

function redirect($url){
echo '<script>window.location=''.$url.''</script>';
}

спасибо, хороший метод, его попробую использовать.

Кстати, в безвыходных ситуациях когда нужен редирект можно выводить либо мета-тег с редиректом (w3c не одобряет) либо же js window.location.href

прямо в метатег вставлять php код с проверкой нажатия кнопки?
  • 0

#7 Mr.Developer

Mr.Developer
  • Пользователь
  • 73 сообщений
  • Репутация: 12

Отправлено 01 Март 2013 - 09:52

прямо в метатег вставлять php код с проверкой нажатия кнопки?


По способу с js вам чуть выше уже привели полный рабочий пример.
С мета-тегом это вывод <meta http-equiv="Refresh Content="0; URL=./dir/"> вместо того яваскрипта. Из плюсов - не нужна поддержка js, из минусов - не одобряет w3c

Сам использую метод с window.location
  • 0


Оформление форума – IPBSkins.ru