【问题标题】:Display Username in Index page在索引页面中显示用户名
【发布时间】:2014-11-26 01:30:23
【问题描述】:

我知道在 SO 中有很多关于此的问题。但是,我拥有的代码与那里有点不同。

我有的是登录页面,我必须先登录才能进入索引页面。

首先,我想说的是,我从某人那里得到的这段代码几天前还没有工作。但是当我今天再次检查时,令人难以置信的是它现在正在工作。

所以,今天我这里有两个问题,如下:


  1. 我想在索引页面中显示用户信息。实际上我只想显示用户名。但是,由于我在数据库表中没有用户名行,如果它只能显示用户电子邮件,我会接受它。

  1. 我希望这里有一些专家来审查我的代码。正如我上面提到的,几天前的代码不起作用。而今天它可以在没有任何我改变的情况下工作。

这里的重要问题是第一个问题,即显示用户信息。

这是我的代码:

1.索引.php

<?php
include('UserSessionAdmin.php');
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>DASHBOARD</title>
<link rel="stylesheet" type="text/css" href="css.css"/>


</head>

<body>
<?php echo "$myemail";?>

2。 UserSessionAdmin.php

<?php
session_start();

if ( $_SESSION['login_id'] == 0 || $_SESSION['login_id'] == '' ) {
    header('location: login.html');
    exit();
}

require_once('configPDO.php');
?>

3. login.html

                <div id="login-form">
                <form method="post" action="CheckLogin.php">
                    <span class="identity">E-mail</span>
                        <input type="text" id="myemail" name="myemail" class="text" />
                    <span class="identity">Password</span>
                        <input type="text" id="mypassword" name="mypassword" class="text" />
                    <p id="button">
                        <input type="submit"/></p> 
                </form>
            </div>

4. CheckLogin.php

<?php
// Start Session because we will save some values to session varaible.
session_start();

   include("configPDO.php");

   $myemail=$_POST['myemail']; 
   $mypassword=$_POST['mypassword']; 

   $STM = $dbh->prepare("SELECT * FROM user WHERE myemail = :myemail AND mypassword = :mypassword");

   $STM->bindParam(':myemail', $myemail);
   $STM->bindParam(':mypassword', $mypassword);

   $STM->execute();

   $count = $STM->rowCount();

   $row  = $STM -> fetch();

   if($count==1)

   {
     $_SESSION['login_id']=$row['id'];

    if($_SESSION['login_id'] == 1) { 
        header( "location:index.php");  
    }
    else { 
        header( "location:login3.html");  
    }

}

else 
{
header("location:login4.html");
}

$dbh = null;
?>


感谢您的所有帮助。干杯和问候,

【问题讨论】:

  • 您的 index.php 使用了一个甚至没有定义的变量。您必须在会话中设置用户信息才能在 index.php 中显示它们。你在最基本的问题上挣扎。
  • @eeK 这就是我想知道的。 :)
  • 可以像设置用户id一样设置email($_SESSION['email']=$row['email'];),其中$row['email']代表对于要使用的表的列名。然后在您的 index.php 中,您可以只输出您的 $_SESSION['email']。
  • 我可以在body标签中输出吗?例如。 &lt;span&gt; Your email is $_SESSION['email']&lt;/span&gt;
  • @eeK 但在 SO 中有很多人愿意为我编写代码。拜托,如果您不想帮忙,那么无论如何我都不需要您的帮助,请远离我的问题。 :)

标签: php mysql session


【解决方案1】:

CheckLogin.php

if ( $count == 1 )  {
    $_SESSION['login_id'] = $row['id'];
    $_SESSION['username'] = $row['username']; // added

    if ( $_SESSION['login_id'] != '' || $_SESSION['login_id'] > 0 ) { // edited
        header("location: index.php");  
    } else { 
        header("location: login3.html");  
    }
}

Index.php

<?php
    require_once 'UserSessionAdmin.php'; // edited
    $username = $_SESSION['username']; // added
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>DASHBOARD</title>
    <link rel="stylesheet" type="text/css" href="css.css"/>
</head>

<body>
<?php echo $username; ?> // edited

【讨论】:

  • 我只记得昨天代码不工作时是在我删除表中的行用户名之前。现在我想再次添加用户名的行,但我担心代码再次不起作用?
  • 没关系,用户名列没有问题,因为您按列名而不是索引来调用它。
  • 谢谢,我会尽快试一试。但是你能看看 Mohit 的答案和我的评论吗...
  • 答案很简单,只需将 $_SESSION['login_id'] == 1** 改为 **$_SESSION['login_id'] != '' || $_SESSION['login_id'] != 0
  • 那么,我只需要在UserSessionAdmin.php中改一下,CheckLogin.php中的那一行呢?
【解决方案2】:

您必须进行的第一个更改是在 Checklogin.php 文件中:

1) CheckLogin.php:

if($_SESSION['login_id'] == 1) { 
    $_SESSION['myemail'] = $myemail;
    header( "location:index.php");  
}
else { 
    header( "location:login3.html");  
}

您必须进行的第二个更改是在 index.php 文件中:

2) 索引.php

<?php echo $_SESSION['myemail'];?>

但实际上在 CheckLogin.php 文件中检查 login_id 存在问题。是您数据库中的所有用户的 login_id 都等于 1。出于什么目的,您在数据库表中添加了 login_id 字段。根据此代码,只有 login_id 等于 1 且用户名和密码正确的用户才能登录。否则即使他输入正确的用户名和密码也将无法登录,这在你的情况下会发生,我认为是这样。

【讨论】:

  • 我必须改变什么,以便不仅拥有 ID 1 的用户可以登录?
  • 您只需删除此代码“if($_SESSION['login_id'] == 1)”,因为您已经在检查上面的用户名和密码。但是,如果您将其用于任何目的,请检查您使用此检查的目的或条件。
【解决方案3】:

创建一个可用于传递电子邮件并返回用户名的方法,如下所示:

function usernameFromEmail($email) {
    $username = $db->prepare('SELECT username FROM table WHERE email = ?');
    $username->execute(array($email));

    return $username->fetch();
}

然后您可以调用此方法并通过电子邮件,您将获得用户名。

table 替换为表名,email 替换为该列的真实名称,username 替换为该列的真实名称。

【讨论】:

    猜你喜欢
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多