Постоянная ссылка, .htaccess красивые ссылки - PullRequest
0 голосов
/ 03 октября 2011

Мне очень жаль, если я вас раздражаю, ребята, но это мой последний вопрос в отношении трюков .htaccess

Мне нужен стиль WordPress, 'довольно постоянные ссылки'

Но этослишком запутанно для меня.

Мне нужно, этот URL http://test.com/?page=test&ID=1 будет http://test.com/test/NAMEFROMDATABASE

Как?Я знаю, как получить ID=1 с помощью $_GET['ID'], но как мне поместить значение из базы данных в URL и прочитать его?

Ответы [ 3 ]

6 голосов
/ 03 октября 2011

вы не можете получить значение идентификатора по $ _GET ['ID'] непосредственно с этого URL: http://test.com/test/NAMEFROMDATABASE.

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

  1. создать ссылку по названию категории.то есть, если у вас есть категория ноутбука, создайте ссылку, например, http://test.com/category/CATNAME

  2. Введите код перезаписи в htaccess. RewriteRule ^category/(.*)$ categories\.php?CNAME=$2&%{QUERY_STRING} [L]

  3. в коде PHP получите идентификатор категории из имени категории.$catName=$_GET['CNAME']

ИЛИ

  1. создать ссылку по названию категории и идентификатору категории.то есть, если у вас есть категория ноутбука, создайте ссылку, например http://test.com/category/CATNAME-ID-CATID
  2. Написать код перезаписи в htaccess.RewriteRule ^category/(.*)-ID-([0-9]+)$ categories\.php?ID=$2&%{QUERY_STRING} [L]
  3. в коде PHP получить идентификатор категории напрямую.$catID= $_GET['ID']
1 голос
/ 03 октября 2011

Вы не можете сделать это в htaccess, вам нужно будет настроить свой скрипт, чтобы вместо получения id = 1 получалось имя = xxx.Чем он будет искать имя в базе данных и вычислять ID

Хорошо, так что в .htaccess у вас будет что-то вроде этого

RewriteRule ^something/(.+)\.htm$ something/file.php?djname=$1 

В вашем PHP-скрипте вы будете иметь

$name = mysql_real_escape_string($_GET['djname']);

$sql = "SELECT * FROM djtable where name='" . $name . "' LIMIT 1";

OBS: 1. Используйте правильное экранирование sql.2. Убедитесь, что имена dj различны в базе данных.

1 голос
/ 03 октября 2011

Как?Я знаю, как получить ID = 1 с помощью $ _GET ['ID'], но как мне поместить значение из базы данных в URL и прочитать его?

Вы получаете значение избаза данных выглядит так:

$id = mysql_real_escape_string($_GET['id']);
$sql = "SELECT folder, urlname FROM urls WHERE id = '$id' ";
// don't forget to single quote '$id'       ^   ^  or you'll get errors
// and even worse mysql_real_escape_string() will not protect you.
if ($result = mysql_query($sql)) {
  $row = mysql_fetch_row($result);
  $pagename = $row['urlname'];
  $folder = $row['folder'];
}

Если вы знаете, id является целым числом, вы также можете использовать $id = intval($_GET['id']);
Я рекомендую всегда использовать mysql_real_escape_string(), потому что он работает для всех значений и intvalработает только для целых чисел.
В SQL никогда не бывает проблем заключать в кавычки числа, поэтому старайтесь всегда заключать в кавычки все.
Таким образом, вы не можете ошибаться.

Вы можете никогда делать

$sql = "SELECT urlname FROM urls WHERE id = '{$_GET['id']}' ";

Поскольку это дыра в безопасности SQL-инъекций.

См .:
Как это сделатьSQL-инъекция из комиксов XKCD «Таблицы Бобби»?
http://php.net/manual/en/function.mysql-query.php
http://php.net/manual/en/function.mysql-fetch-row.php
http://php.net/manual/en/function.mysql-connect.php
http://php.net/manual/en/function.mysql-close.php

...