MySQL:按行ID在永久链接中显示内容

时间:2012-04-07 21:44:23

标签: php mysql permalinks

我正在尝试创建自己的CMS,我在php和mysql中都是新手。让我谈谈这一点:

到目前为止,我已经在索引页面中创建了“更多”永久链接的新闻(这意味着,当我按下阅读更多时,它会将我移动到其他页面,例如/readmore.php?id=[news ID],在该页面中,唯一的内容是那些特定的新闻,即表中的特定行。我坚持的是在该永久链接中获取特定的行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位数ID的新闻

这是一种非常原始的做法,但我已经坚持了几天,无法找到出路。

我以前尝试过的是在while($row = mysql_fetch_array($result))循环中创建一个带会话的变量,它在索引页面中显示ID应该如此,但在readmore页面中只显示最后一个或第一个(取决于desc或asc)这是非常明显的期望

你能帮帮我吗?我很感激。

4 个答案:

答案 0 :(得分:2)

要在php中提取query-string的参数,请使用$_GET super-global,如下所示:

$_GET["id"]

另请注意,远程(用户,浏览器等)提供的任何数据都可能是伪造的。 因此,攻击者也可以向您发送?id=0; DROP TABLE users或类似内容。

详细了解SQL Injections

验证输入始终是个好主意。 您希望 id 是一个整数,所以为了安全起见,您可以查看if(ctype_digit($_GET["id"]))) ...

最后,清理在SQL语句中使用的任何输入也是一个好主意。使用mysql_real_escape_string(),或考虑使用PDO

答案 1 :(得分:2)

您可以在$_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注入说一句话。您应始终使用mysql_real_escape_string清理在SQL查询中使用的任何输入。您可以在维基百科上找到更多详细信息:SQL injection或在PHP文档中找到:SQL Injection

由于您的ID是数字值,因此您也可以确保这一点。我使用intval更新了代码段以执行此操作。

答案 2 :(得分:1)

要获取特定的HTTP-GET变量,您可以使用$_GET["variableName"]。在您的情况下,您可以获得这样的ID:

$news_id = $_GET["id"];

答案 3 :(得分:0)

使用pdo已经包含sql注入预防