Доброго времени суток! Спасибо что заглянули на мой блог . Я хотел бы извиниться за то, что немного ошибся в количестве подразделов для панели настроек нашего движка. В предыдущем посте я написал, что поделил панель на три подраздела. Это не так. Подразделов будет четыре. Один я как не посчитал, наверное причина тому неумение считать до 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 ленту блога через ридер, или же по почте.
Всего Вам наилучшего! На сегодня я сказал все что хотел
Исходник |
заменить эту строку:
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);//обновляем поля логина и/или пароля
//КОД ОБНОВЛЕНИЕ ЛОГИНА И ПАРОЛЯ
тогда залогинившийся админ сможет сменить только свой логин и пароль
эта строка нужна для сены логина
if(isset($_POST['cfgloginBLOG']))$cfgloginBLOG = $_POST['cfgloginBLOG'];
ну в общем суть ясна, переименовать только переменную например в такую
$sessloginBLOG = $_SESSION['$logSESS'];
и в запросе
WHERE login='$cfgloginBLOG'
поменять на
WHERE login='$sessloginBLOG'