gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 05:16:33 25 4
gpt4 key购买 nike

我是 PHP 的新手,无法理解 SESSIONS 并构建了一个我不应该做的电子商务网站,现在我面临着非常小的疑问,比如

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

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

提前谢谢你。

This is my Header.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>

This is my Login Page.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>

Or may be in the first place it's not logging in.

最佳答案

在 Header.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 变量区分大小写,导致它在任何情况下都不会被设置。简单的错误。

Page.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 上运行。正如我在您的帖子中看到的那样,我提到了这一点,这可能是一个潜在的 future 问题,除非它只是帖子中的一个草率拼写错误。

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

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

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

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

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

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

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

如果你打开了错误报告,你会看到这个

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

关于php - 为什么我的按钮(登录和注销)在 session 登录时没有切换并且重定向到上一个也不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44817107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com