【问题标题】:Different page for different users using PHP使用 PHP 的不同用户的不同页面
【发布时间】:2015-03-29 09:21:48
【问题描述】:

我想知道如何让用户“McKenzie”看到他自己可以操作的独特页面,并让“Wendy”在登录时看到她自己的页面。

我已经创建了登录名和页面,将它们连接到 MySQL 数据库给它们 ID 等,所以我可以做所有这些,我知道会话等;)

那么有人可以告诉我该怎么做吗,我是否必须为每个单独的用户制作不同的页面?我在想一些类似的事情

注册页面:

将数据存储在数据库中,获取用户 ID 并使用 "?pageid=1" 将用户带到基于 id 的页面。

但我不确定如何在不手动创建每个页面的情况下创建每个页面,因为您可以想象为每个单独的用户创建一个新页面会很痛苦......而且效率非常低。有任何想法吗?

请给我看一个代码示例,不胜感激!提前谢谢大家!

【问题讨论】:

  • 您可能想要查找有关会话 ID 的信息。你问了很多,可能需要几个脚本来做你需要的。我建议在 SO 中提出此类问题之前阅读一些教程。这是一个示例:w3schools.com/php/php_sessions.asp
  • 我知道会话我知道如何使用开始结束它们等,我只是不知道如何使用它们来创建新页面,会话不能创建新页面?它只存储一个新变量,但感谢链接
  • 您不会使用它们来创建新页面。您可以使用 php 执行此操作,然后使用会话 ID 来识别登录用户。您将需要一个创建用户的脚本,使用密码(我希望您会加密),然后是一个启用登录的页面,然后是一个允许登录用户添加内容的页面,以及一个显示所有他们添加的项目等
  • 请展示你的尝试
  • 我已经提出了所有这些问题,我已经完成了所有这些。我要问的只是一件事,我如何让不同的用户看到不同的页面,而无需实际创建页面,我制作了登录脚本和注册脚本以及 mysql 加密数据库。

标签: php mysql


【解决方案1】:

我的回答是假设您想要创建完全可自定义的用户数据,并增加在用户之间共享页面的可能性(如个人资料页面)。这样一来,您可以通过创建一个 php 页面来执行此操作,该页面通过 $_GET $_POST 数据搜索 MySQL 表。

我会将此答案扩展为几个步骤...

SQL 表

您需要的第一件事是您的 MySQL 设置,假设您已经完成了基本设置,但我将继续创建一个简单的设置。

基本设置是登录数据和自定义用户数据,你可以查看我的设置here

php 用户页面

最简单的方法是从$_GET 数据中获取请求的用户。所以要做到这一点,我们只需获取数据并请求用户信息:

$requested_user = $_GET['id'];

$db = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8', 'root', 'MyPassword');

try {

    $stmt = $db->prepare("SELECT * FROM c_userpage WHERE id = ?");

    $stmt->execute(array($requested_user));

    $mydata = $stmt->fetch();

} catch (Exception $e) {

    //error with mysql
    die();

}

现在我们可以简单地将用户数据添加到页面!

echo "Hello! my name is {$mydata['username']}!\n";
echo "About Me: {$mydata['custom_data']}";

将用户引导至他们的页面

我们可以简单地使用www.page.com/user.php?id=2,这将为id=2的用户请求数据

附加内容

如果您想保持用户页面的私密性,您只需使用$_POST$_SESSION 请求ID,然后检查用户是否已登录!

Full code for user.php

Full code for user.php w/ private page

【讨论】:

  • 谢谢,这太棒了!正是我想要的!
  • 太棒了!如果您需要添加任何信息,请询问!
  • 很好地解释了。但是存在一些安全漏洞,特别是在将 user_id 存储为 $_GET 变量时。根据本网站的目的,它可以相对(阅读:非常)容易地访问其他用户的个人页面。
  • 没错,但正如我上面所说,这是围绕共享用户“个人”或可自定义页面而构建的。最后我添加了一个只有用户才能看到的私有页面的代码。
  • 明白。然而,使用www.page.com/user.php?id=2 可以让已经登录的用户非常容易,只需将 id 更改为其他内容即可开始浏览其他人的页面。有一个简单的解决方案;只需将 id 作为会话 id 存储在登录页面中,然后使用 $_SESSION['id'] 来获取它。 (我自己也很难学会)
【解决方案2】:

以下是您可以执行的操作的示例:

<?php

  if (!isset($_SESSION['user_id'])) && (!isset($_SESSION['user_name'])) {
    echo '<p class="login"><a href="login.php">log in</a></p>';
    //exit();
  }
  else {
$user_name = $_SESSION['user_name'];

    echo('<p class="login"><a href="mypage.php">' . $user_name .'\'s page</a> | <a href="logout.php">Log out</a></p>');
  }

?>

您可以添加更多内容,但这只是为了生成有关他们是否已登录的信息。如果设置了$_SESSION['user_id'],则可以根据该信息生成代码。 (注意,您需要创建 $user_name 或任何变量,可能来自 sql 查询)

【讨论】:

  • 由于页面 mypage.php 'user_name' 不存在,它是否会返回通知/错误?
  • 当然好。我将对其进行编辑以使其更加清晰。现在看看
  • 注意,这里假设user_name 也被存储为会话变量。如果没有,您可以从user_id 的数据库中查询,然后将其输入。
  • 好的,这为我解决了一件事情,但现在我如何创建这个页面而不必手动创建?是否没有:如果 mypage.php/mckenzie 不存在,则创建它并包含 homepage.tmpl.php 你明白我在说什么吗?
  • 是的。上述代码需要输入到您创建的新 mypage.php 中。我不知道你的 homepage.tmpl.php 有什么;并且由于登录用户的某些内容可能会有所不同,因此您需要创建它。只要您的表上有用户 ID,并且它链接到您的其余表(如果您还没有这样做,则必须修改它们以包含用户表的外键),您可以生成每个用户的自定义内容。但是,不,您不需要为每个用户创建单独的页面 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-10
  • 1970-01-01
  • 2018-08-01
相关资源
最近更新 更多