[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Связь контроллера с видом
ola_sh
Controller:

<?php

if ( ! defined('BASEPATH')) exit('No direct script access allowed');

include_once('m/model.php');
include_once('c/C_Base.php');
include_once('m/startup.php');

//
// Конттроллер страницы вывода всех вопросов.
//

class C_Questions extends C_Base
{
private $text; // текст

//
// Конструктор.
//

function __construct()
{
parent::__construct();
$this->needlogin = true;
}

//
// Виртуальный обработчик запроса.
//

protected function OnInput()
{
parent::OnInput();

$this->title = $this->title . ' :: Questions';

$Model = Model::Instance();


//получение всех вопросов без ответов
$get_not_answerd = $Model->get_not_answerd();

$this->text = array();

// Вывод всех вопрсов с ответом, по времени
foreach ($get_not_answerd as $key => $value)
{
if($value['time_answer'] != null)
{
$time = $Model->time($value['time_answer']);
$value['time'] = $time;
$this->text[$key] = $value;
}
else
{
$time = $Model->time($value['time_question']);
$value['time'] = $time;
$this->text[$key] = $value;
}

}


$arr = array();

foreach($this->text as $value)
{
++$i;
$arr[$i][$value['id_login']] = $value['id'];

}

//
// Проверка отправка формы ответа
//


foreach ($arr as $array)
{
foreach($array as $key => $arr1)
{

// Добавление ответаe
if(isset($_POST[$arr1]))
{

$Model->add_answer($_SESSION['id_user'], $arr1, $_POST['answer'],
date('Y-m-d H:i:s'));


if($key != null)
{
// Создание connection
$Model->make_connect($_SESSION['id_user'], $key);

$mUser = M_Users::Instance();

// Данные для отправки уведомления
$user = $mUser->GetById($key);
$who = $mUser->GetById($_SESSION['id_user']);

// Отправка уведомления об ответе
$Model->send_email($user['login'], 'answer', $user['email'],
$user['recive_email'], $empty, $who['login']);
}

header('Location: /account/questions');
die();
}

// Удаление вопроса
if(($_GET['a']) == 'delete')
{

$Model->delete_question($_GET['id']);
header('Location: /account/questions');

}
}
}
}


//
// Виртуальный генератор HTML.
//

protected function OnOutput()
{
$vars = array('text' => $this->text, 'user' => $this->user);
$this->content = $this->Template('v/v_questions.php', $vars);

parent::OnOutput();
}
}





View:

<? if(empty($text)): ?>
<strong>Tell your friends you want more questions on Formspring!</strong><br /><br />
<
textarea cols="60" >
Ask me anything http://test2.ru/<?=$user['login']?></textarea>
<!-- END MAIN -->
<? else: ?>
<?
foreach($text as $key => $value): ?>
<?
if(($value['parent_id'] == null) && ($value['answer'] != null)): ?>
<div class="post-snippet">
<
strong><?=$value['question']?></strong><br/><br/><?=$value['answer'] ?><br/>
<
font size="1" face="Arial">You responded
<? if($value['login'] != null): ?>
to <a href="/<?=$value['login'] ?>"><?=$value['login']?></a>
<? endif ?>
<?=
$value['time']?></font><br/>
<? $text1 = array_reverse($text) ?>
<?
foreach($text1 as $key1 => $value1): ?>
<?
if(($value['id'] == $value1['parent_id']) && ($value1['answer'] != null)): ?><br/>

<
strong><?=$value1['question']?></strong>
<
br /><br />
<?=$value1['answer']?>
<br />

<
font size="1" face="Arial">You responded
<? if($value1['login'] != null): ?>
to <a href="/<?=$value1['login'] ?>"><?=$value1['login']?></a>
<? endif ?>
<?=
$value1['time']?><br/>
</
font> <? endif ?>
<?
endforeach ?> ----------------------
<? foreach($text1 as $key2 => $value2): ?>
<?
if(($value['id'] == $value2['parent_id']) && ($value2['answer'] == null)): ?>
<br/>
<
strong><?=$value2['question']?></strong>
<
br /><br />
<
font size="1" face="Arial">
<? if($value2['login'] != null): ?>
<a href="/<?=$value2['login'] ?>"><?=$value2['login']?></a>
<? else: ?>
Someone
<? endif ?>ask you
<?=$value2['time']?></font>
<
form method="post">
<
textarea cols="70" name="answer"></textarea>
<
input type="submit" name = "<?=$value2['id'] ?>" value="Post Response" />
</
form>
<
a href="/account.php?c=questions&a=delete&id=
<?=
$value2['id']?>" >Delete</a>
<? endif ?>
<?
endforeach ?>
</div>
<? elseif(($value['parent_id'] == null) && ($value['answer'] == null)): ?>
<div class="post-snippet">
<
strong><?=$value['question']?></strong><br/>
<
font size="1" face="Arial">
<? if($value['login'] != null): ?>
<a href="/<?=$value['login'] ?>"><?=$value['login']?></a>
<? else: ?>
Someone
<? endif ?>ask you
<?=$value['time']?></font>
<
form method="post">
<
textarea cols="70" name="answer"></textarea>
<
input type="submit" name = "<?=$value['id'] ?>" value="Post Response" />
</
form>
<
a href="/account.php?c=questions&a=delete&id=<?=$value['id']?>" >
Delete</a>
</
div>
<? endif ?>
<?
endforeach ?>
<?
endif?>
</div>


Скрин выполнения скрипта:

http://i55.tinypic.com/2czwtpe.jpg

Вообщем логика такая я каждой кнопке присваиваю число-идентификатор вопроса, делаю это я для того чтобы мой контроллер узнал какая именно кнопка была нажата во view( последний foreach в контроллере), а удаляю по ссылке delete методом GET, куда передается id вопроса, но сейчас вот только понял, что какой-нибудь хукер, может одним скриптом удалить всем мой записи в базе данных на раз, поэтому прошу у вас помощи, как мне дать знать контроллеру что я хочу удалить именно этот вопрос, или хочу ответить именно на этот вопрос.

P.S. только пришло в голову как обезопасить от удаления вопросов, 1)проверять на наличие сессии и проверять относиться ли этот вопрос к этому пользователю
2)Удалять только те вопросы у которых поле answer null.

P.S.S не смотрите на дизайн и html, пока дизайнер и верстальщик не работал.



Спустя 12 минут, 14 секунд (13.05.2011 - 18:59) inpost написал(а):
<?php - пиши полный, а не сокращенный.

Хотя что делает данный класс?

Спустя 5 минут, 17 секунд (13.05.2011 - 19:04) ola_sh написал(а):
Данный класс выводит все вопросы без ответа для авторизованного пользователя, если вы зарегистрированы на formsrping.me, спрашивай.ру вы должны знать.

Спустя 3 часа, 28 минут, 14 секунд (13.05.2011 - 22:32) ola_sh написал(а):
Ну что никто знает как улучшить скрипт?

Спустя 12 часов, 17 минут, 54 секунды (14.05.2011 - 10:50) ola_sh написал(а):
ап


_____________
С Уважением ola_sh
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.