|
|
|
| Здравствуйте, доброго дня. Реализовал систему опросов (вывод из бд, редактирование, удаление, добавление) в процедурном стиле. Все делал не разом, а разбив на подзадачи, т.е сначало вывод опроса на экран, затем голосование и т.д. Теперь задача все это сделать по принципу ООП. Опять же хочу сначала сделать грамотно для отдельной операции (тот же вывод из базы), а затем уже сделаю для всего остального. Вот например процедурный код вывода опроса для голосования из БД
/достаем опросы
function get_poll() {
$query = "SELECT `id`,`name` FROM `poll` WHERE `status` = 'active'";
$result = mysql_query($query);
if(mysql_num_rows($result)) {
while($row = mysql_fetch_assoc($result)) {
$res[] = $row;
}
} else {
$res = false;
}
return $res;
}
//выводим опросы -КОНТРОЛЛЕР
function print_polls($poll) { //$poll - массив
if($poll === false) {
echo "<p>У нас нет опросов</p>";
} else {
foreach($poll as $row) {
echo "<p><a href='?poll=".$row['id']."'>".$row['name']."</a></p>";
}
}
}
//выводим опрос ДЛЯ ДОБАВЛЕНИЯ ГОЛОСОВ
function print_poll($poll) { //$poll - id
$query = "SELECT `id`,`name` FROM `poll` WHERE `id`=".$poll;
$result = mysql_query($query);
if(mysql_num_rows($result)) {
$row = mysql_fetch_assoc($result);
echo "<p>Опрос: ".$row['name']."</p>";
echo "<form name='form1' method='post' action = 'vote_add.php' >"; // передача данных голосования в форму
print_questions($row['id']);
echo "<input type='submit' value='Отослать форму'>";
echo "</form>";
} else {
echo "<p>А нет такого опроса!</p>";
}
}
//достаем вопросы опроса
function get_questions($poll) {
$query = "SELECT `id`,`name`,`type`, `require` FROM `question` WHERE `poll_id` = ".$poll;
$result = mysql_query($query);
if(mysql_num_rows($result)) {
while($row = mysql_fetch_assoc($result)) {
$res[] = $row;
}
} else {
$res = false;
}
return $res;
}
//достаем ответы вопроса
function get_answers($question) {
$query = "SELECT `id`,`name`,`vote_count` FROM `answer` WHERE `question_id` = ".$question;
$result = mysql_query($query);
if(mysql_num_rows($result)) {
while($row = mysql_fetch_assoc($result)) {
$res[] = $row;
}
} else {
$res = false;
}
return $res;
}
//выводим вопрос
function print_questions($poll) {
$result = get_questions($poll);
$i = 1;
if($result === false) {
echo "<p>Тут вопросов нет</p>";
} else {
foreach($result as $question) {
if ($question['require']== obliging){ // обязательный - необязательный вопрос
$str = "*";
}else {
$str = "";
}
echo "<p><strong>".$i.". ".$question['name']." ".$str."</strong></p>";
print_answers($question['id'],$question['type']);
$i++;
}
}
}
//выводим ответы
// ДЛЯ ВЫВОДА ФОРМЫ ПРОХОЖДЕНИЯ ГОЛОСОВАНИЯ
function print_answers($question,$type) {
$answers = get_answers($question);
if($answers === false) {
echo "<p>Ответов не видать</p>";
} else {
if($type == 'radio') {
foreach($answers as $answer) {
echo "<p><input type='radio' name='answer_".$question."' value='".$answer['id']."' /> ".$answer['name']."</p>";
}
}
if($type == 'chek') {
foreach($answers as $answer) {
echo "<p><input type='checkbox' name='answer_".$question."_".$answer['id']."' value='".$answer['id']."'/> ".$answe'name']."</p>";
}
}
}
}
Ну и далее в файле index.php например вывод списка опроса и вывод формы при нажатии на нужный опрос
PHP:
скопировать код в буфер обмена
//выводим ссылки на опросы
$poll = get_poll();
print_polls($poll);
if($poll_id=(int)$_GET['poll']) {
print_poll($poll_id);
}
|
Ну и далее в файле index.php например вывод списка опроса и вывод формы при нажатии на нужный опрос
//выводим ссылки на опросы
$poll = get_poll();
print_polls($poll);
if($poll_id=(int)$_GET['poll']) {
print_poll($poll_id);
}
|
Как я начал было делать. Сделать три сущности - опрос, вопрос, ответ и плюс ко всему разделить каждую сущность на три класса по модели MVC- то-есть запрос в бд, обработка, вывод. Но вышел какой то бардак, + понадобилось из метода класса опроса вызывать метод класса вопроса, Как это сделать? Или объявлять методы вопроса и ответа статистическими чтобы оптом обращаться внутри методов опроса ClassName::print_answers() например? во общем что то дают разные советы, общей картины в голове нету. Прошу помощи в общей логике ну и если на конкретном данном примере сделать что то получится и станет ясна суть, остальное думаю также и до реализую. Спасибо! | |
|
|
|
|
|
|
|
для: naruto
(10.03.2012 в 14:28)
| | MVC это не панацея от всех бед. Для опросов особого смысла нет писать обертку для работы с базой да. У тебя все равно не будет более одного экземпляра класса, так что руководствуясь одним известным принципом советую так не делать
// А вот с базой работать удобно
$page = $db->findByField('pages', 'alias', $alias, 'title, keywords, description, html');
$db->insert('pages', $data);
$db->update('pages', $data, $id);
// delete, find & etc | |
|
|
|
|
|
|
|
для: Красная_шляпа
(10.03.2012 в 17:20)
| | Ну вот я и спрашиваю как сделать лучше, тоесть все разбить на три класса? опрос, вопрос, ответы? Внутри них уже методы относящиеся к ударениям добавлениям и т.д? | |
|
|
|
|
|
|
|
для: naruto
(10.03.2012 в 20:42)
| | Не переделывать вообще - получится плохо, проектировать с нуля, с прицелом повторного использования классов в нескольких проектах/приложениях. Создайте удобный язык с использованием классов, а уже при помощи этого языка создайте приложение (понятно, что должно получаться легче и удобнее, разработки приложения с нуля). Вот ООП пользу приносит где-то на таком уровне... | |
|
|
|
|
|
|
|
для: cheops
(10.03.2012 в 21:56)
| | Суть вопроса видимо не так передал) тут сейчас не выбор - оставить процедурно или перевести в ООП, а - сделать используя парадигму ООП. А раз так надо-то вот и спрашиваю-как это сделать правильнее | |
|
|
|