Php MySQL:按行ID在永久链接中显示内容
我正在尝试制作我自己的CMS,我对php和mysql非常陌生。让我开门见山: 到目前为止,我已经在索引页面中创建了带有“read more”永久链接的新闻(这意味着,当我按下read more时,它会将我移动到另一个页面,例如,Php MySQL:按行ID在永久链接中显示内容,php,mysql,permalinks,Php,Mysql,Permalinks,我正在尝试制作我自己的CMS,我对php和mysql非常陌生。让我开门见山: 到目前为止,我已经在索引页面中创建了带有“read more”永久链接的新闻(这意味着,当我按下read more时,它会将我移动到另一个页面,例如,/readmore.php?id=[news id],而在该页面中,唯一的内容是那些特定的新闻,即表中的特定行。我一直在该永久链接中获取特定的行id 让我展示一下目前适用于我的代码 包含新闻的索引文件: while($row = mysql_fetch_array($re
/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>";
}
基本上,它会从地址栏中恢复最后4位数字,并用这4位数字的ID搜索新闻
这是一种非常原始的方法,但我坚持了几天,找不到出路
我以前尝试过的是在循环中创建一个变量,其中包含session($row=mysql\u fetch\u array($result))
循环,它在索引页中按原样显示ID,但在readmore页中,只显示最后一个或第一个(取决于desc或asc),这一点是显而易见的
您能帮我吗?我将不胜感激。要在php中提取查询字符串的参数,请使用
$\u GET
super-global,如下所示:
$_GET["id"]
还要注意,远程用户(用户、浏览器等)提供的任何数据都可能是伪造的。
因此,攻击者也可以向您发送?id=0;删除表用户
或类似信息
阅读更多关于
验证输入总是一个好主意。
您希望id是一个整数,因此为了安全起见,可以检查if(ctype\u digit($\u GET[“id”])…
最后,清理SQL语句中使用的任何输入也是一个好主意。使用或考虑使用
获取可以使用的特定HTTPGET变量。在您的情况下,您可以获得如下ID:
$news\u id=$\u GET[“id”]
您可以在$\u GET
数组中按名称访问查询字符串中的值
例如,$\u GET['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'";
您可以阅读官方帮助:或您可以在web上找到的各种教程之一:
更新
既然您接受了我的回答,我觉得有义务也谈谈SQL注入。您应该始终清理SQL查询中使用的任何输入。您可以在Wikipedia:或PHP文档中找到更多详细信息:
因为您的ID是数值,所以您还可以确保。为此,我更新了代码片段。感谢您的关注,我已经在我的登录和评论表单中添加了
mysql\u rea\u escape\u string()。谢谢你的intval
礼物!感谢你。你应该逃避一切,有很多方法可以在数据库中注入东西,你不会想冒险的!那么你是说我应该这样写:$id=mysql\u real\u escape\u string($\u GET[“id”])
?(或/和)使用检查是否(ctype_digit(…))…
?是,始终验证数据,并始终转义数据。如果你两者都做,你就安全了
// 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'";