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

"Notice: Undefined index..." error on web server but works perfectly on localhost

提问人:Susmit Mohan 提问时间:4/18/2018 最后编辑:JamesSusmit Mohan 更新时间:4/18/2018 访问量:1126

问:

我只有两个文件,但是在Web服务器上运行时会话出现错误,但它在localhost上可以完美运行Notice: Undefined index...

登录 .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;
    }

索引.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 英寸 /bla/bla/bla/bla/public_html/index.php第 3 行

虽然本地主机上不存在此错误。

PHP 会话 undefined-index

评论

0赞 Susmit Mohan 4/18/2018
是的。。。。但我需要这个确切的功能。不比这个多一点,也不比这个少一点
2赞 deceze 4/18/2018
您的代码明确显示“如果未设置 $_SESSION['logged_in'],然后您正在访问 .当然,它会抛出这个错误。你有条件倒退。本地服务器和生产服务器之间的区别仅在于配置的错误报告级别。$_SESSION['logged_in']
1赞 Patrick Q 4/18/2018
在我看来,这段代码会导致无限循环(如果不是因为错误)。在执行任何操作之前,您将所有内容从 login.php 重定向到 index.php。不要试图在这里发布你的代码,请准确发布你的代码。
1赞 James 4/18/2018
也许我编辑错了,但这似乎是一个无限循环
1赞 Dave 4/18/2018
正如@deceze所说,你的逻辑在阅读的那一行是错误的。有了&&,你就会得到这个错误,因为你告诉PHP总是检查logged_in是否是绿色的,即使它没有设置。if(!isset($_SESSION['logged_in']) && $_SESSION['logged_in']!= 'green')

答:

1赞 DEarTh 4/18/2018 #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;
}

这应该对你有所帮助。

评论

0赞 Susmit Mohan 4/18/2018
谢谢DEarTh的帮助。未定义的索引问题现已解决。但是,当我从登录页面中删除标题时,登录页面不会重定向到索引页面。同样,如果我将标题保留在登录页面中,则会发生无限循环
0赞 Susmit Mohan 4/18/2018
请再次帮助我解决这个无限循环或无重定向问题
0赞 James 4/18/2018 #2

我通常不会回答这样的问题,因为只要稍加试验和错误,您就可以解决它:)但希望这将为你展示一条很好的初学者道路,为未来的编码做准备(然后你继续上课和更好的东西)。

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

例如,您可能需要在 以外的其他位置设置会话。下面已经使用了这种方法,因为该函数在 和 中使用。login.phpisLoggedIn()login.phpindex.php

例如,如果您的登录值需要更改(例如“绿色”到“红色”),那么您可以更改 和 中的值,并且功能会自动更改。getSessionSecurityValue()isLoggedIn()setLoginSession()

注意:我还没有测试过这段代码,但只要你把这些东西放在下面的文件中,就可以工作。

 

登录 .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>

 

索引.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;
}

 

初始化.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();
}

 

设置登录会话.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';
}

评论

0赞 James 4/27/2018
没关系。乐于提供帮助