За последние 24 часа нас посетили 22777 программистов и 1257 роботов. Сейчас ищут 716 программистов ...

Подключение базы данных

Тема в разделе "PHP и базы данных", создана пользователем Lenaole, 12 апр 2021.

Метки:
  1. Lenaole

    Lenaole Новичок

    С нами с:
    12 апр 2021
    Сообщения:
    1
    Симпатии:
    0
    Здравствуйте друзья, вопрос такой, при настройке ЧПУ слетело подключение к базе данных, не могу понять причину.
    ЧПУ настраивала через транслитерацию в файле .htaccess добавила это:

    RewriteEngine On
    Options +FollowSymlinks
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^articles/([a-z0-9\-]+)/?$ articles/page.php?id=$1 [L]

    функция код:

    function ftranslite($name){
    $name=preg_replace("/[\s+\.\,]/","-",$name);
    $name=preg_replace("/[\"\'\!\?\(\)\:\$\%]/","",$name);
    static $trans= array(
    'а'=>'a', 'б'=>'b', 'в'=>'v', 'г'=>'g', 'д'=>'d', 'е'=>'e', 'ж'=>'zh', 'з'=>'z',
    'и'=>'i', 'й'=>'y', 'к'=>'k', 'л'=>'l', 'м'=>'m', 'н'=>'n', 'о'=>'o', 'п'=>'p',
    'р'=>'r', 'с'=>'s', 'т'=>'t', 'у'=>'u', 'ф'=>'f', 'ы'=>'i', 'э'=>'e', 'А'=>'A',
    'Б'=>'B', 'В'=>'V', 'Г'=>'G', 'Д'=>'D', 'Е'=>'E', 'Ж'=>'ZH', 'З'=>'Z', 'И'=>'I',
    'Й'=>'Y', 'К'=>'K', 'Л'=>'L', 'М'=>'M', 'Н'=>'N', 'О'=>'O', 'П'=>'P', 'Р'=>'R',
    'С'=>'S', 'Т'=>'T', 'У'=>'U', 'Ф'=>'F', 'Ы'=>'I', 'Э'=>'E', 'ё'=>"yo", 'х'=>"h",
    'ц'=>"ts", 'ч'=>"ch", 'ш'=>"sh", 'щ'=>"shch", 'ъ'=>"", 'ь'=>"", 'ю'=>"yu", 'я'=>"ya",
    'Ё'=>"YO", 'Х'=>"H", 'Ц'=>"TS", 'Ч'=>"CH", 'Ш'=>"SH", 'Щ'=>"SHCH", 'Ъ'=>"", 'Ь'=>"",
    'Ю'=>"YU", 'Я'=>"YA");
    $strstring = strtr($name, $trans) ;
    return strtolower($strstring) ;
    }

    ну и ссылки на страницы блога поменяла на:

    http://gel-travel.ru/articles/<?php echo ftranslite($article["title"]) ?>/

    ЧПУ заработали, а вывод из базы данных прекратился, подключалась так:

    $db = new PDO('mysql:host=localhost;dbname=ХХХ;charset=utf8', 'ХХХ', 'ХХХ');

    $currentArticleId = intval($_GET['id']);
    $sql = "SELECT * FROM articles WHERE id = '$currentArticleId'";
    $result = $db->query($sql);
    $article = $result->fetch(PDO::FETCH_ASSOC);

    Спасибо заранее.
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.823
    Симпатии:
    736
    Адрес:
    Татарстан
    а с чего вы взяли что у вас слетело подключение к БД?
    ваши ЧПУ никоим образом не затрагивают БД и подключение к ней

    другое дело, что вы передаете уже не id статьи а title, а в скрипте ничего для этого не поменяли - вот он и преобразует каждое название через intval() в 0 - ну и думаю у вас такой статьи нет))))

    у вас теперь как-то так будет
    PHP:
    1. $currentArticle = $_GET['id'];
    2. $sql = "SELECT * FROM articles WHERE title = '$currentArticle'";
    ну конечно-же так нельзя делать... SQL инъекции и все такое, но оставляю вам это для самостоятельного разбора
     
  3. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    @Lenaole, возьмите этот фронт: https://gency.ru/g-drive-dbe-3 – избавит от замеченных костылей и дыр в безопасности.
    --- Добавлено ---
    :eek:

    PHP:
    1. <!-- в списке -->
    2. <a href="/<?= $r0['id'] или $page['id'] ?>/<?= $article['id'] или любое другое свободное имя массива, например $row['id'] ?>">
    3.  
    4. <!-- на странице статьи -->
    5. <a href="/<?= $r0['id'] ?>/<?= $r1['id'] или $page['id'] ?>">
    Но лучше использовать спец. ф-цию. Только без транслита на лету :)

    Результат кода для списка: g09.ru/articles
     
    #3 miketomlin, 13 апр 2021
    Последнее редактирование: 13 апр 2021