3

我正在尝试制作自己的 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

3 回答 3

2

要在 php 中提取查询字符串的参数,请使用$_GET超全局,如下所示:

$_GET["id"]

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

阅读有关SQL 注入的更多信息。

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

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

于 2012-04-07T21:48:41.193 回答
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 注入。您应该始终清理您在 SQL 查询中使用的任何输入mysql_real_escape_string。您可以在 Wikipedia:SQL 注入或 PHP 文档:SQL 注入中找到更多详细信息。

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

于 2012-04-07T21:50:12.780 回答
1

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

$news_id = $_GET["id"];

于 2012-04-07T21:49:57.853 回答