MySQL: показывать содержимое в постоянных ссылках по идентификатору строки


Я пытаюсь создать свою собственную CMS, и я довольно новичок в php и mysql. Позвольте мне перейти к делу:

До сих пор я создавал новости на странице индекса с постоянными ссылками "подробнее" (что означает, что когда я нажимаю "подробнее", это перемещает меня на другую страницу, например, /readmore.php?id=[news ID], и на этой странице единственное содержимое - это конкретные новости, т.е. определенная строка из таблицы. То, с чем я застрял, - это получение определенного идентификатора строки в этой постоянной ссылке.

Позвольте мне показать код, который в настоящее время работает для меня.

Индекс файл с новостями:

while($row = mysql_fetch_array($result))  
   {
/*... title, news content... */
   echo "<a href='readmore.php?id=".$row['ID']."'>".$read_more_link."</a></div>";
}

Readmore.php с точной строкой (например, readmore.php?id=1201):

$params = $_SERVER['QUERY_STRING'];
$str = $params;
$id1 = $str[strlen($str)-1];
$id2 = $str[strlen($str)-2];
$id3 = $str[strlen($str)-3];
$id4 = $str[strlen($str)-4];
$news_id = "$id4$id3$id2$id1";

$query = "SELECT * FROM naujiena WHERE ID='$news_id'";

В основном, что он делает, он восстанавливает 4 последние цифры из адресной строки и ищет эти новости с этим 4-значным идентификатором

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

Что я пробовал раньше, так это создать переменную с сеансом в цикле while($row = mysql_fetch_array($result)), она показывает идентификаторы на странице индекса, как и должно быть, но в прочитайте больше страницы только последнюю или первую (зависит от desc или asc), что было совершенно очевидно ожидать

Вы можете мне помочь? Я был бы признателен за это.

Author: Baseckas, 2012-04-08

4 answers

Вы можете получить доступ к значениям в строке запроса по имени в массиве $_GET.

Например, $_GET['id'] будет значением части id=<ID> строки запроса. Это работает для каждого поля строки запроса.

// url : readmore.php?id=1201
$news_id = intval($_GET['id']);
// now, $news_id contains the value 1201
$query = "SELECT * FROM naujiena WHERE ID='$news_id'";

Вы можете прочитать официальную справку : $_GET или один из различных учебников, которые вы можете найти в Интернете: http://www.w3schools.com/php/php_get.asp

Обновление

Поскольку вы приняли мой ответ, я чувствую себя обязанным также бросьте пару слов о SQL-инъекции. Вы всегда должны очищать любые входные данные, которые вы используете в SQL-запросе, с помощью mysql_real_escape_string. Вы можете найти более подробную информацию в Википедии: SQL-инъекция или в документации PHP: SQL-инъекция.

Поскольку ваши идентификаторы являются числовыми значениями, вы также можете убедиться в этом. Я обновил фрагмент кода, чтобы сделать это с помощью intval.

 2
Author: krtek, 2012-04-07 22:05:18

Чтобы извлечь параметры строки запроса в php, используйте $_GET суперглобальный, например:

$_GET["id"]

Также обратите внимание, что любые данные, предоставленные удаленным пользователем (пользователем, браузером и т.д.), могут быть подделаны. Таким образом, злоумышленник может также отправить вам ?id=0; DROP TABLE users или что-то подобное.

Подробнее о SQL-инъекциях.

Всегда полезно проверить входные данные. Вы ожидаете, что идентификатор будет целым числом, поэтому в целях безопасности вы можете проверить if(ctype_digit($_GET["id"]))) ...

И наконец, также рекомендуется очистить любые входные данные, которые вы используете в инструкциях SQL. Использовать mysql_real_escape_string(), или рассмотрите возможность использования PDO

 2
Author: poncha, 2012-04-07 21:54:41

Чтобы получить определенную переменную HTTP-GET, вы можете использовать $_GET["variableName"]. В вашем случае вы могли бы получить идентификатор следующим образом:

$news_id = $_GET["id"];

 1
Author: Christofer Eliasson, 2012-04-07 21:49:57

Используйте pdo, он уже включает в себя предустановку sql-инъекции

 0
Author: keslol, 2012-04-07 23:14:09