Создаём сокращатель URL. Часть 2.
 
			Всех с праздником! А сегодня мы продолжаем создавать сокращатель URL, а именно: создадим базу данных, где будут храниться наши ссылки и их код, и главный класс Shortener.
Создание базы данных
Я создам базу данных с именем website
create database website;
А в ней нам нужно создать таблицу. Назовём её, например, links.
create table links(
  id int not null primary key auto_increment,
  url varchar(255),
  code varchar(12),
  created datetime
);
Таблица элементарная, но всё-таки поясню:
- id - уникальный идентификатор записи, не может быть пустым, автоматически увеличивается
- url - url, который будет вводить пользователь через нашу форму, может быть достаточно длинным, но, думаю, 255 знаков нам хватит
- code - краткий код, который будет сгенерирован для каждого url
- created - просто дата и время, когда создана запись
Выполните этот запрос в консоли или в phpmyadmin, чтобы создать таблицу. Давайте теперь немного поговорим о нашей структуре файлов, она у нас такая:
- classes
- 
		- shortener.php
 
- css
- 
		- style.css
 
- index.php
- shorten.php
- redirect.php
- .htaccess
Откроем файл shortener.php и запишем следующее:
<?php
  class Shortener {
   protected $db;
   public function __construct() {
    $this->db = new Mysqli('localhost', 'root', '', 'website');
   }
   public function generateCode($num) {
    return base_convert($num, 10, 36);
   }
   public function makeCode($url) {
    $url = trim($url);
    if(!filter_var($url, FILTER_VALIDATE_URL)) {
     return '';
    }
    $url = $this->db->escape_string($url);
    $exsists = $this->db->query("SELECT code FROM links WHERE url = '{$url}'");
    if($exsists->num_rows) {
     return $exsists->fetch_object()->code;
    } else {
     $this->db->query("INSERT INTO links(url, created) VALUES('{$url}', NOW())");
     $code = $this->generateCode($this->db->insert_id);
     $this->db->query("UPDATE links SET code = '{$code}' WHERE url = '{$url}'");
     return $code;
    }
   }
   public function getUrl($code) {
    $code = $this->db->escape_string($code);
    $code = $this->db->query("SELECT url FROM links WHERE code = '$code'");
    if($code->num_rows) {
     return $code->fetch_object()->url;
    }
    return '';
   }
  }
?>
Вот такой вот немаленький класс у нас получился. Но, несмотря на размер, он довольно таки прост. Давайте разберёмся, что мы тут написали.
У нас есть четыре метода: __construct, generateCode, getUrl и makeCode. В конструкторе мы просто подключаемся к базе данных и записываем её объект в свойство $db, второй метод принимает число и на его основе генерирует какой-то код. Метод getUrl, как и следует из названия, возвращает url из базы данных по коду, который мы передадим в качестве аргумента. Если такой записи нет, то вернётся пустая строка. И вот, мы подошли к самому большому методу в этом классе - makeCode.
В этот метод передаётся url, который затем очищается от пробелов и проверяется на корректность с помощью filter_var. После мы обращаемся к базе данных и возвращаем код, соотвествующий переданному url. Если же кода нет, то мы записываем в базу данных url и дату создания, потом генерируем код с помощью метода generateCode, передав ему id последней вставленной записи, а дальше обновляем запись, вставив туда наш код, и возвращаем его из метода.
На этом я заканчиваю вторую часть по созданию сокращателя URL. Сегодня мы создали класс, который будет делать всю работу, и тем самым прошли уже больше половины пути. Обязательно просмотрите и поймите код, а если есть вопросы, можете задавать их в комментариях.
- 
					Создано 01.05.2014 18:17:31  
- 
					 Михаил Русаков Михаил Русаков
 
			 
			 
		 
				 
			 
				 
				 
				 
				
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.