我只有两个文件,但在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上没有此错误。
答案 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';
}