我设置了一个小测试项目,这样当您单击狼的名字时,它会将它们带到一个页面,我想使用该页面来个性化有关它们单击的任何狼的信息。该页面称为 wolf.php。我正在尝试使用传递变量 $_GET 方法将 URL 分配给 wolves id,即 www.testsite.com/wolf.php?id=1 但是即使我没有收到错误,页面也不会显示任何内容。
这是主页(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'].
;
?>
我不确定哪里出错了,但这似乎不起作用。没有关于狼的 id 的信息出现。提前感谢您的帮助。
最佳答案
使用 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 注入(inject)是完全开放的。至少,对查询输入变量调用 mysql_real_escape_string()
。
$id = mysql_real_escape_string($_GET['id']);
最终,考虑使用 PDO 或 MySQLi 而不是旧的 mysql_*()
函数,因为它们支持准备好的语句,比手动转义变量更安全。 mysql_*()
函数计划弃用。
关于php - 没有错误,但页面仍然空白并传递变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11603892/