[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: php от Котерова - mvc
m4a1fox
Добрый день всем. Сейчас читаю книгу Котерова. И собственно вопрос по поводу его главы про mvc. Вот такая делема, Котеров реализует mvc на файлах... Как быть если я хочу реализовать mvc на MySQL? То есть, вот файлы.
view.php


<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Гостевая книга</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    </head>
    <body>
        <h2>Добавить свое сообщение</h2>
        <form action="controller.php" method="post">
            Ваше имя: <input type="text" name="new[name]" /><br />
            Комментарий: <br />
            <textarea name="new[text]" cols="60" rows="5"></textarea><br />
            <input type="submit" name="add" value="Добавить!" />
        </form>
        <h2>Гостевая книга:</h2>
        <?php
       
        foreach ($book as $id=>$e)
        {
        ?>
        имя: <?php echo $e['name']?><br />
        Комментарий: <?php echo nl2br($e['text'])?><hr />
        <?php }?>
    </body>
</
html>


файл controller.php

<?php
/*
* file by m4a1fox
* year - 2011
*/

define ("GBook", "gbook.dat");
require_once './model.php';

$book = LoadBook (GBook);

if (!empty ($_REQUEST['add'])) {
    $book = array (time ()=>$_REQUEST['new']) + $book;
    SaveBook (GBook, $book);
}
include './view.php';
?>


и собственно файл model.php

<?php
/*
* file by m4a1fox
* year - 2011
*/

function LoadBook ($fname) {
    if (!file_exists($fname))        return array ();
    $book = unserialize(file_get_contents($fname));
    return $book;
}

function SaveBook ($fname, $book) {
    file_put_contents($fname, serialize($book));
}
?>


понимаю, что нужно как то изменить файл model.php. Подскажите как тут быть?



Спустя 5 минут, 51 секунда (30.05.2011 - 15:57) XCross написал(а):
на irbis-team почитай. Там какраз по твоей части раздел есть. А точнее . Первая-это гостевуха на файлах, а вторая какраз на mysql

Спустя 6 минут, 34 секунды (30.05.2011 - 16:04) m4a1fox написал(а):
kmaks
Это уже читал... Не так давно... Но много вопросов.... Ладно, буду дальше воевать.

Спустя 40 минут, 45 секунд (30.05.2011 - 16:44) Dezigo написал(а):
Сделай в модели метод на запрос к бд и метод получение данных. А в контроллере вывозв методов из этой модели.
Логика не меняется.

Спустя 8 минут, 42 секунды (30.05.2011 - 16:53) m4a1fox написал(а):
Dezigo
Метод.... значит ооп. Без ооп никак?

Спустя 22 минуты, 39 секунд (30.05.2011 - 17:16) s909 написал(а):
можешь оставить те же функции, но естественно содержимое поменяй. В LoadBook mysql_query("SELECT....");
В SaveBook mysql_query("INSERT ...");

Спустя 9 минут, 23 секунды (30.05.2011 - 17:25) m4a1fox написал(а):
s909
Вот так?

function LoadBook ($book) {
$b = mysql_query("SELECT * FROM guest");
$book = mysql_fetch_assoc($b);
return $book;
}

Спустя 5 минут, 32 секунды (30.05.2011 - 17:31) s909 написал(а):
почти) главное используй цикл, что бы вывести все!

Спустя 3 минуты, 50 секунд (30.05.2011 - 17:34) m4a1fox написал(а):
s909
Вот с циклом маленькая запарка, как они работают я понимаю, как их делать тоже, но вот проблема в том, что даже не могу представить себе, как вывести LoadBook в рабочую среду.

Спустя 14 минут, 42 секунды (30.05.2011 - 17:49) m4a1fox написал(а):
Вот тут

function LoadBook ($book) {
$b = mysql_query("SELECT * FROM guest");
$book = mysql_fetch_assoc($b);
return $book;
}

цикла не получается, наверно в этот код необходимо что то добавить дабы получился цикл... или надо добавлять уже в view.php?

Спустя 5 минут (30.05.2011 - 17:54) m4a1fox написал(а):
Добавил строку с циклом

function LoadBook($book) {
$b = mysql_query("SELECT * FROM guest");
$book = mysql_fetch_assoc($b);
foreach ($book as $id=>$e)
{
$book[] = $e['name']." ".$e['text'];
}
return $book;
}


вот так вывожу

echo '<pre>';
echo print_r (LoadBook($book));
echo '</pre>';

но все равно только одна запись выходит

Спустя 32 минуты, 33 секунды (30.05.2011 - 18:27) denash написал(а):
cool.gif

Спустя 1 минута, 21 секунда (30.05.2011 - 18:28) m4a1fox написал(а):
denash
Я про защиту почти не думаю... оно сейчас мне и не надо... я структурно хочу понять, понимаете?

Спустя 3 минуты, 17 секунд (30.05.2011 - 18:31) m4a1fox написал(а):
Вот так почему-то выводит

Array
(
[
id] => 40
[name] => Макисм
[text] => Привет мир
[0] => 4 4
[1] => &#65533; �
[2] => &#65533; �
)
1

Спустя 1 минута, 53 секунды (30.05.2011 - 18:33) s909 написал(а):
используй что-то типо этого:

<?php

header("Content-Type: text/html; charset=utf-8");
function LoadBook ($table) {
include $_SERVER['DOCUMENT_ROOT'] ."/connect.php" ;
mysql_query('SET NAMES utf8');
$result = mysql_query("SELECT * FROM $table");
return $result;
}

$book = LoadBook ("pages");
while($myrow=mysql_fetch_assoc($book)){
echo $myrow['id'], "<br>";
echo $myrow['txt'], "<br><hr>";}
?>
думаю модель от вида отделишь сам!

Спустя 10 минут, 58 секунд (30.05.2011 - 18:44) m4a1fox написал(а):
s909
Исходя из Вашего последнего сообщения, можно предположить что.

model.php

function LoadBook ($table) {
$result = mysql_query("SELECT * FROM $table");
if (mysql_num_rows($result) > 0)
{
return $result;
}
return NULL;
}


controller.php

$book = LoadBook("guest");


view.php

<?php
while($myrow=mysql_fetch_assoc($book)){
echo $myrow['name'], "<br>";
echo $myrow['text'], "<br><hr>";}
?>


Так получается?

Спустя 1 минута, 29 секунд (30.05.2011 - 18:46) sharki написал(а):
m4a1fox
В view.php ты должен собрать некий массив который ты расфоречишь в TPL, ну или сразу в TPL делаешь assoc...

Спустя 5 минут, 43 секунды (30.05.2011 - 18:51) m4a1fox написал(а):
sharki
А поподробнее... если есь желание?

Спустя 14 минут, 6 секунд (30.05.2011 - 19:05) sharki написал(а):
m4a1fox
самая стандартная реализация заключается в 5 файлах, index.php model.php controller.php view.php и самого файла шаблона допустим view.tpl где собсна находится преставление HTML разметка и многое другое, в этом файле ты можешь что-то вывести в цикле, чтобы не затрагивать файлы логики, в них не желательно писать echo бла бла; за это отвечает

view.tpl

<html>
<body>
<?php
while($myrow=mysql_fetch_assoc($book)) : ?>


<div> <?php
echo $myrow['name']; ?> <br> </div>
<div> <?php
echo $myrow['text']; ?> <hr> </div>


<?php
endwhile;?>

.....
....
....
</html>



Спустя 3 минуты, 53 секунды (30.05.2011 - 19:09) m4a1fox написал(а):
sharki
View.tpl - это файл представления, и он реализует всю логику, плюс включает в себя и model.php и controller.php а его вывод грузится в index.php... Правильно ли я вас понял?

Спустя 2 минуты, 27 секунд (30.05.2011 - 19:12) sharki написал(а):
m4a1fox
он ничего не реализует, он всего лишь предоставляет то что ты уже реализовал в
model.php controller.php и view.php. index.php только лишь подключает нужные контроллеры, в то же время контроллер подключает внутри себя model.php и view.php, где view.php подключает view.tpl

Спустя 11 минут, 40 секунд (30.05.2011 - 19:23) m4a1fox написал(а):
sharki
Мдя.... и это называется легче.... Ладно... Буду пробовать... Спасибо.

Спустя 2 минуты, 27 секунд (30.05.2011 - 19:26) sharki написал(а):
m4a1fox
Всё это рассказывается на irbis'e даже разжовывая это) здесь ничего трудного, только понять логику программы, что и когда подключается, как бы следя за выполнением кода PHP мысленно

Спустя 3 минуты, 12 секунд (30.05.2011 - 19:29) m4a1fox написал(а):
sharki
Я читал на irbis'e.....

Спустя 47 минут, 18 секунд (30.05.2011 - 20:16) m4a1fox написал(а):
sharki
Значит, во всей этой структуре главный - controller.php?

Спустя 5 минут, 50 секунд (30.05.2011 - 20:22) sharki написал(а):
m4a1fox
ну да, у каждого модуля свой, и название следовательно read_controller.php

а в индексе типа такой строки

include './modules/'.$_GET['page'].'/'.$_GET['rem'].'_controller.php';


ссылка сайта

www.site.ru/?page=news&rem=read  


page=news - здесь news это папка с модулем, rem=read - read тут префикс контроллера, допустим может быть add_controller.php и он уже что-то другое выполняет.

PS Только надо пилить по своему вкусу, и конечно же делать всевозможные проверки и т.п...

Спустя 3 часа, 54 минуты, 48 секунд (31.05.2011 - 00:17) denash написал(а):
Цитата (m4a1fox @ 30.05.2011 - 15:28)
denash
Я про защиту почти не думаю... оно сейчас мне и не надо... я структурно хочу понять, понимаете?

Извините, я не по ошибке сюда написал, я не в ту тему случайно зашёл.
Быстрый ответ:

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