我知道在SO中有这么多问题。但是,我的代码与那里有点不同。
我所拥有的是登录页面,我必须先登录才能进入索引页面。
首先,我想说我从某人那里得到的代码几天前没有工作。但是当我今天再次检查它时,令人难以置信的是它现在正在工作。
所以,今天我在这里有两个问题,如下:
这里的重要问题是第一个问题,即显示用户信息。
这是我的代码:
1。 Index.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;
?>
感谢您的帮助。干杯和问候,
答案 0 :(得分: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)Index.php
<?php echo $_SESSION['myemail'];?>
但实际上在CheckLogin.php文件中存在检查login_id的问题。数据库中的所有用户是否都具有login_id等于1.出于何种目的,您在数据库表中添加了login_id字段。根据此代码,只有那些拥有login_id的用户等于1且用户名&amp;密码可以登录。否则,即使他输入了正确的用户名,密码将无法登录,因此在我认为之前就会发生这种情况。
答案 1 :(得分:2)
<强> 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
答案 2 :(得分:0)
创建一个方法,您可以使用该方法传递电子邮件,并返回如下所示的用户名:
function usernameFromEmail($email) {
$username = $db->prepare('SELECT username FROM table WHERE email = ?');
$username->execute(array($email));
return $username->fetch();
}
然后,您可以调用此方法并通过电子邮件,并且您将拥有用户名。
将表替换为表的名称,使用列的真实名称发送电子邮件,使用列的真实名称替换用户名。