Создаём сокращатель 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. Сегодня мы создали класс, который будет делать всю работу, и тем самым прошли уже больше половины пути. Обязательно просмотрите и поймите код, а если есть вопросы, можете задавать их в комментариях.
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.