我设置了一个小测试项目,这样当你点击一个狼的名字时,它会将它们带到我想用来个性化有关他们点击的狼的信息的页面。该页面名为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'].
;
?>
我不确定我哪里出错但这似乎不起作用。没有关于狼身份的信息显示出来。提前感谢您的帮助。
答案 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注入漏洞的信息。