Помогите реализовать чпу
Страницы: 1 2 След.
[ Закрыто ] Помогите реализовать чпу, подскажите пожалуйста как использовать значение из бд для формирования ссылки
Всем привет, сразу к сути - при добавлении новости в бд добавляется ячейка с транслитом названия поста, к примеру "parketnaja-doska"(для корректного формирования ссылки пробелы меняются на -, / на _, . удаляются), как осуществить замену ссылки типа sait.ru/post.php?id=4 на sait.ru/4-parketnaja-doska.html
Понимаю что нужно использовать rewriterule, и уже пробовал, но все что получилось - произвести замену ссылок типа sait.ru/post.php?id=4 на sait.ru/post-4.html
Надеюсь, что поймете меня =)
Цитата
Вячеслав пишет:
как осуществить замену ссылки типа sait.ru/post.php?id=4 на sait.ru/4-parketnaja-doska.html
В .htaccess достаточно прописать две строки:
Код
RewriteEngine On
RewriteRule ^(\d+)(.+).html$ /page.php?id=$1
не совсем понимаю как брать мое значение из таблицы для формирования ссылки. 
Цитата
RewriteRule ^(\d+)(.+).html$ /page.php?id=$1

предложенный вариант ссылку меняет, но не совсем так. а именно насколько я успел понять:

sait.ru/4-parket.html
sait.ru/4-parketnaja.html
sait.ru/4-parketnaja-doska.html
... 
то есть все зависит от параметра id а продолжение ссылки можно подставить абсолютно любое. 
все ссылки открывают одну и туже страницу, что не есть хорошо.

полазил в дле там чпу реализовано так же как нужно мне, а именно в таблице с постом добавляется ячейка alt_title при помощи которой формируется ссылка в дальнейшем.
Изменено: Dox - 4 Января 2013 03:51
Dox,  тогда используйте следующее:
Код
RewriteRule ^(\d+)-([A-Za-z-_0-9]+).html$ /page.php?id=$1&name=$2
Если на примере sait.ru/4-parketnaja-doska.html, то переменные примут следующие значения $_GET['id'] == 4, а $_GET['name'] == 'parketnaja-doska'
 и запрос в бд делайте по id и по ячейки с транслитом
Код
"SELECT * FROM `test` WHERE `id`='$_GET[id]' AND `translit`='$_GET[name]' LIMIT 1"
Lord_of_fire, у меня такой запрос получился, все верно?
Код
$chpu = mysql_query("SELECT id,alt_title FROM `post` WHERE `id`='$_GET[id]' AND `alt_title`='$_GET[alt_title]' LIMIT 1",$db); 

 запрос в файле post.php (он у меня занимается выводом поста) должно быть? 
если да то, что-то все тоже, что и с прошлым вашим кодом. (ссылки зависят от ид)
Dox, нет, вы не правильно поняли. Надо не создавать новый запрос, а изменить имеющийся, который достает статью. То есть условие выборки должно содержать примерно следующее 
Код
"SELECT * FROM `post` WHERE `id`='$_GET[id]' AND `alt_title`='$_GET[name]'"
Если хотите точнее, то напишите свой запрос, который достает статью.
Lord_of_fire, спасибо за то что уделяете мне время =) я понял, теперь не понимаю как передать 2 параметра в get если ссылка на пост формируется таким вот циклом
Код
do 
{
printf ("<а href='post.php?id=%s'>%s »</a>",$s['id'],$s['title']); 
}  
while ($post = mysql_fetch_array($result));

и раз переменные в get каким образом можно будет получить прямую ссылку на пост? ведь нужно чтобы в гет попадали параметры?
$result = mysql_query("SELECT * FROM post WHERE id='$id'",$db);
вот запрос в на выборку по параметру id в post.php
if (isset($_GET['id'])) {$id = $_GET['id'];} - само собой заменил на обычную переменную
Dox, вот примерно такой должен быть код
Код
do 
{
   printf ("<а href='/%s-%s.html'>%s »</a>",$s['id'],$s['alt_title'],$s['title']); 
}  
while ($post = mysql_fetch_array($result));
 
Изменено: Lord_of_fire - 4 Января 2013 21:04
вот такой вот код выводит "в таблице нет записей", с чего бы? получается что запрос проходит, то есть с обозначением полей проблем нет. если вместо $alt_name использовать содержимое ячейки из бд то все нормально, и это странно, ведь получается что одно противоречит другому.
Код
<?  include ("data/bd.php");
if (isset($_GET['id'])) {$id = $_GET['id'];}
if (isset($_GET['alt_title'])) {$alt_title = $_GET['alt_title'];}
$result = mysql_query("SELECT * FROM post WHERE id='$id' AND alt_title='$alt_title'",$db);
if (!$result8)
{
echo "запрос на выборку не прошел";
exit(mysql_error());
}
if (mysql_num_rows($result8) > 0)
{ 
$s = mysql_fetch_array($result8);
else
{
echo "<p>в таблице нет записей</p>";
exit();
}
?>
Изменено: Dox - 4 Января 2013 21:42
Цитата
Dox пишет:
вот такой вот код выводит "в таблице нет записей", с чего бы?

а в .htaccess вы прописали это?
Код
RewriteRule ^(\d+)-([A-Za-z-_0-9]+).html$ /page.php?id=$1&name=$2
или это?
Код
 RewriteRule ^(\d+)-([A-Za-z-_0-9]+).html$ /page.php?id=$1&alt_title=$2
Lord_of_fire, огромное спасибо, все работает! что-то я затупил smile:)
[img]s019.radikal.ru/i627/1301/2e/b31719c3bdfb.png[/img]не могли бы вы объяснить что за d? почему d, а не id? и правильно ли я понял механизм этого кода?
Цитата
Dox пишет:
не могли бы вы объяснить что за d? почему d, а не id?
\d можно заменить на [0-9], то есть указывает, что должны идти цифры
Цитата
Dox пишет:
и правильно ли я понял механизм этого кода?
в принципе правильно, только стрелочки должны быть в обратном направлении
Lord_of_fire, еще раз спасибо. Тему можно закрывать.
Страницы: 1 2 След.
Похожие темы:
Читают тему (гостей: 1, пользователей: 0, из них скрытых: 0)
Новые темыОбъявленияСвободное общение
22:27 LOSPOLLOS.COM - Конвертим по рецепту Хайзенберга. Dating, Mainstream, Binary Options 
12:39 2Index - быстрая индексация страниц сайта и обратных ссылок 
06:17 3snet - гемблинг, беттинг, форекс, бинарные опционы, майнинг 
11:46 SharkBoss - партнёрская программа для монетизации ЛЮБЫХ видов трафика (включая спам). 
23:10 Dao.AD: Монетизация и покупка Push/Pops/Inpage и Video трафика! 
21:20 Rotapost прикрыли! Чем пользоваться? 
00:23 Раскрутка форума 
13:38 BIGPROXY.SHOP - Резидентные Ротационные Backconnect Proxy USA EUROPA MIX [Безлимитный трафик] 
13:16 PonyBit.ru - обменный пункт PonyBit.ru (Понибит.ру) 
12:46 Мобильные и Резидентные Прокси Для Соц Сетей | 3 Гб Бесплатно 
12:12 CryptoGraph — Анонимный обмен криптовалют без KYC и AML 
10:46 Linken Sphere – браузер-антидетект нового поколения 
05:06 CoinCapital  
04:28 Просто $0.04/IP 9PROXY.COM Резидентные прокси Неограниченная пропускная способность Уникальная политика замены Без чёрного списка 
13:08 Бесплатный майнинг Tether (USDT) 
10:29 С юмором по жизни! 
16:49 monetizer.agency – рекламная сеть для взрослого и развлекательного трафика. 100$ новому вебмастеру 
20:43 Добро пожаловать в цифровой мир... 
15:59 Про мясо 
23:09 ПП от PMS remote.team - 200$ за команду 
13:28 Компьютерная мышь