我正在为我的网站创建一个登录功能,如果用户已登录,我希望它显示与用户未登录时不同的内容。为此,我正在使用我正在检查的会话是否保留用户ID,如果有,则显示登录视图。到目前为止,它正在检查数据库,然后在数据库中存在值时重定向我,但它不会更改视图。
我正在使用的代码:
<?php
session_start();
if(isset($_SESSION['id'])){
?>
<form class="navbar-form navbar-right" role="search">
<a href="account.php" class="btn btn-inverse"><?php echo $_SESSION['name'];?></a>
<a href="userlogout.php" class="btn btn-inverse">Logout</a>
</form>
<?php
}else{
?>
<form action="userlogin.php" class="navbar-form navbar-right" role="search" method="get">
<div class="form-group">
<input type="email" class="form-control" name="Email" placeholder="Email">
</div>
<div class="form-group">
<input type="password" class="form-control" name="password" placeholder="Password">
</div>
<button type="submit" class="btn btn-primary">Sign In</button>
<a href="register.php" class="btn btn-inverse">Register</a>
</form>
<?php
}
?>
编辑: 抱歉,我遗漏了一些信息,表格连接到一个PHP文件,如下所示:
<?php
session_start();
error_reporting(E_ALL); ini_set('display_errors', 1);
$user = "Placeholder";
$pass = "********";
$con = mysqli_connect("localhost", $user,$pass,"articlegame");
$email = $_GET['Email'];
$pass = $_GET['password'];
$result = mysqli_query($con, "SELECT id,isAdmin,name FROM users WHERE email ='$email' AND password='$pass'");
$num = mysqli_num_rows($result);
$row = mysqli_fetch_row($result);
$name = '';
$id = 0;
while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){
$name = $row['name'];
$id = ['id'];
}
if (!$result) {
die(mysqli_error($con));
echo "Bad Connection";
}else if($num == 0){
echo "Wrong user name or password entered!";
echo " <a href='index.php'>Go back<a>";
}else{
$_SESSION['loginid'] = $id;
$_SESSION['username'] = $name;
header("Location: index.php");
}
?>
答案 0 :(得分:4)
您从未设置$_SESSION['id']
,但请在此处查看:
if(isset($_SESSION['id'])){...
您设置了$_SESSION['loginid']
,这是您应该检查的内容,除非您想要将变量标识符更改为“id”。
您也不设置$_SESSION['name']
,而是设置$_SESSION['username']
。
Little Bobby说your script is at risk for SQL Injection Attacks.了解prepared的MySQLi语句。即使escaping the string也不安全!
永远不要存储纯文本密码!请使用PHP的built-in functions来处理密码安全性。如果您使用的PHP版本低于5.5,则可以使用password_hash()
compatibility pack。在散列之前,请确保don't escape passwords或使用任何其他清理机制。这样做更改密码并导致不必要的额外编码。