Реализуем панель настроек нашего движка. Часть 2

 

Доброго времени суток! Спасибо что заглянули на мой блог Улыбаюсь. Я хотел бы извиниться за то, что немного ошибся в количестве подразделов для панели настроек нашего движка. В предыдущем посте я написал, что поделил панель на три подраздела. Это не так. Подразделов будет четыре. Один я как не посчитал, наверное причина тому неумение считать до 4-х Смеюсь. С другой стороны, одним подразделом больше, одним подразделом меньше Улыбаюсь совершенно никакой разницы Ангел

Сегодня я планирую реализовать еще один подраздел, имя которому - Настройки администратора. Этот блок настроек имеет два поля:

  • Смена логина администратора
  • Смена пароля администратора

 

 

Способ реализации этих двух пунктов на 99% схож с способом реализации предыдущего подраздела (и на 95% схож с способом реализации движка в целом Смеюсь). Нам предстоит дополнить шаблон еще двумя строчками в таблице. А так же немного переписать код обработчика и код функции configblog(). В общем то дело плевое, поэтому данная процедура займет всего несколько минут Улыбаюсь

 

Для тех кто на блоге в первый раз

 

Если Вы на блоге в первый раз, то скорее всего данная заметка покажется Вам совершенно бессмысленной, так как данный пост является частью глобального цикла статей "Создать блог с нуля". Цикл повествует о создание простейшего персонального блога на великом и могучем php.

Если Вам интересна данная тематика, то милости просим вот сюда. По данному адресу лежат все, уже опубликованные, материалы.

Если Вы собираетесь задержаться на моем блоге, то обязательно подпишитесь на RSS ленту блога через ридер, или же по почте.

 

Шаблон нашей панели настроек

 

Открываем configblog.html и переделываем его код вот так (я даю Вам полный код шаблона)

<form action="index.php?page=configblog" method="post" name="form">
<table width="700px" cellpadding="5" cellspacing="0" border="0" align="center">
<tr>
<td style="border-bottom:1px solid #dcdcdc;font-weight:bold;" valign="top" align="left">Общие настройки</td>
<td style="border-bottom:1px solid #dcdcdc;"></td>
</tr>
<tr>
<td style="border-bottom:1px solid #dcdcdc;" valign="top" align="left">Заголовок блога</td>
<td style="border-bottom:1px solid #dcdcdc;" valign="top" align="right">
<input style="width:200px;font-weight:100;font-size:11px;" name="cfgtitleBLOG" type="text" value="[_title]">
</td>
</tr>
<tr>
<td style="border-bottom:1px solid #dcdcdc;" valign="top" align="left">Описание блога</td>
<td style="border-bottom:1px solid #dcdcdc;" valign="top" align="right">
<input style="width:200px;font-weight:100;font-size:11px;" name="cfgmetaDBLOG" type="text" value="[_metaD]">
</td>
</tr>
<tr>
<td style="border-bottom:1px solid #dcdcdc;" valign="top" align="left">Ключевые слова блога</td>
<td style="border-bottom:1px solid #dcdcdc;" valign="top" align="right">
<input style="width:200px;font-weight:100;font-size:11px;" name="cfgmetaKBLOG" type="text" value="[_metaK]">
</td>
</tr>
<tr>
<td style="border-bottom:1px solid #dcdcdc;font-weight:bold;" valign="top" align="left">Настройки администратора</td>
<td style="border-bottom:1px solid #dcdcdc;"></td>
</tr>
<tr>
<td style="border-bottom:1px solid #dcdcdc;" valign="top" align="left">Логин</td>
<td style="border-bottom:1px solid #dcdcdc;" valign="top" align="right">
<input style="width:200px;font-weight:100;font-size:11px;" name="cfgloginBLOG" type="text" value="[_login]">
</td>
</tr>
<tr>
<td style="border-bottom:1px solid #dcdcdc;" valign="top" align="left">Пароль (новый)</td>
<td style="border-bottom:1px solid #dcdcdc;" valign="top" align="right">
<input style="width:200px;font-weight:100;font-size:11px;" name="cfgpassDBLOG" type="password" value="">
</td>
</tr>
<tr>
<td valign="top" colspan="2" align="center">
<br/><br/><input type="submit" value="Сохранить настройки">
</td>
</tr>
</table>
</form>
<br/><br/>

Изменения тут минимальные. Добавлены два новых поля. Обратите внимание на атрибуты name у новых полей. Очень Важно понимать за что отвечают переменные которые мы создадим чуть ниже. Кроме этих атрибутов, в общем то, добавить больше нечего Улыбаюсь

 

Модуль панели настроек

 

После шаблона можно приступать к редактированию модуля. Давайте я выложу полный код файла, а после пробегусь по тем местам где добавил что-то новое.

<?
//ОБРАБОТЧИК
//определяем переменные
if(isset($_POST['cfgtitleBLOG']))$cfgtitleBLOG = $_POST['cfgtitleBLOG'];
if(isset($_POST['cfgmetaDBLOG']))$cfgmetaDBLOG = $_POST['cfgmetaDBLOG'];
if(isset($_POST['cfgmetaKBLOG']))$cfgmetaKBLOG = $_POST['cfgmetaKBLOG'];
if(isset($_POST['cfgloginBLOG']))$cfgloginBLOG = $_POST['cfgloginBLOG'];
if(isset($_POST['cfgpassDBLOG']))$cfgpassDBLOG = $_POST['cfgpassDBLOG'];

//обращение к БД
if(isset($cfgloginBLOG) AND $cfgloginBLOG != "" AND isset($cfgpassDBLOG) AND isset($cfgtitleBLOG) AND isset($cfgmetaDBLOG) AND isset($cfgmetaKBLOG))//если переменная форма была заполнена и отправленна
{
//КОД ОБНОВЛЕНИЕ НАСТРОЕК
$newCONFIGpage = mysql_query ("UPDATE page SET title='$cfgtitleBLOG',meta_d='$cfgmetaDBLOG',meta_k='$cfgmetaKBLOG' WHERE id='1'");//обнавляем настройки
//КОД ОБНОВЛЕНИЕ НАСТРОЕК

//КОД ОБНОВЛЕНИЕ ЛОГИНА И ПАРОЛЯ
if($cfgpassDBLOG != "")//Если поле пароль не пустое
{
$newpass = md5($cfgpassDBLOG);//шифруем новый пароль
$sql = "UPDATE user SET login='$cfgloginBLOG',pass='$newpass' WHERE id='1'";//создаем запрос на обновления логина и пароля
}
else $sql = "UPDATE user SET login='$cfgloginBLOG' WHERE id='1'";//если пароль пустой, то обновляем только логин.
//данный запрос на обновление может показаться лишним (в общем то так оно и есть),
//но лучше обновить нежели выводить из базы данных логин и пытаться
//определеить поменялся ли он (сравнивать занчение в базе данных
//с значением присланным из формы).

$newCONFIGuser = mysql_query ($sql);//обнавляем поля логина и/или пароля
//КОД ОБНОВЛЕНИЕ ЛОГИНА И ПАРОЛЯ

header("location: index.php?page=configblog");//Переносим пользовотеля на страницу с списком настроек
exit;
}
//ОБРАБОТЧИК

function configblog()//Функция вывода списка настроек блога
{
$result_page = mysql_query("SELECT * FROM page WHERE id='1'");//выводим все поля из таблицы page
$myrow_page = mysql_fetch_array($result_page);

$result_user = mysql_query("SELECT login FROM user WHERE id='1'");//вытаскиваем логин админа из базы данных
$myrow_user = mysql_fetch_array($result_user);

$sm_read = file("templates/configblog.html");//...подключаем шаблон
$sm_read = implode("",$sm_read);//функция file() возвращаем массив, поэтому склеиваем его

//Замена код-слов
$sm_read = str_replace("[_title]",$myrow_page['title'],$sm_read);//заголовок
$sm_read = str_replace("[_metaD]",$myrow_page['meta_d'],$sm_read);//описание
$sm_read = str_replace("[_metaK]",$myrow_page['meta_k'],$sm_read);//ключевые слова
$sm_read = str_replace("[_login]",$myrow_user['login'],$sm_read);//логин
return $sm_read;//Выводим с генерированный html код
}
?>

Первым делом я изменил обработчик. Блок кода, где мы определяем присланные переменные, пополнился двумя новыми строчками:

if(isset($_POST['cfgloginBLOG']))$cfgloginBLOG = $_POST['cfgloginBLOG'];
if(isset($_POST['cfgpassDBLOG']))$cfgpassDBLOG = $_POST['cfgpassDBLOG'];

Ничего сверхъестественного Улыбаюсь

Далее я изменил условия активации самого обработчика.

if(isset($cfgloginBLOG) AND $cfgloginBLOG != "" AND isset($cfgpassDBLOG) AND isset($cfgtitleBLOG) AND isset($cfgmetaDBLOG) AND isset($cfgmetaKBLOG))//если переменная форма была заполнена и отправленна
{
...
}

Данное изменения в принципе не очень то и важно. За исключением проверки на пустоту логина, так как скрипт не побрезгует, и может без угрызения совести записать пустой логин в базу данных, после чего Вы просто не сможете авторизоваться и попасть в админ панель.

Далее я ввел новый блок кода, который определяет, ввел ли администратор новый пароль, и если ввел, то зашифрует его и сформирует sql запрос.

Если нового пароля нет, то в базу данных попадет лишь логин. Может показаться, что данная процедура (перепись логина на тоже самое значение) в большинстве случаев лишняя. Да, так и есть, она лишняя! Но по некоему стечению обстоятельств (лень мне Смеюсь) я решил не делать проверку (сравнивать присланный логин с логином записанным в базу данных), а просто переписать его и дело с концом Смеюсь

	//КОД ОБНОВЛЕНИЕ ЛОГИНА И ПАРОЛЯ
if($cfgpassDBLOG != "")//Если поле пароль не пустое
{
$newpass = md5($cfgpassDBLOG);//шифруем новый пароль
$sql = "UPDATE user SET login='$cfgloginBLOG',pass='$newpass' WHERE id='1'";//создаем запрос на обновления логина и пароля
}
else $sql = "UPDATE user SET login='$cfgloginBLOG' WHERE id='1'";//если пароль пустой, то обновляем только логин.
//данный запрос на обновление может показаться лишним (в общем то так оно и есть),
//но лучше обновить нежели выводить из базы данных логин и пытаться
//определить поменялся ли он (сравнивать значение в базе данных
//с значением присланным из формы).

$newCONFIGuser = mysql_query ($sql);//обновляем поля логина и/или пароля
//КОД ОБНОВЛЕНИЕ ЛОГИНА И ПАРОЛЯ

На этом я закончил мучить обработчик... И перешел к функции configblog(). В функции я прописал новый запрос в базу данных:

	$result_user = mysql_query("SELECT login FROM user WHERE id='1'");//вытаскиваем логин админа из базы данных
$myrow_user = mysql_fetch_array($result_user);

Для того чтобы вывести информацию (если быть точнее только логин) и вставить ее в поле логин в панели настроек:

$sm_read = str_replace("[_login]",$myrow_user['login'],$sm_read);//логин

Собственно это все исправления Улыбаюсь

 

Заключение

 

Теперь если войти в админ панель, в раздел "Настройки", то можно лицезреть вот такую картину:

Панель настроек

 

Надеюсь у Вас не возникло никаких проблем. Если же все таки есть какие либо вопросы, то пользуйтесь формой ниже.

Если Вы еще не подписаны на мой блог, то обязательно подпишитесь на RSS ленту блога через ридер, или же по почте. Улыбаюсь

Всего Вам наилучшего! На сегодня я сказал все что хотел Смеюсь

Исходник
 

Возможно Вам будут интересны следующие заметки

Комментарии (6)

Ваше имя *
Сайт
Ваш E-mail *
Ваше сообщение *
 
s3ch, 30 Августа 2012 г. 11:36 пишет:
Гость
полезный совет: НЕ засирайте блог рекламой.
Сергей, 30 Августа 2012 г. 12:27 пишет:
Гость
Алексей! Сделай возможность скачать движок целиком, а не отдельные исходники какого либо урока. Вернее, их оставь, но было бы лучше, если бы ещё была ссылка скачать последнюю версию движка!
Ynkas, 30 Августа 2012 г. 15:43 пишет:
Гость
Тут не учтено если админ не один)) Лучше сделать вот так:

заменить эту строку:
if(isset($_POST['cfgloginBLOG']))$cfgloginBLOG = $_POST['cfgloginBLOG'];
на эту:
$cfgloginBLOG = $_SESSION['$logSESS'];

в функции configsite() убрать запрос

$result_user = mysql_query("SELECT login FROM user WHERE id='1'");//вытаскиваем логин админа из базы данных
$myrow_user = mysql_fetch_array($result_user);

заменить эту строку:
$sm_read = str_replace("[_login]",$myrow_user['login'],$sm_read);//логин
на эту:
$sm_read = str_replace("[_login]",$_SESSION['$logSESS'],$sm_read);//логин

и переделать код обновления логина и пароля на такой

//КОД ОБНОВЛЕНИЕ ЛОГИНА И ПАРОЛЯ
if($cfgpassDBLOG != "")//Если поле пароль не пустое
{
$newpass = md5($cfgpassDBLOG);//шифруем новый пароль
$sql = "UPDATE user SET login='$cfgloginBLOG',pass='$newpass' WHERE login='$cfgloginBLOG''";//создаем запрос на обновления логина и пароля
}
else $sql = "UPDATE user SET login='$cfgloginBLOG' WHERE login='$cfgloginBLOG''";//если пароль пустой, то обновляем только логин.
//данный запрос на обновление может показаться лишним (в общем то так оно и есть),
//но лучше обновить нежели выводить из базы данных логин и пытаться
//определить поменялся ли он (сравнивать значение в базе данных
//с значением присланным из формы).

$newCONFIGuser = mysql_query ($sql);//обновляем поля логина и/или пароля
//КОД ОБНОВЛЕНИЕ ЛОГИНА И ПАРОЛЯ

тогда залогинившийся админ сможет сменить только свой логин и пароль
Ynkas, 30 Августа 2012 г. 15:49 пишет:
Гость
Немного ошибся ))
эта строка нужна для сены логина
if(isset($_POST['cfgloginBLOG']))$cfgloginBLOG = $_POST['cfgloginBLOG'];

ну в общем суть ясна, переименовать только переменную например в такую
$sessloginBLOG = $_SESSION['$logSESS'];
и в запросе
WHERE login='$cfgloginBLOG'
поменять на
WHERE login='$sessloginBLOG'
Rio-Shaman, 30 Августа 2012 г. 16:36 пишет:
Автор
Данный движок является персональным движком блога, а стало быть тут намерено отсечена возможность плодить админов...
Ответ для пользователя: Ynkas
Rio-Shaman, 30 Августа 2012 г. 17:36 пишет:
Автор
Совсем скоро я опубликую готовую версию движка...
Ответ для пользователя: Сергей