За последние 24 часа нас посетили 22667 программистов и 1051 робот. Сейчас ищут 744 программиста ...

URL на пальцах...

Тема в разделе "PHP для новичков", создана пользователем atheroth, 13 сен 2017.

Метки:
  1. atheroth

    atheroth Новичок

    С нами с:
    17 авг 2017
    Сообщения:
    10
    Симпатии:
    0
    Привет всем. Только недавно начал осваивать PHP. Научился делать личные кабинеты, регистрации, куки, сессии, все вводы и выводы с БД. Написал сайтец на бутстрапе и парсер, который всю сохраняет в БД.

    Теперь стоит следующая задача: - формирование URL.
    Я не пойму, как происходит процесс формирования URL и кто или куда обращается, чтобы получить запрошенный URL, чтобы выдать его пользователю согласно запросу.

    Прошу объяснить нубу в общих чертах (желательно с реальными примерами).

    Возьмем реальный пример:
    Есть БД со следующей структурой - key, Title, Desc, Content

    Как сделать сгенерировать страничку, у которой URL будет следующий - https://mybestsite.ru/key

    Как организовать все это на сайте.

    Есть один путь в голове :
    1. создать промежуточный файл (типа обработчик), который принимает key.
    2. GET-oм передать параметр в обработчик.
    3. Вывести данные из БД. Где - берем данные со строки, где key из get == key из БД

    Правильно мыслю ? Или есть более простые решения? Посоветуйте.
     
  2. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @atheroth
    Не знаю как все ответят но тебе может помочь get ссылка:
    PHP:
    1. $key = isset( $_GET['key '] ) ? $_GET['key '] : false;
    Правда описывать тяжело) главное может получится эта ссылка которую ты хочешь)
    Хотя вопрос поставлен не правильно я тебя может не понял, ты же сейчас спрашиваешь как сравнить ключ который пришел из базы?
     
  3. atheroth

    atheroth Новичок

    С нами с:
    17 авг 2017
    Сообщения:
    10
    Симпатии:
    0
    Я просил в общих чертах показать, как это все дело организовывается.
    Для примера дал свой случай.
     
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    @atheroth, гляньте тему https://php.ru/forum/threads/chpu.65838/

    Выделили первый компонент пути и далее пытаетесь найти запись с соотв. слагом. Только не забудьте про защиту от SQL-инъекций, либо проверьте поступивший слаг на наличие недопустимых символов перед запросом.
     
  5. acso

    acso Активный пользователь

    С нами с:
    15 апр 2010
    Сообщения:
    150
    Симпатии:
    25
    Адрес:
    Одесса
    Если я правильно Вас понял, то для начала нужно уйти от урла типа https://mybestsite.ru?key к https://mybestsite.ru/key. В этом Вам поможет файл .htaccess, который нужно положить в корень сайта. Его содержимое, как пример:
    Код (Text):
    1. <IfModule mod_rewrite.c>
    2.   RewriteEngine on
    3.   RewriteBase /
    4.   RewriteCond %{REQUEST_FILENAME} !-d
    5.   RewriteCond %{REQUEST_FILENAME} !-f
    6.   RewriteRule ^(.+)$ index.php?$1
    7. </IfModule>
    Теперь урл-запрос к сайту вида мойсайт.ру?параметр_0&параметр_1&параметр_2 можно будет заменить на мойсайт.ру/параметр_0/параметр_1/параметр_2. Более детально про .htaccess - гугль в помощь.
    Едем дальше. Узнать значение нужного нам параметра (не значение гет-параметра, а его имя в нужном месте) можно, например, так:
    PHP:
    1. function par($nom = 0) {
    2.   $pars = explode('/', $_SERVER['QUERY_STRING']);
    3.   return isset($pars[$nom]) ? $pars[$nom] : null;
    4. }
    5. //...
    6. if (par() == 'параметр_0') {
    7.   //...
    8. }
    9. if (par(1) == 'параметр_1') {
    10.   //...
    11. }
    12. $key = (int)par();
    Усложняем)) В Вашей таблице БД есть поле title, можно помочь поисковым механизмам парсить Ваш сайт более "уютно". Не просто в виде урла аля мойсайт.ру/987/, а, к примеру, тайтл страницы у Вас "В Одессе теплая погода", мы хотим получить доступ к странице в виде мойсайт.ру/987/V_Odesse_teplaya_pogoda/ Да простят меня гуру за (возможно) неоптимизированный код, но он у меня реально работает и уже сравнительно давно (вырвал из работающего проекта):
    Код (Text):
    1. function getTranslit($cyr) {
    2.   $trans_rules =
    3.   'А>A,Б>B,В>V,Г>G,Д>D,Е>E,Ё>YO,Ж>ZH,З>Z,И>I,Й>J,К>K,Л>L,М>M,Н>N,О>O,П>P,Р>R,' .
    4.   'С>S,Т>T,У>U,Ф>F,Х>H,Ц>C,Ч>CH,Ш>Sh,Щ>CSH,Ъ>,Ы>Y,Ь>,Э>E,Ю>YU,Я>YA,а>a,б>b,' .
    5.   'в>v,г>g,д>d,е>e,ё>yo,ж>zh,з>z,и>i,й>j,к>k,л>l,м>m,н>n,о>o,п>p,р>r,с>s,т>t,' .
    6.   'у>u,ф>f,х>h,ц>c,ч>ch,ш>sh,щ>csh,ъ>,ы>y,ь>,э>e,ю>yu,я>ya,Є>YE,І>I,Ѓ>G,і>i,' .
    7.   '№>#,є>ye,ѓ>g,№>#';
    8.   $trans_table = array();
    9.   $items = explode(',', $trans_rules);
    10.   foreach($items as $item) {
    11.     list($from, $into) = explode('>', $item);
    12.     $trans_table[$from] = $into;
    13.   }
    14.   $tr = str_replace(array_keys($trans_table), array_values($trans_table), $cyr);
    15.   $tr = str_replace(array('"', "'", "?", "&", "#", "\n", "<", ">"), "", $tr);
    16.   $tr = str_replace(" ", "_", $tr);
    17.   return $tr;
    18. }
    При получении запроса от клиента, Вы можете не только key (0 параметр) проверять, но и брать md5(key(1)) и сравнивать его с md5($data['title']) запрашиваемой страницы. Не совпадают - в топку)
    В общем, как-то так) Соберите все до кучи и да прибудет с Вами код праведный!))
     
  6. Sergey_Tsarev

    Sergey_Tsarev Активный пользователь

    С нами с:
    17 мар 2016
    Сообщения:
    502
    Симпатии:
    105
    Установи единую точку входа на сайт - файл index.php. Далее напиши роутер, примерно так:
    PHP:
    1. <?php
    2. $url = $_SERVER["REQUEST_URI"];
    3.  
    4. $urlarr = explode('/', $url);
    5.  
    6. if(isset($urlarr[1]):
    7.     $key = $urlarr[1];
    8.     /* делаем запрос к базе данных с ипользованием $key */
    9.     /* выводим страницу с полученными параметрами */
    10. else:
    11.     /* отображаем стартовую страницу */
    12. endif;
    13. ?>
    А ещё лучше используй ООП.
     
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.236
    Адрес:
    там-сям
    1. ога. этот обработчик обычно называют "точка входа"
    2. $_SERVER['REQUEST_URI'] идеально для этого подходит
    3. ну это возможный вариант. а так-то, как правило, есть адреса, для которых в базе контент не хранят, зато для них есть отдельные обработчики — контроллеры. чтобы найти соответствие адрес => контроллер, придумали роутеры, то есть маршрутизаторы. маршруты, опять же как правило, описывают в отдельном файле конфигурации.
     
    Sergey_Tsarev нравится это.