显示名称而不是ID PHP MySQL

时间:2010-03-16 17:38:00

标签: php mysql

我需要一些简单的东西;我有一个页面,用户点击作者查看与该作者相关的书籍。在显示作者书籍列表的页面上,我想要一个简单的HTML标题:'The books for:AUTHORNAME'

我可以让页面显示作者ID而不是名称。当用户单击作者上一页中的链接时,它看起来像这样:

<a href="viewauthorbooks.php?author_id=<?php echo $row['author_id']?>"><?php echo $row['authorname']?></a>

然后在'viewauthorbooks.php?author_id = 23'上我已经在开始时声明了这一点:

  

$ author_id = $ _GET ['author_id'];   $ authorname = $ _GET ['authorname'];

最后,“AUTHORNAME的书籍,AUTHORNAME,我有这个:

  

echo $ authorname

(使用PHP标签,但不要让我把它们放进去!)这并没有显示任何内容,但是如果我将其更改为author_id,它会显示已被点击的正确作者ID,但它并不完全是用户友好的! !任何人都可以帮助我!

4 个答案:

答案 0 :(得分:0)

您不会在查询字符串中发送它,因此您无法从$ _GET数组中获取它 只需使用id。

从数据库中请求它

重要说明:显示来自客户端的数据时始终使用htmlspacialchars()

答案 1 :(得分:0)

作者姓名不在$ _GET中。如您的代码所示,您只能将其用作链接标题。它不在地址中。试试这个:

<a href="viewauthorbooks.php?author_id=<?php echo $row['author_id']?>&authorname=<?php echo $row['authorname']?>"><?php echo $row['authorname']?></a>

最好使用author_id从数据库重新请求它。

修改

更详细地解释问题。您有两个页面,new.php页面和viewauthorbooks.php页面。您是使用您发布的链接将用户从新页面发送到视图页面,对吗?

问题是,你的链接在get中分配了一个变量。这是它将生成的查询字符串:

viewauthorbooks.php?author_id=13

该做的是将用户发送到viewauthorbooks并将值“13”放在$_GET变量中:$_GET['author_id']。这就是author_id存在并显示在viewauthorbooks上的原因。但是,authorname永远不会传递给viewauthorbooks,因为您从未设置$_GET['authorname'],因此 $_GET['authorname']中的不是。如果您希望它在$_GET中,那么您需要查询字符串如下所示:

viewauthorbooks.php?author_id=13&authorname=bob

您可以使用上面发布的链接的新HTML代码来完成此操作。仔细观察,与现在的情况有很大不同。

但是,通常不鼓励通过GET传递数据,因为查询字符串会显示给用户并使您对注入攻击持开放态度。更好的方法是使用您已经传递给viewauthorbooks.php的author_id再次从数据库中检索authorname。您可以使用在new.php页面上使用的相同代码。

答案 2 :(得分:0)

这是因为您没有在get中定义作者姓名。

您应该将以下网址设为:

<a href="viewauthorbooks.php?author_id=<?php echo $row['author_id']?>&authorname=<?php echo $row['authorname']?>"><?php echo $row['authorname']?></a>

或者更确切地说,使用您从URI中检索到的ID,在新页面上再次从数据库中选择数据。

答案 3 :(得分:0)

您可以像使用author_id一样从查询字符串中提取$_GET,但 提防 您需要验证通过通过查询。我希望你能看到,如果没有验证这是多么糟糕的安全漏洞。

我现在正在工作,但这是一个快速的例子,可以在不消除您的查询的情况下为您提供所需的内容。

$id = intval($_GET['author_id']); 
// of course, perform more validation checks
// just don't assume its safe.
$sql = "SELECT authorname FROM authors_tb WHERE author_id=" . $id;
$result = mysql_query($sql);
while($row = mysql_fetch_array($result)) {
   echo "The books for: " . $row['authorname'];
 }

您的方法无效的原因是您使用$_GET URL参数传递给author_name,其中提供URL中的参数,只有{{ 1}}。