2012-07-07 126 views
0

警告我不是一名PHP程序员。尝试从URL中提取ID字段时返回错误

我已经继承了PHP日记脚本,同时试图帮助客户恢复旧网站。脚本不能按预期运行。看来,问题在于与$ ID没有被从链路如http://example.com/diary.php?id=51

这里提取的方式是应该处理这个脚本:

<?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”

在此先感谢。

+0

你不应该直接在mysql查询中使用$ id,至少要用mysql_real_escape_string($ id)来防止sql注入, – cppanda 2012-07-08 00:03:26

回答

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))); 
... 
0

你的SQL查询是变量$id但你正在寻找的值是$_GET['id']。 jexact的解决方案通过分配$id来解决此问题,同时通过将它转换为int来保护您的应用程序免受SQL注入攻击。

相关问题