显示名称而不是ID PHP MySQL
我需要一些简单的东西;我有一个页面,用户点击作者可以看到与该作者相关的书籍。在我为作者显示书籍列表的页面上,我想要一个简单的HTML标题,上面写着:“the books for:AUTHORNAME” 我可以让页面显示作者ID,但不能显示姓名。当用户单击作者上一页中的链接时,看起来如下所示:显示名称而不是ID PHP MySQL,php,mysql,Php,Mysql,我需要一些简单的东西;我有一个页面,用户点击作者可以看到与该作者相关的书籍。在我为作者显示书籍列表的页面上,我想要一个简单的HTML标题,上面写着:“the books for:AUTHORNAME” 我可以让页面显示作者ID,但不能显示姓名。当用户单击作者上一页中的链接时,看起来如下所示: <a href="viewauthorbooks.php?author_id=<?php echo $row['author_id']?>"><?php echo $row['
<a href="viewauthorbooks.php?author_id=<?php echo $row['author_id']?>"><?php echo $row['authorname']?></a>
然后在“viewauthorbooks.php?author_id=23”中,我一开始就声明了这一点:
$author\u id=$\u GET['author\u id'];
$authorname=$\u获取['authorname']
最后,“AUTHORNAME的书,上面写着AUTHORNAME,我有:
echo$authorname
(使用PHP标记,但它不允许我将它们放入!)这不会显示任何内容,但是如果我将其更改为author_id,它会显示已单击的正确的author id,但这并不完全是用户友好的!!有人能帮我吗 您不在查询字符串中发送它,因此无法从$\u get数组中获取它。
只需使用id从数据库中请求它
一个重要注意事项:在显示来自客户端的数据时,始终使用
htmlspacialchars()
。作者姓名不在$\u GET中。按照您的代码,您只能将其用作链接标题。这不是地址上的任何地方。请尝试以下方法:
<a href="viewauthorbooks.php?author_id=<?php echo $row['author_id']?>&authorname=<?php echo $row['authorname']?>"><?php echo $row['authorname']?></a>
这样做的目的是将用户发送到viewauthorbooks,并将值“13”放在$\u GET
变量中:$\u GET['author\u id']
。这就是作者id存在并显示在viewauthorbooks上的原因。但是,authorname从未传递给viewauthorbooks,它不在$\u GET['authorname']
中,因为您从未设置$\u GET['authorname']
。如果希望它位于$\u GET
,则需要查询字符串如下所示:
viewauthorbooks.php?author_id=13&authorname=bob
您可以使用我上面发布的链接的新HTML代码来实现这一点。仔细看,这与你现在所拥有的有一个关键的区别
但是,通常不鼓励通过GET传递数据,因为查询字符串会显示给用户,并且会让您面临注入攻击。更好的方法是使用您已经传递到viewauthorbooks.php的author\u id再次从数据库检索authorname。您可以使用与new.php页面相同的代码。这是因为您没有在get中定义作者名称 您应该将以下内容设置为您的url:
<a href="viewauthorbooks.php?author_id=<?php echo $row['author_id']?>&authorname=<?php echo $row['authorname']?>"><?php echo $row['authorname']?></a>
或者,在新页面上,使用从URI检索到的ID再次从数据库中选择数据。您可以像使用
$\u GET
一样从查询字符串中提取作者ID
,但是注意您需要验证查询所得到的信息。我希望你能在没有验证的情况下看到这是一个多么糟糕的安全漏洞
我现在正在工作,但这是一个快速的例子,可以在不清理查询的情况下为您提供所需的信息
$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'];
}
您的方法不起作用的原因是因为您使用了传递给author\u name的URL参数,而您没有在URL中提供参数,只有
author\u id
您确定$row['authorname']
有值吗?如何从数据库中检索作者的姓名?$\u GET['authorname']
用于什么?在我的authors表中,我将'authorname'作为一个值,这是您的意思吗?我的意思是,您确定从查询返回表中的值吗?您是否可以执行var\u dump
并查看它是否实际存在。我将此作为一个查询:$sql=“SELECT author\u id,authorname FROM authors\u tb WHERE author\u id=”.$author\u id;另外,我不知道如何进行var_转储?我以前从未遇到过这个问题对不起:坐着没事,从下面的回答中我能更好地理解你的问题。另外,每个回复的人都给了你一个合适的答案。这就是我(在新页面上)试图做的:$sql=“选择作者id,authorname FROM authors\u tb WHERE author\u id=”.$author\u id“我是否弄错了要点,甚至语法?这就是我(在新页面上)试图做的:$sql=“选择作者id,authorname FROM authors_tb WHERE author_id=“.$author_id”我是否理解错了要点,甚至语法?您的选择很好,但是,在php中变量不会跨页面传输。您没有将authorname值传递到viewauthorbooks.php页面的任何位置。您需要以某种方式将authorname值发送到viewauthorbooks.php。你可以使用我上面发布的链接,通过$\u GET完成。或者您可以使用作者id,在viewauthorbooks.php页面上再次运行相同的查询。@Downvoter,答案有什么问题?我一定会修改的。为了使它$id=intval($\u GET['author\u id'])代码>只长8个字符。而你却花了10倍多的时间来获得无用的评论。有没有想过你的代码会仅仅是复制的?你是绝对正确的,我花了太多的时间来编辑答案,没有什么特别的细节,错过了重要的部分。没有争论。我修改了我的答案,希望能弥补它。
$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'];
}