0

警告我不是 php 程序员。

在尝试帮助客户恢复旧站点时,我继承了一个 php 日记脚本。该脚本未按预期运行。似乎问题在于没有从http://example.com/diary.php?id=51等链接中提取 $id 的方式

这是应该处理此问题的脚本:

<?php
// instert automatic date structure for 2004 or 2005
include 'admin24/config.inc.php';
if (isset($_GET['id'])){ 
$query = "SELECT * FROM `diary` WHERE id=$id";
$result = mysql_query($query)
    or die ("problem resolving information....contact php_admin");     
$row = mysql_fetch_array($result);
extract($row);
$date = date("j F Y", (strtotime($date)));
?>

如果我用一个整数代替$id这样的:

$query = "SELECT * FROM `diary` WHERE id=51";

没有问题,从数据库中检索查询就好了。

谁能告诉我为什么这不起作用?事实上,它总是返回:

“问题解决信息....联系 php_admin”

提前致谢。

4

2 回答 2

2

我猜register_globals已经关闭(推荐),所以$id需要初始化。尝试这个:

<?php
// instert automatic date structure for 2004 or 2005
include 'admin24/config.inc.php';
if (isset($_GET['id'])){
  $id = (int) $_GET['id']; // the cast to 'int' is necessary to prevent sql injections!
  $query = "SELECT * FROM `diary` WHERE id=$id";
  $result = mysql_query($query)
    or die ("problem resolving information....contact php_admin");     
  $row = mysql_fetch_array($result);
  extract($row);
  $date = date("j F Y", (strtotime($date)));
...
于 2012-07-07T23:46:48.550 回答
0

您的 SQL 查询是针对变量$id的,但您要查找的值在$_GET['id']. jexact 的解决方案通过分配来解决此问题,$id同时通过将其转换为 int 来保护您的应用免受 SQL 注入。

于 2012-07-07T23:52:58.750 回答