提问人:Susmit Mohan 提问时间:4/18/2018 最后编辑:JamesSusmit Mohan 更新时间:4/18/2018 访问量:1126
“注意:未定义的索引...”Web 服务器上出错,但在 localhost 上完美运行
"Notice: Undefined index..." error on web server but works perfectly on localhost
问:
我只有两个文件,但是在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 行
虽然本地主机上不存在此错误。
答:
你的条件不正确,你需要这样做,比如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;
}
这应该对你有所帮助。
评论
我通常不会回答这样的问题,因为只要稍加试验和错误,您就可以解决它:)但希望这将为你展示一条很好的初学者道路,为未来的编码做准备(然后你继续上课和更好的东西)。
使用此代码,您可以将所有内容分离到新文件或函数中。这使您的代码整洁、易于阅读、易于维护,并且更易于在代码库的其他地方重用相同的内容。
例如,您可能需要在 以外的其他位置设置会话。下面已经使用了这种方法,因为该函数在 和 中使用。login.php
isLoggedIn()
login.php
index.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';
}
评论
未设置 $_SESSION['logged_in']
,然后您正在访问 .当然,它会抛出这个错误。你有条件倒退。本地服务器和生产服务器之间的区别仅在于配置的错误报告级别。$_SESSION['logged_in']
if(!isset($_SESSION['logged_in']) && $_SESSION['logged_in']!= 'green')