为什么我的按钮(登录和注销)在会话登录时没有切换并且重定向到上一个也不起作用?



我是PHP的新手,了解SESSIONS并建立一个我不应该的电子商务网站,现在面临着非常小的问题,例如

  1. 我正在尝试根据用户的登录状态切换标题中的登录和注销按钮.php。
  2. 另外,我正在尝试在成功登录后将用户重定向到上一页。但是我正在实现的是服务器错误,该错误在不同的页面中显示。

如果您能查看我的代码并帮助我解决这两个问题,我将不胜感激。

提前谢谢你。

这是我的标题.php

<?php
Session_start();
$_SESSION['redirectURL']=$_SERVER['REQUEST_URI'];
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>ECOM Site</title>
<link href="bootstrap/css/bootstrap.min.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Lato" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet">
<link href="styling.css" rel="stylesheet" type="text/css">
<link href="Sliders.css" rel="stylesheet">
</head>
<body>
<div class="header">
<div class="container">
<div class="header-top">
<div class="row">
<div class="col-sm-4">
<form class="navbar-form navbar-left  collapse navbar-collapse" id="12345">
<div class="input-group">
<input type="text" class="form-control search" placeholder="Search">
<span class="input-group-btn">
<!--    <button class="btn btn-default submit" type="button" ><i class="glyphicon glyphicon-search" style = "color : #e98fa0;"></i></button>-->
<a class="btn btn-default submit" role="button" ><i class="glyphicon glyphicon-search" style = "color : #e98fa0;"></i></a>
</span>
</div>
</form>
</div>
<div class="col-sm-4 logo text-center ">
<a href="index.php">LOGO</a>
</div>
<div class="col-sm-4 text-center">
<form action="" method="post">
<div class="login-bars collapse navbar-collapse">
<button type="submit" class="btn btn-default log-button" >Sign Up</button>
<?php 
if(  isset($_SESSION['logged_in'])){
echo '<button type="submit" class="btn btn-default log-button" name="logout" >Logout</button>';
}
else{
echo '<button type="submit" class="btn btn-default log-button" ><a href="Login Page.php">Login</a></button>';
function logout (){
session_destroy();
}
if(isset($_POST['logout'])) { 
logout(); 
}
}
?>
<button type="submit" class="btn btn-default log-button" >Cart</button>
</div>
</form>
</div>
</div>
<div class="clearfix"></div>
</div>
<div class="header-botom">
<div class="content white">
<nav class="navbar navbar-default nav-menu" role="navigation">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse " >
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="index.php">LOGO</a>
</div>
<div class="clearfix"></div>
<!--/.navbar-header-->
<div class="collapse navbar-collapse collapse-pdng " id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav nav-font">
<li><a href="#">Home</a></li>
<li><a href="#">Ear Rings</a></li>
<li><a href="#">Jewelry </a></li>
<li><a href="#">Accessories</a></li>
</ul>
<div class="clearfix"></div>
</div>
<!--/.navbar-collapse-->
<div class="clearfix"></div>
</nav>
<div class="clearfix"></div>
</div> 
</div>
</div>
</div>

这是我的登录页面.php

<?php
Include ('header.php');
include ('includes/connect.php');
if( ! isset($_SESSION['logged_in'])) {
if(isset($_POST['email'] , $_POST['password']))
{
$username = $_POST['email'];
$password = md5($_POST['password']);
if(empty($username) or empty($password))
{
$error = "Please fill all the fields";
}
else
{
$query = $pdo->prepare("SELECT * FROM user_login WHERE name = ? AND password = ? ");
$query->bindValue ( 1, $username);
$query->bindValue ( 2, $password);
$query->execute();
$num=$query->rowCount();
if($num==1) {
$_SESSION['logged_in']= true;
header('location :' .$_SESSION['redirectURL']);
//header('location: index.php');
exit();
}
else{
$error = "Please enter correct Username and Password";
}
}
}
}
else{
$error = "you have already logged in";
}
?>
<div class="login">
<div class="container">
<div class="login-grids">
<div class="col-md-6 log">
<h3>Login</h3>
<div class="strip"></div>
<p>Welcome, please enter the following to continue.</p>
<form action="" method="post">
<?php if(isset($error)){ ?>
<small style = "color : #aa0000"; ><?php echo $error ?></small>
<br><br>
<?php } ?>
<div class="form-group">
<label for="email"  class="head">Email</label>
<input class="form-control login-box" name="email"  type="text" id="email"/>
</div>
<div class="form-group">
<label for="password"  class="head">Password</label>
<input class="form-control login-box" name="password"  type="password" id="password"/>
</div>          
<button type="submit" class="btn login-btn">Submit</button>
</form>
<a href="#">Forgot Password ?</a>
</div>
<div class="col-md-6 login-right">
<h3>New Registration</h3>
<div class="strip"></div>
<p>By creating an account with our store, you will be able to move through the checkout process faster, store multiple shipping addresses, view and track your orders in your account and more.</p>
<a href="register.html" class="button">Create An Account</a>
</div>
<div class="clearfix"></div>
</div>
</div>
</div>

或者可能首先它没有登录。

在标题中.php你有这个

<div class="col-sm-4 text-center">
<form action="" method="post">
<div class="login-bars collapse navbar-collapse">
<button type="submit" class="btn btn-default log-button" >Sign Up</button>
<?php 
if(  isset($_Session['logged_in'])){
echo '<button type="submit" class="btn btn-default log-button" name="logout" >Logout</button>';
}
else{
echo '<button type="submit" class="btn btn-default log-button" ><a href="Login Page.php">Login</a></button>';
function logout (){
session_destroy();
}
if(isset($_POST['logout'])) { 
logout(); 
}
}
?>
<button type="submit" class="btn btn-default log-button" >Cart</button>
</div>
</form>
</div>
</div>

具体说来

$_Session

应该是

$_SESSION

PHP 变量区分大小写,导致在任何情况下都无法设置。 简单的错误。

在佩奇中也是如此.php

Include ('header.php');  //cassing ( probably ok here, looks bad though )
include ('includes/connect.php');
if( ! isset($_Session['logged_in'])) //same issue
....

另请注意,文件名仅在 Linux 上区分大小写!include ('header.php');不会在Linux上包括Header.php,但可以在Windows上运行。 我提到这一点,因为我在你的帖子中看到这可能是一个潜在的未来问题,除非它只是帖子中的一个草率的错别字。

这些对我来说很容易发现,因为我在文学上已经做了数百万次同样的事情...... 所以不用担心。

最后一件事是包含,我不喜欢像include 'header.php';那样使用(),因为 include 是一种语言结构而不是函数,但它会以这种方式工作。 我只是有时候很挑剔...

更新:对于标头重定向,您在重定向之前包含header.php文件,并且该文件包含无法正常工作的输出。 在调用header(..)函数之前,您不能输出任何内容。 这会给你一个PHP警告,并且不会做重定向。

Warning: Cannot modify header information - headers already sent by (output started at  ... )

要解决此问题,您可以简单地将header.php包含移动到标头代码之后,但您必须在两个文件的顶部启动会话,您可以通过检查session_id来检查会话是否已启动

if( empty(session_id()) ) session_start();

如果这成为一个问题(事实上,我已经大约 5 年没有设置自己的会话处理程序了!

如果您打开了错误报告,您将看到以下内容

<?php
ini_set('display_errors', 1);
error_reporting(-1);

首先

Session_start();

将是

session_start();

并且所有$_Session都需要转换为$_SESSION['logged_in];

最新更新