"注意:未定义的索引......" Web服务器上的错误,但在localhost上完美运行

时间:2018-04-17 19:04:16

标签: php session undefined-index

我只有两个文件,但在Web服务器上运行时会遇到Notice: Undefined index...错误,但它在localhost上运行良好

的login.php:

    <?php 
    session_start(); 
    header("Location: index.php");
    exit;

    <form action="#" method="post">
    <input type="password" name="password" placeholder="Enter your password" >
    <input type="submit" name="submit" value="SUBMIT">
    </form>

    <?php
    $pw = (isset($_POST['password']) ? $_POST['password'] : null);
    $sb = (isset($_POST['submit']) ? $_POST['submit'] : null);

    if($pw == "8000"){
    $_SESSION['logged_in'] = 'green';
    }

    if($pw != "8000" && $sb != null){
    echo '<div class="warning">Password Incorrect !!</div>';
    exit;
    }

的index.php:

    <?php
    session_start(); 
    if(!isset($_SESSION['logged_in']) && $_SESSION['logged_in']!= 'green')
    {  
    header('Location: login.php');
    exit;
    }
    include 'db.php';

在PHP部分之后,HTML代码在没有任何空格的情况下运行。

当我在开始会话之前尝试访问index.php文件时,网页显示以下错误:

  

注意:未定义的索引:logged_in in   第3行/bla/bla/bla/bla/public_html/index.php

虽然localhost上没有此错误。

2 个答案:

答案 0 :(得分:1)

您的if条件不正确,您需要像

那样执行此操作

首先你应该检查是否存在数组键,然后你应该将它与某些东西进行比较。

if(!isset($_SESSION['logged_in']) || $_SESSION['logged_in']!= 'green')
{  
header('Location: login.php');
exit;
}

更新: 删除此

header("Location: index.php");
exit;

并将其添加到您的登录页面

if(isset($_SESSION['logged_in']) && $_SESSION['logged_in']== 'green')
{  
    header('Location: index.php');
    exit;
}

这应该对你有帮助。

答案 1 :(得分:0)

我通常不回答这样的问题,因为你可以解决它的一点点试验和错误:)但希望这会向你展示一个很好的初学者路径,以便将来编写代码(然后你继续学习课程和更好的事情。)

使用此代码,您可以将所有内容分成新的文件或函数。这使您的代码整洁,易于阅读,易于维护,并且更容易在代码库的其他位置重用相同的内容。

例如,您可能需要在login.php以外的某个位置设置会话。由于在isLoggedIn()login.php中使用了index.php函数,因此下面已使用此方法。

E.g。如果您的登录值需要更改(例如“绿色”更改为“红色”),则更改getSessionSecurityValue()中的值,isLoggedIn()setLoginSession()功能会自动更改。

注意:我还没有测试过这段代码,但只要你把文件放在文件中就可以了。

  

<强>的login.php:

require_once 'initialise.php';
require_once 'isLoggedIn.php';
require_once 'isPasswordValid.php';
require_once 'setLoginSession.php';

// If logged in no need to do the form thing
if (isLoggedIn() === true) {
    // Redirect to index
    // Or echo message "already logged in" and exit so not to show the login form
}

// Initialise vars
$errorMessage = null;
$postPassword = null;

// If form submitted
if (isset($_POST['submit'])) {

    $postPassword = $_POST['password'];
    $passwordValid = isPasswordValid($postPassword);

    // Password is valid, set their session and send them to index page
    if ($passwordValid === true) {
        setLoginSession();
        header('Location: index.php');
        exit;
    }

    // Password not valid (would have redirected above otherwise)
    $errorMessage = '<div class="warning">Password Incorrect !!</div>';
}

// If we have an error message show it
if ($errorMessage !== null) {
    echo $errorMessage;
}

?>
    <form action="#" method="post">
        <input type="password" name="password" placeholder="Enter your password">
        <input type="submit" name="submit" value="SUBMIT">
    </form>

  

<强>的index.php:

require_once 'initialise.php';
require_once 'isLoggedIn.php';

// If not logged in send to login page
if (isLoggedIn() === false) {
    header('Location: login.php');
    exit;
}

// They're logged in, good to go...
include 'db.php';

  

isPasswordValid.php:

/**
 * Check the entered password.
 *
 * @param string $password
 *
 * @return bool
 */
function isPasswordValid($password)
{
    return $password == '8000' ? true : false;
}

  

<强> isLoggedIn.php:

require_once 'getSessionSecurityValue.php';

/**
 * Check if the user is logged in.
 *
 * @return bool
 */
function isLoggedIn()
{
    return (isset($_SESSION['logged_in']) && $_SESSION['logged_in'] == getSessionSecurityValue())
        ? true
        : false;
}

  

<强> initialise.php:

/** Add startup and other shared things in here that are relevant to some initialisation */

// Start session if not already started
if (session_status() == PHP_SESSION_NONE) {
    session_start();
}

  

<强> setLoginSession.php:

require_once 'getSessionSecurityValue.php';

/**
 * Sets the session to show user is logged in.
 *
 * @return void
 */
function setLoginSession()
{
    $_SESSION['logged_in'] = getSessionSecurityValue();
}

  

<强> getSessionSecurityValue.php:

/**
 * Gets the "security" value used in the login session.
 *
 * @return string
 */
function getSessionSecurityValue()
{
    return 'green';
}