我正在尝试创建自己的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)这是非常明显的期望
答案 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注入预防