在网址中显示用户名而不是用户的ID

时间:2018-03-28 00:11:23

标签: php

我目前有一个用户页面,它会显示用户的最新帖子(这是一个非Wordpress网站)。要访问该页面,我将其设置为site.com/user.php?id=1,以便在输入其ID时显示任何用户的页面。

但是,我想要实现的是让页面显示为site.com/user.php?username=namehere,以便有人可以输入用户名而不是用户ID来转到用户页面。任何人都可以访问此页面,而不仅仅是登录用户。

我使用site.com/user.php?id=1方法完美地完成了所有工作。当我尝试使用site.com/user.php?username=namehere方法时,我可以访问user.php的空白页面,但不会显示任何特定于用户的内容。我相信这是因为没有正确调用归因于该用户名的id。

希望这个问题的解释是有道理的。

有没有人对如何达到我想要的目标有任何建议?

在过去的几个小时里,我一直在这个论坛和其他人看过类似的主题,但是我没有运气来修复我的特定问题。我还是刚开始使用PHP,所以我可能认为我错过了一些简单的东西。

我会在下面对我的问题的解释中展示我尝试过的以及我目前正在使用的内容。

以下是 user.php 的顶部部分,以便我能够成功使用site.com/user.php?id=1而无错误:

<?php
include('../includes/db_connect.php');

if(isset($_GET['id'])){
 $id=$_GET['id'];
}else{ 

}
?>

以下是 user.php 的顶部部分,用于说明我正在尝试获取site.com/user.php?username=namehere的用户名时:

<?php
include('../includes/db_connect.php');

if(isset($_GET['id'])){
 $id=$_GET['id'];
  echo "ID YES";
}else{
echo "this is not getting an id";
}


if(isset($_GET['username'])){
    $username = $_GET['username'];
    echo "USERNAME YES";
}else{
  echo "this is not getting a username";
}

?>

我还包括了$_GET['id']以期能够调用它以便内容显示,但是返回该页面没有获得id。

显示错误Undefined index: id on line 47。第47行来自我要求用户发帖的代码块。挑出的那一行是:$queryString = "SELECT post_id, title, description, link FROM post WHERE user_id='$id' ORDER BY post_id DESC LIMIT 1";

以下是来自HTML的 user.php 的其余部分,如果有人想出于任何原因看到该内容,它会显示页面内容:

<?php
                      $queryString = "SELECT post_id, title, description, link FROM post WHERE user_id='$id' ORDER BY post_id DESC LIMIT 1"; 
                      $query = $db->prepare($queryString);
                      $query->execute();
                      $query->store_result();
                      $query->bind_result($post_id, $title, $description, $link);

                            while ($query->fetch()):
                        ?>

                      <h2><?php echo $title?></h2> 
                      <a href="<?php echo $link?>"><?php echo $link?></a>
                      <div class="description"><?php echo $description?></div>
                        <?php endwhile?> 

然后,如果我在PHP的顶部使用site.com/user.php?id=1&username=namehere$_GET['id']尝试$_GET['username'],该页面会显示正确的内容而不会出错。 id和用户名都在那里返回。

2 个答案:

答案 0 :(得分:0)

改变 SQL 看起来像这样:

SELECT * FROM post WHERE username='$username' ORDER BY post_id DESC LIMIT 1

另外,请查看prepared statements,否则您最终会遇到 SQL注入 clusterf * ck ,如果你的首要任务是用户安全(总是应该是),这绝不是一件好事......

答案 1 :(得分:-2)

只需在查询字符串中添加用户名栏 但我怀疑你有两张桌子&#34;用户&#34;和&#34;发布&#34;,所以你必须在它们之间创建内连接逻辑