php - HTML-PHP 登录后和登录前

标签 php html mysql

<分区>

如何在用户登录成功后将垂直菜单中的“登录/注册”标签更改为用户名。

这是我的checklogin.php

<?php
  define("DB_HOST","localhost");
  define("DB_NAME","user_database");
  define("DB_USER","root");
  define("DB_PASSWORD","");

    mysql_connect(DB_HOST,DB_USER,DB_PASSWORD);
    mysql_select_db(DB_NAME) 
        or die("Failed to connect to the database");

    $myusername=$_POST["myusername"];
    $mypassword=$_POST["mypassword"];
    $myencryptedpassword=md5($mypassword);  
    $query="SELECT * FROM users WHERE username='$myusername' AND     password='$myencryptedpassword'";
    $result=mysql_query($query);
    $count=mysql_num_rows($result);

        if($count==1){
        echo "Login Successful.Welcome ".$myusername;
        sleep(2);
        header("refresh:1;url=onlinestore.html");
             }
         else{
         echo "Wrong Username or Password.Please try again. ";
         sleep(2);
         header("refresh:2;url=login.html");}
         ?> 

此代码只会在新页面中显示用户名。我想要的如下图。

Before before login

After after login

最佳答案

您想使用$_SESSION
当您确定已成功登录时,将 $_SESSION 设置为 = 某些内容,例如“loggedintrue”或其他内容。

例如:

if($count==1)
  {
    $_SESSION['loggedin']['username'] = $myusername;
  }

然后在任何你想提供用户特定数据的地方,做类似的事情:

if (!empty($_SESSION['loggedin']['username']))
  {
    echo "Hi ".$_SESSION['loggedin']['username'];
    // OR show some other content, ie allow then to see more menu items.
  }

您需要在要使用 $_SESSION 的任何页面的最顶部放置 session_start();

另外,请注意,只是不向他们显示页面或他们需要先登录才能看到的内容并不能阻止他们访问它。您需要对该页面进行进一步检查,例如:

if (empty($_SESSION['loggedin']['username']))
  {
    echo "You are not allowed to access this page. Please login first";
    // Or redirect them etc
  }

编辑:你想要的代码。

您需要检查他们是否已登录,如果是,请提供他们的用户名和注销链接。
如果未登录,则向他们显示登录/注册链接和文本。
一个非常简单的if else!

在你的 div 或任何包含文本“登录/注册”的地方,放这个:

// They are logged in
if (!empty($_SESSION['loggedin']['username']))
  {
    // Display their username
    echo $_SESSION['loggedin']['username'];  
    // Display the logout link
    echo "<a href='logout.php'> (Logout)</a>";
  }
// Not logged in
else
  {
    // Display the login/register link
    echo "<a href='login-register.php'>Login/Register</a>";
  }

上面的代码可以工作,但是请注意它是非常基础的。
你真的应该有一个单独的类或函数,你可以在每个页面上调用它来检查用户是否登录,如果是或否,则返回某些数据。
例如:

function logged_in()
  {

    if (!empty($_SESSION['loggedin']['username']))
      {
        return $_SESSION['loggedin']['username']."<a href='logout.php'> (Logout)</a>";
      }
    else
      {
         return "<a href='login-register.php'>Login/Register</a>";
      }

  }

然后在您需要的每个页面中包含具有上述功能的文件,然后在您的用户名或登录/注册链接所在的页面中,执行以下操作:

echo logged_in();  

这将显示他们的用户名或登录/注册链接。
这样做意味着如果你改变任何东西,你只需改变函数脚本文件,它会在你包含文件和使用函数的任何地方改变它。
您也可以在您的站点中的任何地方简单地使用 logged_in(),而无需始终检查 session 和设置数据。

这是将业务逻辑与表示分离的基本方法,但除此之外还有很多其他方法,例如将函数文件保存在何处、如何将它们包含在应用程序中等。
但是这里要谈的太多了。阅读一些关于使用 PHP 登录和注册以及在页面中使用包含文件的教程。


旁注:

请确保您验证并清理了用户输入的数据。

$myusername=$_POST["myusername"];
$mypassword=$_POST["mypassword"];

也许你这样做了,但如果没有,因为你的代码是他们可能会对你的数据库和/或网站造成严重破坏。

此外,请考虑使用 mysqli_ 或 PDO,因为 mysql_ 函数从 PHP 5.5.0 版本开始已弃用。

此外,md5() 不再是安全方法。在这里查看原因和备选方案:
http://sg2.php.net/manual/en/faq.passwords.php#faq.passwords.fasthash

关于php - HTML-PHP 登录后和登录前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20610440/

相关文章:

javascript - ajax post 不工作 php mysql

javascript - 如何将点击图像的名称传输到另一个 php 页面?

php - 通过 mysql cli 快速连接 MySQL,但使用 PDO 速度慢

html - 在文本之后画一条线到行尾

mysql - 如何使用sequelize(mysql)与AngularJS + NodeJS一起统计数据?

mysql - 获取表中不存在的 id 列表

php - Ratchet (php) 使用类 MessageComponentInterface 和 WampServerInterface 一起使用 websockets 和推送通知

javascript - 检测是否处于全屏模式(3d 动画书)

javascript - 如何获取div内部html对象的值

php - 短语解析和趋势