С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/64: Рейтинг темы: голосов - 64, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 21.07.2011
Сообщений: 61

Вывод данных из БД MySQL с использованием MVC и ООП

21.02.2012, 13:27. Показов 11950. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Есть БД testing с таблицей testing с тремя полями: id, FIO, gryppa. Есть файл index.php следующего содержания:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$connect = mysql_connect('localhost','root','');
$op      = mysql_select_db("testing",$connect);
 
$result  = mysql_query("SELECT * FROM testing");
 
$n = mysql_num_rows($result);
 
echo "<table border=1>";
 
for($i=0;$i<$n;$i++) {
    echo "<tr><td>",mysql_result($result,$i,FIO),"</td><td>",mysql_result($result,$i,gryppa),"</td></tr>";
    }
 
echo "</table>";
Вопросов 2:
1) Как переделать код с использованием MVC (то есть разделить на view.html и controller.php)?
2) Как переписать код с использованием объектно-ориентированной парадигмы?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.02.2012, 13:27
Ответы с готовыми решениями:

Переход с mysql на mysqli ООП + MVC
Здравствуйте. Было написано несколько проектов mysql + MVC. Есть желание перейти на mysqli ООП + MVC. Но я не очень понимаю сам принцип и...

-ООП+ -MVC Выборка данных из БД
Всем привет! Столкнулся с проблемой логики))))Точнее с логикой проблемы у меня видимо)) Из названия темы видно, что я пытаюсь изучить... ...

Вывод из БД с использованием ООП, PDO и namespace
Код работает, правильно ли я всё сделал? Какие недочёты есть? index.php &lt;?php header('Content-Type: text/html;...

13
 Аватар для nonamez123
189 / 185 / 54
Регистрация: 23.10.2010
Сообщений: 1,336
21.02.2012, 13:53
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 
 
 
<?php
class MyClass extends database
{   
    var $data_array=array();
 
    function __construct(){
        parent::connect();
        self::add_data_to_db();
        self::get_data_from_db();
        parent::close();
        self::find();
        self::format_data();
    }
 
    function get_data_from_db() {
        $query = ("SELECT * FROM testing");
        $result = mysql_query($query) or die(mysql_error());
 
        //тут формируем массив с данными
    }
 
    function format_data(){
        //тут выводим инфу
    }
 
 
}
 
class database{
        
        var $conn;
 
        public function connect() {
            $server="localhost";
            $user="root";
            $password="159753";
            $db="meniu";
 
            $this->conn=mysql_connect($server, $user, $password) or die(mysql_error());
 
            if(mysql_select_db($db)){
                //echo "ok";
            }
        }
 
        function close(){
            mysql_close($this->conn);  
        }
 
 
 
}
new MyClass;
?>
1
0 / 0 / 0
Регистрация: 21.07.2011
Сообщений: 61
21.02.2012, 14:14  [ТС]
А для формирования данных и вывода надо как-то использовать массив, что был ранее объявлен? А то при
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    function get_data_from_db() {
        $query = ("SELECT * FROM testing");
        $result = mysql_query($query) or die(mysql_error());
 
        //тут формируем массив с данными
    }
 
    function format_data(){
        echo "<table border=1>";
    for($i=0;$i<$n;$i++) {
        echo "<tr><td>",mysql_result($result,$i,FIO),"</td><td>",mysql_result($result,$i,gryppa),"</td></tr>";
        }
        echo "</table>";
    }
Выводится только пустая таблица
0
 Аватар для nonamez123
189 / 185 / 54
Регистрация: 23.10.2010
Сообщений: 1,336
21.02.2012, 14:19
ну по стандартам программирования красивого или хз как это там назвать... В общем вывод из базы и формирование инфы в html не может должно быть... Как-то так... Я пока сам в эти стандарты не вникаю...
0
 Аватар для __PION__
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
21.02.2012, 16:05
что за запись такая?
Цитата Сообщение от Няшная няшка Посмотреть сообщение
function format_data(){
echo "<table border=1>";
for($i=0;$i<$n;$i++) {
echo "<tr><td>",mysql_result($result,$i,FIO), "</td><td>",mysql_result($result,$i,gryppa) ,"</td></tr>"; }
echo "</table>"; }
почему 2 раза используется mysql_result??? Сделайте массив из данных и цыклом выведите где хотите, хоть в таблице, или просто так

Добавлено через 31 минуту
а еще mvc с ооп, ..
думаю эта ф-я не нужна
Цитата Сообщение от Няшная няшка Посмотреть сообщение
function format_data(){
В классе есть метод get_data_from_db(), который возвращает массив данных (Этот и подобные ему классы и образуют модель, т.е., они ничего сами по себе не делают, это есть чистая логика, а действие совершают Контроллеры), теперь надо обратиться к нему (вот тут пишем все в контроллере). Чтобы обратиться к методу класса нужен объект класса
PHP
1
2
3
4
5
6
// вот наш объект
$obj = new MyClas;
 
// теперь вытащим наши данные обратившись к методу класса через объект
// не уверен за правильность написания, с ООП знаком поверхностно
$data = $this->obj->format_data();
Теперь в $data массив данных из БД. Теперь можно подключить
Цитата Сообщение от Няшная няшка Посмотреть сообщение
view.html
и передать туда наш массив и цыклом вывести
1
0 / 0 / 0
Регистрация: 21.07.2011
Сообщений: 61
21.02.2012, 23:28  [ТС]
О, всем чмоки, всё работает!
model.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php 
class database{
        
    var $connect;
    var $selectDatabase;
 
    public function connect() {
        $server   = "localhost";
        $user     = "root";
        $password = "";
        $db       = "testing";
 
        $this->connect        = mysql_connect($server, $user, $password) or die(mysql_error());
        $this->selectDatabase = mysql_select_db($db); 
        
    }
 
    function close(){
        mysql_close($this->conn);  
    }
 
}
?>
controller.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php 
include_once 'model.php';
 
class GetDataFromDatabase extends database
{   
    var $FIO    = array();
    var $gryppa = array();
    var $numRows;
 
    function __construct(){
        parent::connect();
        self::get_data_from_db();
        parent::close();
    }
 
    function get_data_from_db() {
        $query  = ("SELECT * FROM testing ORDER BY id");
        $result = mysql_query($query) or die(mysql_error());
        
        $i = 0;
        while ($myrow = mysql_fetch_array ($result)) {
            $this->FIO[$i]=$myrow['FIO'];
            $this->gryppa[$i]=$myrow['gryppa'];
            $i++;
        }
        $this->numRows = $i;
    }
 
}
?>
view.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php include_once 'controller.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>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
</head>
 
<body>
<table>
 
<?php 
$GetDataFromDatabase = new GetDataFromDatabase;
$i = 0;
while ($i <= $GetDataFromDatabase->numRows) {
    echo "<tr><td>".$GetDataFromDatabase->FIO[$i]."</td><td>".$GetDataFromDatabase->gryppa[$i]."</td></tr>";
    $i++;    
}
?>
 
</table>
</body>
</html>
Но 2 вопроса остались:
1) Зачем нужен function __construct()?
2) Можно ли переписать представленный ниже блок не по принципу "вставка HTML в PHP", а по принципу "вставка PHP в HTML"?
PHP
1
2
3
4
5
6
7
8
<?php 
$GetDataFromDatabase = new GetDataFromDatabase;
$i = 0;
while ($i <= $GetDataFromDatabase->numRows) {
    echo "<tr><td>".$GetDataFromDatabase->FIO[$i]."</td><td>".$GetDataFromDatabase->gryppa[$i]."</td></tr>";
    $i++;    
}
?>
0
 Аватар для __PION__
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
22.02.2012, 01:08
Цитата Сообщение от Няшная няшка Посмотреть сообщение
1) Зачем нужен function __construct()?
в мануал http://www.php.ru/manual/language.oop5.decon.html
Цитата Сообщение от Няшная няшка Посмотреть сообщение
2) Можно ли переписать представленный ниже блок не по принципу "вставка HTML в PHP", а по принципу "вставка PHP в HTML"?
вабще то так и должно быть, вот так
Цитата Сообщение от Няшная няшка Посмотреть сообщение
<?php include_once 'controller.php';?>
не совсем правильно.
Лучше думаю создвать в каждом разделе (модуле, например модуль - новости. Каждый модуль лучше разместить в отдельную папаку с соответсвующим названием) спец. файл (маршрутизатор), назовем его route.php
В этом файле подключаем нужный котроллер текущего модуля и файл view.php, именно *.php расширение, а в этом файле уже switch'ом переключаешь нужные *.html (или *.tpl) шаблоны.
0
0 / 0 / 0
Регистрация: 21.07.2011
Сообщений: 61
22.02.2012, 01:31  [ТС]
А можно сказать про конструктор, что при создании экземпляра конструктор показывает в каком порядке должны выполняться функции класса?
0
163 / 163 / 9
Регистрация: 08.01.2011
Сообщений: 850
22.02.2012, 16:33
Как задашь так и будут выполняться.
PHP синхронный язык.
0
0 / 0 / 0
Регистрация: 02.05.2015
Сообщений: 1
02.05.2015, 21:24
PHP
1
2
3
4
5
6
7
8
<?php 
$GetDataFromDatabase = new GetDataFromDatabase;
$i = 0;
while ($i <= $GetDataFromDatabase->numRows){
    echo "<tr><td>".$GetDataFromDatabase->FIO[$i]."</td><td>".$GetDataFromDatabase->gryppa[$i]."</td></tr>";
    $i++;    
}
?>
Данный код можно написать так:
PHP
1
2
3
4
5
6
7
<?
$GetDataFromDatabase = new GetDataFromDatabase;
$i = 0;
while ($i <= $GetDataFromDatabase->numRows) :?>
    <tr><td><?=$GetDataFromDatabase->FIO[$i];?></td><td><?=$GetDataFromDatabase->gryppa[$i];?></td></tr>
<? $i++; ?>
<?endwhile?>
0
 Аватар для fanatikus
1932 / 1523 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
02.05.2015, 22:16
Цитата Сообщение от Няшная няшка Посмотреть сообщение
$GetDataFromDatabase = new GetDataFromDatabase;
я думаю, такого в виде быть не должно.
нужно сформировать массив, а в шаблоне, при помощи foreach вывести
0
03.05.2015, 06:51

Не по теме:

22.02.2012, 18:33
Вчера, 23:24
:scratch:

Добавлено через 33 секунды
Prikylos, какой у Вас год? :)

0
03.05.2015, 23:00

Не по теме:

Para bellum, у меня сейчас 2018, например, а что? Вы что-то подозреваете? :scratch:

0
04.05.2015, 10:00

Не по теме:


Цитата Сообщение от FraidZZ Посмотреть сообщение
у меня сейчас 2018
Мне из будущего пишут. :yahoo:
Пошёл на ТВЗ интервью давать. :D

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.05.2015, 10:00
Помогаю со студенческими работами здесь

Размещение авторизации в MVC с использованием ООП – best practices? где?
Доброго времени суток! Пишу свою MVC (обучения для), без фреймворков. И встал вопрос о регистрации/авторизации. Где и как её лучше...

Вывод модулей на страницы с использованием паттерна MVC
Пишу систему управления с использованием MVC паттерна, написал клсс маршрутизации который в зависимости от запрошенного пользователем...

Вывод информации из БД с использованием Entity на ASP.NET MVC 4
Добрый день тыжпрограммисты, прошу вашей помощи) Постараюсь объяснить по пунктам. Создана база данных Database, создана таблица...

Dropdownlist, MVC, MySql передача данных из коллекции
Доброго времени суток, такой вопрос. Есть коллекция куда передается данные с таблицы. Как можно сделать dropdownlist из элементов этой...

Ajax отправка данных из формы в базу mysql и вывод из базы mysql
$(function() { $('#chat_submit').click(function(e) { e.preventDefault(); var chat_name =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru