С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12

Как организовать структуру приложения

05.02.2015, 01:26. Показов 971. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток.
У меня есть MS Sql сервер.
Там в БД есть таблицы:
Abiturient - Абитуриенты
IDint
FacultyIDint
Courseint
FIOvarchar(255)
Candidate - Кандидаты
AbiturientIDint
StatementIDint
Questionnairebit
CopyPassportbit
CopyPripisbit
Characteristicbit
AverageMarkint
CertificateVVKbit
В таблице Candidate - поле StatementID это ID заявления.
Просто информационные таблицы
Faculty - Факультеты
IDint
Namevarchar(255)
Specialty - Специальности
IDint
FacultyIDint
Namevarchar(50)
И так
Мне нужно на php написать скрипт - такой, что бы его просто через тег iframe или еще через что вставили в готовую страничку сайта.
Сама работа скрипта:
1) Подключаемся к БД
2) Человек вводит курс
3) Получаем списки Abiturient(с Course = из 2), Faculty, Specialty(связываем с Faculty)
заносим все в разные select:
в select`e Abiturient отображаются имена т.е. человек будет себя искать - должны быть возможность ввод вручную и живой поиск но обязательный выбор из списка, что бы человек не ввел некорректно.
при смене значений select`a Faculty в select`e Specialty должны изменяться записи совпадающие с Faculty(Выводится специальности того факультета)

Далее если человек выбрал себя, выбрал факультет и специальность он может перейти дальше
4) Появляется форма с кучей input` ов и человек все это заполняет и по нажатию далее - вносится запись в 1ну из таблиц БД
5) Еще одна такая форма и вносятся записи в другую таблицу БД
Ну пока все.
И так у меня вопрос: как организовать саму структуру скрипта? Как я понимаю тут без MVC не обойтись.
Помогите организовать саму структуру, а тело скриптов я сам соображу.

Добавлено через 31 минуту
Что я примерно на-скрипел своим умом:
И так структура:
Project

->Папуа css с таблицами стилей
-> Папка script
index.php
mvc
classes
AbstractController.class.php
Dispatcher.class.php
GlobalVars.class.php
Render.class.php

controller
errorController.php
indexController.php
И для каждой страницы по контроллеру - это под вопросом ?

model
MyDB.class.php
И для каждой таблицы с которой работаю по 3 файлика:
->Table.class.php
->TableModelInterface.php
->TableModel.php

view
Для каждой "странички" в скрипте по вьюшке
error.php
footer.php
header.php
index.php

initMVC.php



Добавлено через 4 минуты
Classes:
AbstractController.class.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
31
32
33
34
35
36
37
38
39
40
41
42
<?php
/**
 * Абстрактный контроллер.
 * Основная задача - обеспечить выполнение действия с заданным именем
 * (методом вида ***Action). Если требуемый метод отсутствует - происходит
 * вызов действия по умолчанию (defaultAction). Соответственно, в каждом
 * контроллере-потомке должен быть реализован хотя бы defaultAction.
 */
abstract class AbstractController {
 
    /**
     * Ссылка на объект $globalVars - хранилище глобальных переменных
     */
    protected $globalVars;
 
    /**
     * Конструктор.
     * @param $globalVars ссылка на глобальное хранилище переменных
     */
    public function __construct($globalVars) {
        $this->globalVars = $globalVars;
    }
 
    /**
     * Метод, отвечающий за вызов нужного действия (если оно, конечно, есть).
     */
    public final function doAction($action) {
        // проверяем, можно ли вызвать метод-действие
        if (is_callable(array($this, $action)) == false) {
            $action = 'defaultAction';
        }
        // вызываем метод, имя которого хранится в переменной $action
        $this->$action();
    }
 
    /**
     * Действие по умолчанию.
     * Этот метод потребуется переопределить во всех контроллерах.
     */
    abstract function defaultAction();
}
?>

Dispatcher.class.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
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?php
/**
 * Диспетчер запросов.
 * Задачи данного класса:
 * - проанализировать запрос, извлечь имя контроллера и имя действия;
 * - загрузить соответствующий класс-контроллер;
 * - создать объект-контроллер и вызвать у него метод doAction().
 */
class Dispatcher {
    /**
     * Ссылка на объект-хранилище глобальных переменных.
     */
    private $globalVars;
    /**
     * Каталог, в котором располагаются классы-контроллеры.
     */
    private $controllerDir;
    /**
     * Имя класса-контроллера.
     */
    private $controllerClass;
    /**
     * Полный путь к файлу, в котором находится нужный класс-контроллер.
     */
    private $controllerFile;
    /**
     * Действие, которое должен будет выполнить контроллер.
     */
    private $action;
 
    /**
     * Конструктор.
     * @param $globalVars ссылка на глобальное хранилище переменных
     * @param $controllerDir каталог, в котором располагаются классы-контроллеры
     */
    function __construct($globalVars,$controllerDir) {
        $this->globalVars = $globalVars;
        $this->controllerDir = $controllerDir;
        // на всякий случай проверим существование каталога с классами
        if (is_dir($controllerDir) == false) {
            throw new Exception('Invalid controller directory: `' . $controllerDir . '`');
        }
    }
 
    /**
     * Перенаправить запрос к нужному контроллеру
     */
    public function dispatch() {
        // разобрать строку запроса
        $this->parseRequest();
        // проверим, существует ли нужный класс-контроллер
        if (is_readable($this->controllerFile) == false) {
            $this->controllerClass = 'errorController';
            $this->controllerFile = $this->controllerDir . $this->controllerClass . '.php';
        }
        // загружаем файл с контроллером
        include $this->controllerFile;
        // создаем объект-контроллер
        $controllerClass = $this->controllerClass;
        $controller = new $controllerClass($this->globalVars);
        // выполняем нужное действие
        $controller->doAction($this->action);
    }
 
    /**
     * Разбор запроса.
     * Выделяем имя контроллера и название действия.
     */
    private function parseRequest() {
        // имя класса и действие по умолчанию
        $class = 'index';
        $action = 'default';
        // получаем значение параметра command
        $command = (empty($_GET['command'])) ? '' : $_GET['command'];
        // анализируем значение параметра
        if (!empty($command)) {
            $parts = explode('@', $command);
            $class = $parts[0];
            if (isset($parts[1])) {
                $action = $parts[1];
            }
        }
        // формируем необходимые строки
        $this->action = $action . 'Action';
        $this->controllerClass = $class . 'Controller';
        $this->controllerFile = $this->controllerDir . $this->controllerClass . '.php';
    }
}
?>

GlobalVars.class.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
<?php
/**
 * Класс с описанием объекта для хранения глобальных переменных.
 */
class GlobalVars {
 
    /**
     * Массив, в котором будут храниться переменные.
     */
    private $vars = array();
 
    /**
     * Метод, который автоматически вызывается при присваивании значения
     * отсутствующему свойству класса.
     */
    public function __set($name, $value) {
        $this->vars[$name] = $value;
    }
 
    /**
     * Метод, который автоматически вызывается при чтении значения
     * у отсутствующего свойства класса.
     */
    public function __get($name) {
        return $this->vars[$name];
    }
}
?>

Render.class.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
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
<?php
 
/**
 * Класс, содержащий параметры HTML-документа
 */
class Page {
    // Название
    public $title = 'Main title';
    // Подзаголовок
    public $additionalTitle = '';
    // Общая таблица стилей
    public $defaultCSS = 'style';
    // Дополнительная таблица стилей
    public $additionalCSS = 'empty';
    // Пиктограмма favicon
    public $favicon = 'favicon';
    // Общий скрипт JavaScript
    public $defaultScript = 'script';
    // Доплнительный скрипт JavaScript
    public $additionalScript = 'empty';
}
 
/**
 * Класс, содержащий поля колонтитулов
 */
class HeaderFooter {
    public $left='';
    public $center='';
    public $right='';
    // проверка, заполнено ли какое-нибудь поле в колонтитуле
    public function isEmpty() {
        return (empty($this->left) && empty($this->center) && empty($this->right));
    }
}
 
/**
 * Класс, отвечающий за формирование HTML-вывода.
 */
class Render {
 
    /**
     * Ссылка на объект-хранилище глобальных переменных.
     */
    private $globalVars;
 
    /**
     * Каталог, в котором располагаются классы-представления.
     */
    private $viewDir;
 
    /**
     * Массив с дополнительными параметрами отображения гипертекстовой страницы.
     */
    private $vars = array();
 
    /**
     * Конструктор.
     * @param $globalVars ссылка на глобальное хранилище переменных
     * @param $viewDir каталог, в котором располагаются классы-представления
     */
    public function __construct($globalVars, $viewDir) {
        $this->globalVars = $globalVars;
        $this->viewDir = $viewDir;
        // на всякий случай проверим существование каталога
        if (is_dir($viewDir) == false) {
            throw new Exception('Invalid view directory: `' . $viewDir . '`');
        }
        // параметры отображения
        $this->Page = new Page();
        // поля колонтитулов
        $this->Header = new HeaderFooter();
        $this->Footer = new HeaderFooter();
    }
 
    /**
     * Метод, который автоматически вызывается, при присваивании значения
     * отсутствующему свойству класса. Тем самым мы можем создавать в объекте
     * любые свойства простым присваиванием.
     */
    public function __set($name, $value) {
        $this->vars[$name] = $value;
    }
 
    /**
     * Метод, который автоматически вызывается, при чтении значения
     * отсутствующего свойства класса.
     */
    public function __get($name) {
        return $this->vars[$name];
    }
 
    /**
     * Вызов нужного представления
     */
    public function show($viewName) {
        // путь к файлу, реализующему представление
        $viewPath = $this->viewDir . $viewName . '.php';
        // проверим, существует ли он
        if (!file_exists($viewPath)) {
            throw new Exception('File `' . $viewPath . '` not found.');
        }
        // Массив параметров преобразуем в локальные переменные
        // (они будут видны только подключаемым скриптам)
        foreach ($this->vars as $key => $value) {
            $$key = $value;
        }
 
        $headerPath = $this->viewDir . 'header.php';
        $footerPath = $this->viewDir . 'footer.php';
        
        // вывод страницы
        include ($headerPath);
        include ($viewPath);
        include ($footerPath);
    }
 
}
?>
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.02.2015, 01:26
Ответы с готовыми решениями:

Как организовать структуру пользователей?
Здравствуйте, как организовать структуру пользователей? Есть 3 вида пользователей: админ, оператор и клиент. У каждого типа...

Как лучше организовать такую структуру базы данных?
Добрый день, как лучше организовать такую структуру базы данных, есть имя пользователя для этого пользователя группы таблиц в бд. ...

Как правильно организовать структуру приложения EJB
Вообщем по названию темы не совсем понятно что я имею в виду, поясню... Есть home-интерфейс EJB, есть Primary Key класс, есть...

1
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
05.02.2015, 18:37  [ТС]
controller:
errorController.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
/**
 * Фиктивный "контроллер" для ошибочных запросов.
 */
class errorController extends AbstractController {
    /**
     * Действие по умолчанию.
     */
    public function defaultAction() {
 
        $this->globalVars->render->Page->additionalTitle = 'Неверный запрос';
        $this->globalVars->render->Page->additionalCSS = 'style';
        $this->globalVars->render->show('error');
    }
}
?>

indexController.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 indexController extends AbstractController {
 
    /**
     * Действие по умолчанию - вывод стартовой страницы
     */
    public function defaultAction() {
        $login=$_SESSION['login'];
        $password=$_SESSION['password'];
 
        $this->globalVars->render->Page->additionalTitle = 'Главная';
        $this->globalVars->render->Page->additionalCSS = '';
        $this->globalVars->render->show('index');
    }
 
}
 
?>

Для какой то страницы к примеру Faculty
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
<?php
 
/**
 * Контроллер, отвечающий за обработку данных .
 */
class facultyController extends AbstractController {
 
    /**
     * Добавляет в верхний колонтитул ссылку на контроллер
     */
    private function addLink() {
        $this->globalVars->render->Header->left .= ' :: <A href="' . $this->globalVars->root . '?command=faculty">Faculty</A>';
    }
 
    /**
     * Действие по умолчанию.
     */
    public function defaultAction() {
        // задаем значения параметров для отображения
        $this->addLink();
        $login=$_SESSION['login'];
        $password=$_SESSION['password'];
        
        $this->globalVars->render->Page->additionalTitle = 'Faculty';
        $this->globalVars->render->Page->additionalCSS = 'table_edit_list';
        // формируем вывод страницы
        $this->globalVars->render->show('faculty/index');
    }
 
    /**
     * Вывести список .
     */
    public function listAction() {
        $this->globalVars->render->tariffList = $this->globalVars->facultyModel->getFacultyList();
 
        $this->addLink();
        $login=$_SESSION['login'];
        $password=$_SESSION['password'];
 
        $this->globalVars->render->Page->additionalTitle = 'Просмотр Faculty';
        $this->globalVars->render->Page->additionalCSS = 'table_edit_list';
        $this->globalVars->render->show('faculty/list');
    }
 
?>

Для таблицы с заявлениями Statement
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
59
60
61
62
63
64
65
66
67
68
69
70
<?php
 
/**
 * Контроллер, отвечающий за обработку данных .
 */
class statementController extends AbstractController {
 
    /**
     * Добавляет в верхний колонтитул ссылку на контроллер
     */
    private function addLink() {
        $this->globalVars->render->Header->left .= ' :: <A href="' . $this->globalVars->root . '?command=statement">Statement</A>';
    }
 
    /**
     * Действие по умолчанию.
     */
    public function defaultAction() {
        // задаем значения параметров для отображения
        $this->addLink();
        $login=$_SESSION['login'];
        $password=$_SESSION['password'];
        
        $this->globalVars->render->Page->additionalTitle = 'Statement';
        $this->globalVars->render->Page->additionalCSS = 'table_edit_list';
        // формируем вывод страницы
        $this->globalVars->render->show('statement/index');
    }
 
    /**
     * Добавить новый .
     */
    public function createAction() {
        // создаем заготовку для нового 
        $statement = new statement();
        $statement->id_statement = 0; // потом будет создан автоматически
        $statement->name_statement = '';
        $statement->year_statement = 0;
        ///....
        
        $this->globalVars->render->statement = $statement;
 
        $this->addLink();
        $this->globalVars->render->Page->additionalTitle = 'Создание нового ';
        $this->globalVars->render->Page->additionalCSS = 'table_edit_list';
        $this->globalVars->render->show('statement/edit');
    }
 
    /**
     * Сохранить данные  после создания ($id==0) или редактирования ($id!=0).
     */
    public function saveAction() {
        if (isset($_POST['id_statement']) && isset($_POST['saveButton'])) {
            $statement = new statement();
            $statement->id_statement = (integer) $_POST['id_statement'];
            $statement->name_statement = (string) $_POST['name_statement'];
            $statement->year_statement = (integer) $_POST['year_statement'];
            if($statement->name_statement!=""){
                if (statement->year_statement != 0) {
                    $this->globalVars->tariffModel->updateStatement($statement); // обновление
                } else {
                    $this->globalVars->tariffModel->createStatement($statement); // создание
                }
                $this->listAction();
            }else $this->globalVars->render->show('error');
        }
    }
}
 
?>


Добавлено через 8 минут
view:
error.php
PHP
1
2
3
4
<div id="error">
    <h1 class="error">Ошибка</h1>
    <a href="javascript:history.back()" onMouseOver="window.status='Назад';return true">Вернуться</a>
</div>

footer.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
    if (!($Footer->isEmpty())) echo <<<END
        <!-- нижний колонтитул -->
        <DIV id="footer">
            <DIV class="left">$Footer->left</DIV>
            <DIV class="center">$Footer->center</DIV>
            <DIV class="right">$Footer->right</DIV>
        </DIV>
END;
?>
 
</BODY>
</HTML>

header.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
31
32
33
<?php
    // Если задан подзаголовок, то он приклеивается к основному названию.
    if (!empty($Page->additionalTitle))
        $Page->title .= ' :: ' . $Page->additionalTitle;
 
    echo <<<END
        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/HTML4/strict.dtd">
        <HTML>
            <HEAD>
                <META http-equiv="Content-Type" content="text/html; charset=utf8">
                <LINK type="text/css" rel="stylesheet" href="./css/{$Page->defaultCSS}.css">
                <LINK type="text/css" rel="stylesheet" href="./css/{$Page->additionalCSS}.css">
                <LINK  type="image/x-icon" rel="shortcut icon" href="./image/{$Page->favicon}.ico"/>
                <TITLE>{$Page->title}</TITLE>
                <SCRIPT type="text/javascript" src="./script/{$Page->defaultScript}.js"></SCRIPT>
                <SCRIPT type="text/javascript" src="./script/{$Page->additionalScript}.js"></SCRIPT>
            </HEAD>
            <BODY>
 
END;
 
// если задано какое-нибудь поле верхнего колонтитула, то сформировать колонтитул
if (!($Header->isEmpty())) echo <<<END
    
<!-- верхний колонтитул -->
<DIV id="header">
  <DIV class="left">$Header->left</DIV>
  <DIV class="center">$Header->center</DIV>
  <DIV class="right">$Header->right</DIV>
</DIV>
 
END;
?>

index.php
PHP
1
Тут начальное окно

Ну и для заявления добавление это папка statement\edit.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
 
echo <<<END
<div id="fill">
<H1>$Page->additionalTitle</H1>
<FORM id="edit" method="POST" action="$root?command=statement@save" onsubmit="return validateFormStatement(this)">
    <INPUT type="hidden" name="id_statement" value="$statement->id_statement">
    <LABEL for="name_statement">Имя:</LABEL>
    <INPUT type="text" class="text" id="name_statement" name="name_statement" value="$statement->name_statement"><BR>
    <BR>
    <LABEL for="year_statement">Год:</LABEL>
    <INPUT type="text" class="text" id="year_statement" name="year_statement" value="$statement->year_statement"><BR>
    <BR>
    <INPUT type="submit" class="button" name="saveButton" value="Сохранить">
    <INPUT type="button" onclick="history.back()" class="button" name="cancelButton" value="Отмена" >
</FORM>
</div>
END;
?>


Добавлено через 4 минуты
modelтут у меня вопросик)
Я знаю как сделать для SQlite - Но как изменить под Ms Sql server ???
MyDB.class.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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php
 
/**
 * Класс для доступа к базе данных
 */
class MyDB {
 
    /**
     * Реализуем шаблон Singleton - основные поля и методы делаем скрытыми.
     */
    private static $dbinstance = NULL;
    private static $dbfile = NULL;
 
    /**
     * Скрытый конструктор.
     */
    private function __construct() {
        
    }
 
    /**
     * Скрытый clone().
     */
    private function __clone() {
 
    }
 
    /**
     * Задать имя файла базы данных
     */
    public static function setDBFile($dbfile) {
        self::$dbfile = $dbfile;
        if (!file_exists($dbfile)) {
            throw new Exception('Invalid database file: `' . $dbfile . '`');
        }
    }
 
    /**
     * Метод, возвращающий ссылку на экземпляр объекта.
     */
    public static function getInstance() {
        if (!self::$dbinstance) {
            //self::$dbinstance = new SQLiteDatabase(self::$dbfile);
            self::$dbinstance = new SQLite3(self::$dbfile);
 
        }
        return self::$dbinstance;
    }
 
}
 
?>


Добавлено через 13 минут
Statement.class.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
/**
 * Класс для представления 
 */
class Statement{
    public $id_statement;
    public $name_statement;
    public $year_statement;
 
 
 
    public function  __construct($id_table=0,$name_statement='',$year_statement=0) {
        $this->id_table= $id_table;
        $this->name_statement= $name_statement;
        $this->year_statement= $year_statement;
 
    }
}
?>

StatementModelInterface .php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
 
include_once 'statement.class.php';
 
/**
 * Интерфейс, в котором перечисляются базовые методы, необходимые
 * для доступа
 */
interface StatementModelInterface {
 
 
    /**
     * Обновляет информацию об одной .
     */
    public function updateStatement($statement);
 
 
 
}
 
?>

TableModel.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
31
32
<?php
 
include_once 'StatementModelInterface.php';
 
/**
 * Реализация доступа к информации , хранящейся в базе данных
 */
class StatementModel implements StatementModelInterface {
 
 
    /**
     * Обновляет информацию об одном платеже.
     */
    public function updatePayment($statement) {
        $login = $_SESSION['login'];
        $password = $_SESSION['password'];
        if ($login == 'admin') {
            // объект для работы с базой данных
            $db = MyDB::getInstance();
            // меняем запись в базе данных
            $sql = "UPDATE Statement " .
                    "SET  name_statement='$statement->name_statement'
                    WHERE statement_id=$statement->id_statement";
            $db->exec($sql);
        }else{
            
        }
    }
 
}
 
?>


Добавлено через 2 минуты
Ну и сам
initMVC.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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php
// полный путь к текущему каталогу
$baseDir = realpath(dirname(__FILE__));
 
// путь к базовым классам MVC
$classesDir = $baseDir . '/classes/';
// загружаем эти классы
include $classesDir . 'GlobalVars.class.php';         // хранилище глобальных переменных
include $classesDir . 'AbstractController.class.php'; // абстрактный контроллер (предок всех контроллеров)
include $classesDir . 'Dispatcher.class.php';         // диспетчер запросов
include $classesDir . 'Render.class.php';             // генератор HTML-страниц
              
// создаем объект-хранилище глобальных переменных
$globalVars = new GlobalVars();
 
// запоминаем путь к корневой странице Web-приложения
$globalVars->root = $_SERVER['PHP_SELF'];
 
// создаем объект-диспетчер запросов
$globalVars->dispatcher = new Dispatcher($globalVars, $baseDir . '/controller/');
 
// создаем объект, отвечающий за формирование HTML-страниц
$globalVars->render = new Render($globalVars, $baseDir . '/view/');
 
// задаем параметры отображения
// при отображении часто будет использоваться ссылка на корень приложения
$globalVars->render->root = $globalVars->root;
// например, вот так - в верхнем колонтитуле
$globalVars->render->Header->left = '<A href="' . $globalVars->root . '">Главная</A>';
 
// путь к классам, реализующим объектную модель данных приложения
$modelDir = $baseDir . '/model/';
 
// загружаем эти класс
include $modelDir . 'sqliteStatementModel.php'; // хранение  в базе данных SQLite-
 
$globalVars->statementModel = new StatementModel();
 
 
// класс для работы с базой данных SQLite3
include $modelDir . 'MyDB.class.php';
MyDB::setDBFile($modelDir . 'db/db.sqlite');
 
?>


Добавлено через 6 минут
И так под итожу вопросы:
Как переделать MyDB.class.php под MS Sql Server, а именно как изменить функцию getInstance()

Что вообще с этой структурой для мой задачи?
Может есть более простой вариант считать данные с 3х таблиц, фильтровать как то их...
И просто создать страничку с инпутами и просто внести данные в таблицу, перед этим проверив правильность с помощию JS.
Может я лошара этакий намутил все это зря...
Выручайте, ребят у меня уже бошка опухла
Пойду я пока

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

Как организовать структуру приложения после компиляции
Я пишу программу с применением MS SQL Compact Edition. Для работы на другом компьютере, моей программе требуется перечень библиотек: ...

Как организовать такую структуру
Здравствуйте! Не знаю, как на уровне БД решить следующую задачу: есть таблица с учетной записью пользователя, содержащая данные для входа...

Как лучше организовать структуру БД
Добрый день. Работаю над разработкой программы для кинологического клуба (к слову сказать - и учусь на нем, первый проект) Встал вопрос...

Как лучше организовать структуру?
Добрый вечер, поскажите как правильнее решить такую задачку, думал 2 дня а ничего толкового не придумал. Есть две таблички, Item и...

Как организовать структуру базы?
Необходимо формировать заказы, где содержится информация о покупателями и заказанными ими товарами. Какие таблицы и какими полями...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты 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
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru