Проэктирование телефонного справочника.

Jmunb

Новичок
Требуется выполнить данное задание:

Нужно написать на PHP с использованием ООП веб-приложение для работы с телефонными номерами, состоящими из кода страны, кода города, номера телефона и комментария. Номера нужно хранить в таблице MySQL, веб-интерфейс - список (постраничная разбивка и сортировка по названиям колонок не нужны) со ссылками для изменения и удаления каждой записи, сверху - окно поиска (ищем всё что ввели сразу по всем полям) и ссылка для добавления номера. По нажатию на ссылки добавления и изменения открывается форма для редактирования всех полей номера, сохранение формы возвращает обратно к списку, если нет ошибок, с сообщением, что всё успешно сохранено, если есть ошибки - открывается форма, заполненная введёнными данными с информацией об ошибках (либо возле каждого поля, либо общим списком ошибок сверху). Проверки формы должны быть на PHP, использовать JavaScript для этого не нужно. После нажатия на кнопку поиска, а также без поискового запроса, нужно
писать, сколько номеров найдено. Искать - просто подстроку по всем полям таблицы с телефонами.

Предполагается следующий набор классов: номер телефона, список номеров, форма редактирования номера, контроллер веб-приложения. Пояснение по классу номера телефона: там должны быть реализованы методы получения данных из БД (загрузка из БД в свойства класса), доступа к данным (геттеры), записи данных в объект класса (сеттеры), сохранения данных в БД. Использование библиотек и фреймворков нежелательно.

Хотелось бы получить несколько советов. Какова должна быть структура классов(если считаете что эта не подходит к данной задаче) и каким набор свойств и методов должны обладать классы приложения?

Очень нужна помощь именно в проектировании, думал над структурой приложения и зашел в тупик=( Изначально предполагал сделать класс номера и два дочерних первый - список номеров, второй - форма редактирования. Которые будут наследовать от родительского класса свойства номера. Но при таком подходе класс список номеров будет вытаскивать все номера из бд по 1-й записи что не есть хорошо а если делать свое метод получения списка из бд то теряется смысл наследования. То же самое с формо редактирования если делать свои классы изменения и удоления но ведь вставка и селект уже реалезованы в родительском классе есть ли смысл отделять эти методы.

Спасибо за внимание жду ваших советов!
 

Jmunb

Новичок
Быть может было бы верным реализовать какой либо патерн в рамках данного задания?
 

AmdY

Пью пиво
Команда форума
Для начала создай контроллер
Controller_Phone, в нём пропиши вывовы для каждого действия (экшина).
Далее создай Модель Model_Phone, в которой будут методы для колекции записей, одной записи, добавление, удаления и редактирования имеющихся записей.

Затем приходи с кодом сюда, будем дальше смотреть.
 
  • Like
Реакции: KorP

Jmunb

Новичок
В общем начал с класса работы с бд
Использую класс PDO, реализую как Singleton.

Вот код

PHP:
class MysqlPDO
{
	private $PDOInstance = null;	//Экземпляр класса PDO
	private static $instance = null;	//Экземпляр класса MysqlPDO
	
	const DEFAULT_SQL_USER = 'root';	//Постоянное имя пользователя
	const DEFAULT_SQL_HOST = 'localhost';	//Постоянный адрес хоста
	const DEFAULT_SQL_PASS = '';	//Постоянный пароль пользователя
	const DEFAULT_SQL_DTB = 'b2b';	//Постоянное название базы данных
	const DEFAULT_SQL_CHARSET = 'utf8';	//Кодировка
 
	/**
	* Конструктор
	*/
	private function __construct() {
		$this->PDOInstance = new PDO('mysql:dbname='.self::DEFAULT_SQL_DTB.';host='.self::DEFAULT_SQL_HOST, self::DEFAULT_SQL_USER ,self::DEFAULT_SQL_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES '.self::DEFAULT_SQL_CHARSET));
	}
	
	/*
	*Защищаем от клонирование
	*/
	final private function __clone() {}
	
	/*
	*Защищаем от создания через unserialize
	*/
	final private function __wakeup() {}
	
	/**
	* Создает и возвращает объект класса MysqlPDO
	*/
	final public static function getInstance() {
		if(is_null(self::$instance)) {
			self::$instance = new MysqlPDO();
		}
		return self::$instance;
	}
 
	/**
	* Выполняем SQL запрос в PDO
	*/
	public function query($query) {
		return $this->PDOInstance->query($query);
	}
	
	// Выполняет запросы к БД
	public function prepare($statement, $driver_options = array()) {
		return $this->PDOInstance->prepare($statement, $driver_options);
	}
	
	/*
	*Деструктор
	*/
	public function __destruct() {
		unset($this->PDOInstance);
	}
}
С PDO работаю недавно так что не все еще понятно. Например как лучше обрабатывать ошибки? Как лучше выполнять запросы? И вообще какие функции нужно еще реализовать в данном классе в рамках ТЕЛЕФОННОГО СПРАВОЧНИКА?
 

Jmunb

Новичок
ах да ну и пример использования

PHP:
require_once("classes/mysqlPDO.class.php");
	
foreach (MysqlPDO::getInstance()->query('SELECT user_id, ip , uri , time FROM `log`') as $membre) {
	echo '<pre>', print_r($membre) ,'</pre>';
}
 
Сверху