警告我不是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”
提前致谢。
答案 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注入。