Замяна на част от url-то с име

smoke

Registered
Здравейте,
искам когато примерно някой отвори да кажем този адрес http://sait.com/login.php?cat=5 всичкото това login.php?cat=5 да бъде заместено с име което да се взима от базата данни където cat е равно на 5 в този случай? Това за базта и искарването го знам но как да го заместя в url адреса.?

И обратното ако някой въведете примерно "Мълния" да се провери това име на кой "cat" отговаря и да бъдат показа данните от базата данни къдео cat = 5 в този случай?
 
Здравей,
ще започна от базата-данни и ще направя пример с категории.

1. Структура на базата-данни.
Освен стандартните колони, които ни трябват - id, name, ще имаме и url - това е стойността, която ще бъде част от линка.

Код:
create table category(
  id int(10) unsigned not null primary key auto_increment,
  name varchar(100) unique not null,
  url varchar(100) unique not null
);

INSERT into category VALUES 
                                  (NULL, 'Автомобили', 'avtomobili'),
                                  (NULL, 'Недвижими имоти', 'imoti');

2. Листване на категориите като списък/меню. Вероятно ще искаш да представш по този начин различни ресурси (менюта, категории, заглавия и т.н.) затова е желателно предварително да си определиш т.н. разделители:

http://example.com/cat/category_url
http://example.com/gallery/gallery_url

В последствие, спрямо разделителя можеш да пренасочваш към различни ресурси и ще знаеш какво е поискано.

Код:
echo "<ul>";

$result = mysql_query("SELECT name, url FROM category");

while($category = mysql_fetch_array($result)){
    echo "<li><a href=\"/cat/".$category[url]."\">".$category['name']."</a></li>";
}

echo "</ul>";

3. mod_rewrite и .htaccess
Правиш един празен файл в най-обикновен текстов редактор като Notepad, ако си под Windows, внимавай с името на файла - преди точката няма нищо!

Име на файла .htaccess

Вътре във файла слагаш този код:

Код:
RewriteEngine On
RewriteRule cat/(.*) category.php?category_url=$1 [NC,L]
RewriteRule gallery/(.*) gallery.php?gallery_url=$1 [NC,L]

4. В category.php файла, взимаш стойността от $_GET['category_url'] и я търсиш в таблицата с категориите.

Не очаквай да подкараш примера от първия път, защото mod_rewrite не е от лесните за схващане, винаги обръщай внимание на пътищата.
 
а как може да стане обратно-то имам предвид ако някой напише да кажем
www.example.com/bratko/ и да излезнат всички дани с това име :?
 
В такъв случай, това ти е новия .htaccess файл:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^(.*)$ search.php?keyword=$1

Преведено на човешки език, това означава, че ако е заявката е за съществуващ файл, директория или символна връзка, сървъра ще си работи нормално, но ако е нещо неизвестно, то ще бъде пренасочено към файла search.php в който вече ще имаш стойността в $_GET['keyword']

С други думи, ако някой напише:

http://example.com/mitko и "mitko" е директория на твоя сървър, няма да се стигне до пренасочване към search.php?keyword=mitko

По-натам, как ще търсиш в search.php ти знаеш най-добре, защото нямам идея какво имаш в предвид под "да излезнат всички дани с това име" - търсене в една таблица, по една колона, в различни таблици, различни ресурси и т.н.
 
Ти няма да си в никаква "папка", тези "папки" не съществуват, ти не си "вътре".

Във горния пример, във файла search.php можеш да използваш $_GET['keyword'] за да видиш коя "папка" е поискана.
 
АЗ не ти говоря за този Вид говоря по принцип като отида да кажем в /css/index.php как да взема името на текущата папка?
 
Конкретно за едно-единствено име на директория не знам как ще стане, но е относително лесно, и има много начини, да вземеш пълния път до съответната директория и натам ще се справиш. Виж тези РНР функции:

getcwd
pathinfo

също така виж какво имаш в масива $_SERVER - понякога е много ценен
 
И аз неможах да те разбера значи искаш например: bratko.php да стане като папка bratko, а да си е .php файл? Ако е да:

Код:
RewriteEngine on
RewriteRule ^bratko bratko.php
 

Back
Горе