@chernousovkgb

Как сделать вывод страниц из бд по ЧПУ php?

Моих знаний не хватило ни mvc ни даже на нормальный роутер для чпу, но в целом получилось сделать ЧПУ и вывод записи из бд без GET по чпу.

Опишу все в коде, чтобы вам было понятно о чем я говорю.
И так, сначала я нашел готовый .htaccess вот с таким содержимым

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?categor=$1&id=$2 [L,QSA]
</IfModule>


На сколько я понял он заменяет GET запросы на какие то переменные, вроде работает, но вытаскивает запись только если в урле не более 2 этих get

Далее я сделал вывод записей

<?php 
               // ранее подключился к бд
//создаем переменную с подключением к таблице
               $urly=mysqli_query($db, "SELECT * FROM news"); 
//в цикле перебираем таблицу в массив 
               while ($rows = mysqli_fetch_assoc($urly))
               {
                   $namecategor=$rows['categor'];
                   $nameid=$rows['id'];
                   $chpu=$rows['CHPU'];

//создаем ссылки 
                   echo "<p> <a href=\"http://--/demotwo/$namecategor/$nameid\"/> $nameid</a>";
               }
               
               
               

// на сколько я понял из гугла, чтобы теперь после создания чпу вытащить запись по get надо разбить урл на части
$url = "http://".$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
//тут просто смотрю что работает
            echo "<br>$url <hr>";
            
    
//разбиваю
$delit = explode("/", $url);



//а вот тут все сложности, я не понимаю как сделать условие, если у меня есть $delit['5'] то все работает
//я могу знать заранее, что $delit будет 5, но только при условии что сайт будет всегда состоять из color/id 
//а как сделать чтобы работало например color/white/id я не понимаю, отдельными условиями ? но мне кажется это тупо
          
     if ( $delit['5']) {
                   $unid=$delit["5"];
                    $urly=mysqli_query($db, "SELECT * FROM news WHERE id=$unid");
               while ($rows = mysqli_fetch_assoc($urly))
               {
//тут просто проверяем, что что то в состоянии вывести
                   echo "$rows[categor]";
              }
              } else {
                  
              }

  
?>


Если вдруг захотите дать совет учить матчатсь, то дайте ссылку на хороший учебник, а лучше просто не реагируйте.

Всем кто откликнется - низкий поклон)

тяжко мне дается php
  • Вопрос задан
  • 382 просмотра
Пригласить эксперта
Ответы на вопрос 2
php666
@php666
PHP-макака
ЧПУ на PHP.

тяжко мне дается php
Ст. 12-13 От дней же Иоанна Крестителя доныне Царство Небесное силою берется, и употребляющие усилие восхищают его...
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]


Во-первых, никаких "categor". Введенный адрес всегда доступен в пхп, так что загружать этим htaccess бессмысленно.

Дальше, никакого "chpu" и прочей ерунды в базе быть не должно. Нам должен быть только идентификатор новости. Но он в базе и так есть. И это единственное, что должно быть в адресе. остальное по желанию.

Соответственно, вынимаем из $_SERVER['REQUEST_URI'] ид новости, и по этому ид запрашиваем.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы