没有错误,但传递变量的页面仍为空白

时间:2012-07-22 20:52:01

标签: php mysql variables global-variables echo

我设置了一个小测试项目,这样当你点击一个狼的名字时,它会将它们带到我想用来个性化有关他们点击的狼的信息的页面。该页面名为wolf.php。我正在尝试使用传递变量$ _GET方法来为狼ID分配URL,即www.testsite.com/wolf.php?id=1但是,即使我没有收到错误,页面也不会显示任何内容。< / p>

这是主页(home.php)

<?php
$username = $_SESSION['username'];
$result = @mysql_query("SELECT * FROM wolves WHERE owner = '$username'");
while($wolf = mysql_fetch_array($result))
{
echo "<a href= wolf.php?id=$wolf[id]>$wolf[name]</a>";
};
?>

点击此链接将我带到www.testsite.com/wolf.php?id=1(或任何ID)。在wolf.php上我有这个:

<?php
$id = $_GET['id'];
$result = @mysql_query("SELECT name FROM wolves WHERE id = '$id'") or die("Error: no  
such wolf exists");
echo .$result['name'].
;
?>

我不确定我哪里出错但这似乎不起作用。没有关于狼身份的信息显示出来。提前感谢您的帮助。

4 个答案:

答案 0 :(得分:3)

在开发中使用error_reporting(E_ALL); ini_set('display_errors', 1);打开错误报告,以便在代码中看到致命的语法错误。还建议您从@来电中删除mysql_*()错误抑制运算符。

最后一行有语法问题。意外的.连接运算符:

// Wrong:
// Parse error: syntax error, unexpected '.'
echo .$result['name'].
;

// Should be:
echo $result['name'];

接下来,您还没有从查询中提取一行:

// mysql_query() won't error if there are no rows found.  Instead you have to check mysql_num_rows()
$result = mysql_query("SELECT name FROM wolves WHERE id = '$id'") or die("Query error: " . mysql_error());
// Zero rows found, echo error message.
if (mysql_num_rows($result) < 1) {
  echo "No such wolf.";
}
else {
  // Row found, fetch and display.
  $row = mysql_fetch_assoc($result);
  echo $row['name'];
}

请注意,此脚本对SQL注入是开放的。至少,在查询输入变量上调用mysql_real_escape_string()

$id = mysql_real_escape_string($_GET['id']);

最后,考虑使用PDO或MySQLi而不是旧的mysql_*()函数,因为它们支持预处理语句,以提高手动转义变量的安全性。计划弃用mysql_*()函数。

答案 1 :(得分:1)

首先需要获取结果行。

变体1 - 关联数组(值可以作为字段名称使用)

$result = mysql_fetch_assoc($result);
echo $result['name'];

变体2 - 枚举数组(按索引,从零开始)

$result = mysql_fetch_row($result);
echo $result[0];

答案 2 :(得分:0)

<?php
$username = $_SESSION['username'];
$result = @mysql_query("SELECT * FROM wolves WHERE owner = '$username'");

您在开始时忘记了session_start();$username是“”,而sql可能会返回0条记录。

答案 3 :(得分:0)

在你的第二个片段中,你不能将$result视为一个阵列;它是一个资源标识符。要获得数组,请执行以下操作:

$row = mysql_fetch_assoc($result);
echo $row['name'];

另请阅读有关SQL注入漏洞的信息。