<?php
//Файл: index.php
// Kickstart the framework
$f3=require('lib/base.php');
$f3->set('DEBUG', 1);
if ((float)PCRE_VERSION<8.0)
trigger_error('PCRE version is out of date');
$f3->config('config.ini');
//ВЕСЬ ОСТАЛЬНОЙ КОД БУДЕМ ПИСАТЬ ЗДЕСЬ
$f3->run();
دا ټول هغه څه دي چې تاسو اړتیا لرئ د پیل کولو لپاره پوه شئ. راځئ چې کوډ کول پیل کړو!
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
CREATE TABLE IF NOT EXISTS `links` (
`code` varchar(4) NOT NULL,
`link` varchar(1000) NOT NULL,
`hits` int(255) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
ALTER TABLE `links`
ADD UNIQUE KEY `code` (`code`);
موږ به د هر لینک لپاره 3 ساحې ولرو:
کوډ د ډومین څخه وروسته یو تصادفي 4 حروف دی چې له لارې به یې بیرته راستنیږي، لکه example.com/ABC1
لینک - نه لنډ شوی لینک
هټونه - په لنډ شوي لینک کې د کلیکونو شمیر.
زه به تاسو ته په لنډ ډول د ډیټابیس سره د کار کولو اصول ووایم ، پرته له غوړ.
<?php
//сначала нужно подключиться к БД
$db = new DBSQL(
'mysql:host=localhost;port=3306;dbname=linker',
'root',
''
);
//Дальше есть два варианда работы с данными:
//Можно установить переменную в Фреймворк c помощью обычного SQL-запроса:
$f3->set('result', $db->exec('SELECT * FROM wherever'));
//они будут доступны в шаблонах, как <?= $resul ? >
//А можно использовать встроенный SQL Mapper:
$row = new DBSQLMapper($db, 'links');
$row->load(array('link="https://habrahabr.ru"')); //теперь из этого объекта доступны все колонки строки, где ссылка на Хабр:
$row_value = $row->somerow; //Вот так
// Естесственно можно изменять значения:
$row->link = 'https://habr.com';
$row->save(); //изменения нужно сохранить, а что вы думали
// больше информации по работе с БД доступно здесь: https://a.nikonovs.ru/MPHR Настоятельно рекомендую прочитать, хотябы с помощью переводчика, встроенного в браузер.
?>
<?php
//Файл: нет (пример)
//устанавливаем переменную в index'е и рендерим шаблон
$f3->set('link', $shorted_link);
$view = new View;
echo $view->render('newLink.htm');
//теперь в шаблоне можно использовать:
<?= $link ?>
$f3->route('GET|POST /newLink', //мы будем обрабатывать и POST и GET
function($f3) {
$db = new DBSQL( //Подключение к БД новое в каждом Роуте
'mysql:host=localhost;port=3306;dbname=linker',
'root',
''
);
//прекрасная функция генерации радомных символов:
$permitted_chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
function generate_string($input, $strength = 4) {
$input_length = strlen($input);
$random_string = '';
for($i = 0; $i < $strength; $i++) {
$random_character = $input[mt_rand(0, $input_length - 1)];
$random_string .= $random_character;
}
return $random_string;
}
//проверка на повторение link - нам же не нужно чтобы каждый раз генерировались новые ссылки. link - уникальный.
$check = new DBSQLMapper($db,'links');
$check->load(array('link="'. $link .'"'));
if ($check->dry()) {
$g_code = generate_string($permitted_chars);
$row = new DBSQLMapper($db,'links');
$row->reset();
$row->code = $g_code;
$row->link = $link;
$row->save();
} else {
$g_code = $check->code; //если link повторяется, то показываем старый код
}
$short_link = 'https://'. $_SERVER['HTTP_HOST'] . '/' . $g_code; //собираем конечную ссылку
//параметры из $_POST можно получить с помощью $f3->get('POST'), поддерживается точечная нотация (поправьте, если неправильно называю): параметр "link" можно получить так:
$link = $f3->get('POST.link');
if ( !empty($f3->get('POST')) ) { //Выдаем HTML, только если POST не пустой.
$f3->set('link', $short_link);
$f3->set('hits', $check->hits);
$view = new View;
echo $view->render('newLink.htm');
} else { //иначе - редирект на главную
$f3->$f3->reroute('/');
}
}
);
چمتو! په حقیقت کې، دا ساده وه.
راستنول
د کولو لپاره لږ څه پاتې دي:
د URL څخه پیرامیټر ترلاسه کړئ
په ډیټابیس کې د هغې شتون چیک کړئ
د ډیټابیس څخه اړونده لینک ترلاسه کړئ
د کارونکي ریډیریټ
ګټه!
موږ د وروستي لارې وروسته کوډ لیکلو ته دوام ورکوو.
$f3->route('GET /@code', //указываем параметр после "@", он попадет в PARAMS
function($f3) {
//снова определяем $db
$db = new DBSQL(
'mysql:host=localhost;port=3306;dbname=linker',
'root',
''
);
$code = $f3->get('PARAMS.code'); //получаем параметр
$link = new DBSQLMapper($db,'links');
//если получается получить ссылку из БД - получаем, увеличиваем количество переходов и перенаправляем
if ($link->load(array('code="'.$code.'"', 'link=?'))) {
$link->hits++;
$link->save();
$f3->reroute($link->link);
} else {
$f3->reroute('/'); //а если такой ссылки нет - милости просим на главную
}
}
);
تاسو شاید دا په لاره او لار کې لیدلي وي نوې لینک، او په پورته لاره کې به ورته شی تعریف شي - وروسته له دې کوډ کیدای شي د "نوی لینک" سره سمون ولري (دا نشي کولی، جنریټر یوازې لوی توري ولري)، مګر دا چې دا لومړی تعریف شوی، دا به لومړی اجرا شي.
$f3→ منډې()!
د لوستلو لپاره مننه!
زه به خوښ شم که تاسو یو نظر ولیکئ او ما سم کړئ که یو څه غلط وي.
او د کور کار یا د لیکوال (زه) د سستۍ ثبوت په توګه ، زه د هغه څه لیست پریږدم چې کیدی شي. دا غوره ده چې په کولو سره زده کړئ!
البته دا امکان نلري، مګر کله چې تولید شي $g_code ممکن بیا پیښ شي، نو زه وړاندیز کوم چې تاسو یو فنکشن ولیکئ چې دا به وګوري.
تاسو کولی شئ نورمال احصایې هم رامینځته کړئ او د بدلولو وروسته یې ښکاره کړئ /@code/stats
Запретить создавать ссылки на сам сервис сокращения ссылок, создать список "защищенных" от укорачивания ресурсов