Недавно я читал урок о том, как создать собственную CMS для моего сайта. В настоящее время я делаю бэкэнд, чтобы пользователи могли создавать и редактировать страницы. Учебное пособие довольно старое, поэтому различные функции устарели. Мне удалось исправить большинство из них, за исключением «session_register ();» функция. Я видел на многих сайтах, в том числе на этом, который сказал мне использовать «$ _SESSION [‘admin’] = $ username;» например. Это не работает для меня, так как я применяю это ко многим страницам, каждая страница просит меня повторно ввести информацию.
Вот файлы, которые я использую:
admin_check.php:
<?php
$error_msg="";
if ($_POST['username']){
$username=$_POST['username'];
$password=$_POST['password'];
// Simple hard coded values for the correct username and password
$admin="Admin";
$adminpass="Password";
//connect to mysql here if you store admin username and password in your database
//This would be the prefered method of storing the values instead of hard coding them here into the script
if(($username !=$admin)||($password != $adminpass)){
$error_msg='<h3 class="text-danger">Login information incorrect, please try again.</h3>';
} else{
$_SESSION['admin']=$username;
require_once "index.php";
exit();
}
}
?>
<?php
if ($_SESSION['admin']!="Admin"){
echo '<div class="container" style="background-color: #FFF ;"><h3><i class="glyphicon glyphicon-alert text-danger"></i> Solo los administradores
tienen permiso para ver este directorio. No se admite gente con Lag! </h3><br/>
<!DOCTYPE html
<html>
<head>
<title>Login Administrador</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta charset="UTF-8">
<link href="../css/bootstrap.min.css" rel="stylesheet" />
<link href="../css/styles.css" type="text/css" rel="stylesheet">
<link href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap- glyphicons.css" rel="stylesheet">
</head>
<body style="padding-top: 5px; background-color: #EEE ;">
<div style="max-width: 450px; max-height: 550px; background-color: #CCC; padding-top: 30px; box-shadow: 0 0 15px #DDD; border-radius: 10px" class="container">
<div class="jumbotron" style="background-color: #fff; max-height: 470px; padding: 10px; border-radius: 2; box-shadow: 0 0 12px #777;">
<legend class="text-success">LOGIN ADMINISTRATOR</legend>
<hr />
<p style="font-size: 12pt;">Please enter your username and password to login into the admin site.</p>
<form action="admin_check.php" method="post" target="_self" class="form-group">
<label class="label label-default">username</label>
<input type="text" class="form-control" placeholder="username" name="username" id="username">
<br/>
<label class="label label-default">password</label>
<input type="password" class="form-control" placeholder="password" name="password" id="password">
<br/>
<button class="btn-success" value="submit" type="submit" name="button" id="button" >Submit</button>
</form><br/>
'.$error_msg.'
</div>
</div>
</body>
</html>
<br/><br/>
<center> <a href="../" >Click aquí para regresar a un lugar seguro.</a> </div></center>';exit();
}
?>
^ Как вы можете видеть, именно здесь администраторы вводят имя пользователя и пароль, которые я хотел бы как-то сохранить, как в cookie-файле, чтобы они могли свободно перемещаться без необходимости вводить имя пользователя и пароль снова и снова.
index.php:
<?php
session_start();
include_once "admin_check.php";?>
<?php
include "admin_header.php";
?>
<body id="home">
<div class="container" style="background-color: white;">
<h2 style="color: #FF691F"><i class="fa fa-home fa-2x"></i> Home</h2>
</div>
</body>
<?php include "admin_footer.php"; ?>
create_blog.php:
<?php
session_start();
include_once "admin_check.php";?>
<?php
include "admin_header.php";
?>
<script type="text/javascript">
function validate_form(){
valid=true;
if(document.form.pagetitle.value===""){
alert("Please Enter a Page Title!");
valid=false;
}else if{
alert("Please Enter Keywords about this Page!");
valid=false;
}
return valid;
}
</script>
<script type="text/javascript">
function validate_form1(){
valid=true;
if(document.form.pid.value===""){
alert("Please Enter a Page ID!");
valid=false;
}
return valid;
}
</script>
<body id="blog">
<div class="container" style="background-color: white; box-shadow: 0 -5px 9px 3px #b2b2b2;">
<br/>
<h2 style="color: #777 ;"><i class="fa fa-book fa-lg"></i> Upload Blog Entry</h2>
<p class="text-danger text-center">Title, Body, and Keywords are required to create new post! None should be left blank!</p>
<a href="mmoAdmin/"><h6 class="text-muted pull-right"><< Back Home</h6> </a>
<br/>
<form id="form1" name="form1" method="post" action="edit_blog.php" onsubmit="return validate_form1();" class="form-inline">
<div class="form-group">
<button class="btn-default" type="submit" name="button2" id="button2" value="Edit Post">Edit Post</button>
</div>
<input name="pid" type="text" id="pid" size="8" maxlength="11" class="form-control"/>
<span id="helpBlock1" class="help-block">Enter the ID of the post you want to edit. eg: "blog/article.php?pid=<'this is the id'>"</span>
</form>
<br/>
<form id="form2" name="form2" method="post" action="delete_blog.php" onsubmit="return validate_form2();" class="form-inline">
<div class="form-group">
<button class="btn-default" type="submit" id="button3" name="button3" value="Delete Post">Delete Post</button>
</div>
<div class="form-group"><input type="text" class="form-control" id="pid" name="pid"/></div>
<span id="helpBlock2" class="help-block">Enter the ID of the post you want to delete. eg: "blog/article.php?pid=<'this is the id'>"</span>
</form>
<br/>
<form id="form" name="form" method="post" action="congrat_blog.php" onsubmit="return validate_form();">
<div class="form-group">
<label>Title</label>
<input type="text" name="pagetitle" id="pagetitle" class="form-control" placeholder="Title..." value="<?php echo $pagetitle; ?>"/>
<br/>
<br/>
<label>Body</label>
<textarea name="pagebody" id="pagebody" style="height: 480px; width: 100%" ><?php echo $pagebody; ?></textarea>
<br/>
<label>Keywords</label>
<input type="text" name="keywords" id="keywords" class="form-control" placeholder="blog, mmob, etc..." value="<?php echo $keywords; ?>" />
<br/>
<button type="submit" class="btn-success" name="button" id="button" value="Create this page now">Submit</button>
</div>
</form>
</div>
</body><?php include "admin_footer.php"; ?>
^ Так у меня есть несколько страниц, все с функцией php «session_start ();» в начале документа, и я включил_once «admin_check.php» с функцией «$ _SESSION [‘admin’] = $ username» на всех из них.
Примечание: admin_header.php и admin_footer.php — это всего лишь панель навигации и нижний колонтитул HTML-заголовка, поэтому мне не нужно корректировать их для отдельных страниц.
Я довольно новичок в php. Я на правильном пути сделать это?
По сути, все, что я пытаюсь сделать, — это функция входа в систему, чтобы администраторы могли получить доступ к серверной части, которая позволит им загружать информацию в базу данных, чтобы она заполняла сайт.
Вот ссылка на серию учебных пособий, по которым я следовал при создании этой базовой CMS:
Как создать программное обеспечение для веб-сайтов PHP и MySQL CMS
Спасибо за ваше время!
Так что в этом руководстве не упоминалось о необходимости запуска сеанса на каждой странице, но это так.
Следовательно session_start();
но будьте частью всех файлов, использующих сессии.
Сообщение об ошибке помогло бы вам здесь: http://php.net/manual/en/function.error-reporting.php
Еще одна вещь, которую учебник может не охватить — это «пароли».
Используйте одно из следующего:
crypt()
bcrypt()
scrypt()
password_hash()
функция.Другие ссылки:
Важная информация о длине столбца:
Если и когда вы решите использовать password_hash()
или пакет совместимости (если PHP < 5,5) https://github.com/ircmaxell/password_compat/, важно отметить, что если длина вашего текущего столбца пароля меньше 60, его нужно будет изменить на это (или выше). В руководстве предлагается длина 255.
Вам нужно изменить длину столбца и начать заново с нового хеша, чтобы он вступил в силу. В противном случае MySQL потерпит неудачу молча.
Если вы планируете использовать базу данных позже, используйте PDO с готовые заявления или же mysqli_*
с подготовленными заявлениями
Глядя на свой код, вы забыли session_start()
в начале вашего PHP-файла было бы неплохо поместить его в начало вашего PHP-файла, чтобы сессии работали. Это обычно устанавливает (или использует уже переданные) куки, которые затем идентифицируют пользователя так $_SESSION
переменные будут работать.
Проблема: Вы забыли начать сессию до установки сессии в своем коде.
Решение :
Замените свою первую часть кода следующим:
<?php
session_start();
$error_msg="";
if ($_POST['username']){
$username=$_POST['username'];
$password=$_POST['password'];
// Simple hard coded values for the correct username and password
$admin="Admin";
$adminpass="Password";
//connect to mysql here if you store admin username and password in your database
//This would be the prefered method of storing the values instead of hard coding them here into the script
if(($username !=$admin)||($password != $adminpass)){
$error_msg='<h3 class="text-danger">Login information incorrect, please try again.</h3>';
} else{
$_SESSION['admin']=$username;
require_once "index.php";
exit();
}
}
?>
Замечания : Не забудьте запустить session_start()
на своих страницах, прежде чем пытаться получить доступ к $_SESSION
массив или пытается установить один, а также, прежде чем любой вывод отправляется в браузер.
Ссылочный URL: