尝试从URL中提取id字段时返回错误

时间:2012-07-07 23:34:38

标签: php get

警告我不是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";

没有问题,从db中检索查询就好了。

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

  

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

提前致谢。

2 个答案:

答案 0 :(得分: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)));
...

答案 1 :(得分:0)

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