Приветствую дорогой читатель! Мы закончили разработку базовых возможностей нашего блога, много конечно еще не доделано, но все что мы не доделали, будут вписано в цикл статей под названием "улучшение нашей CMS". Сейчас же хочу поделится планами, касающийся разработки нашей админ панели. Что у нас реализовано в пользовательской части нашей cms?
Для начало думаю достаточно. После реализации этого будем думать о улучшениях всего нами написанного...
А сейчас же предлагаю приступить к реализации нашей первой возможности. В этой статье мы создадим нужные нам папки, добавим пару файлов, и введем простую форму, пока что без bb кодов, для добавление постов в базу данных.
Для начало советую создать нужные нам папки.. Админка будет находится в папке admin. В этой папке создайте следующие каталоги:
В папку admin/templates нужно скопировать из папки templates наш style.css... Для примера будем использовать стили из нашей пользовательской части...
Наша админка должна как то выглядеть, дизайн измудрять не будем, и воспользуемся нашим index.html, вот его переделанный код:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title><?=$header_title?></title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta name="description" content="<?=$header_metaD?>">
<meta name="keywords" content="<?=$header_metaK?>">
<link rel="stylesheet" type="text/css" href="/templates/style.css">
</head>
<body>
<table width="800px" height="750px" cellpadding="0" cellspacing="0" border="0" align="center">
<tr>
<td height="60px" valign="top">
<!--ЛОГО-->
<div class="logo"><div class="logoP">
<p style="padding:3px;">Добро пожаловать в админ панель</p>
</div></div>
<!--ЛОГО-->
</td>
</tr>
<tr>
<td valign="top" align="center"><br>
<!--ТЕКСТ-->
<?=$txt?>
<!--ТЕКСТ-->
</td>
</tr>
</table>
</body>
</html>
По сути это все тот же index.html из нашей пользовательской части, за одним маленьким исключением, удалил часть отвечающую за вывод меню... Сохранил я этот файл в папку шаблонов admin/templates.
Прежде чем приступить к выводу главной странице админки, хочу описать ее. Она будет выглядеть как большое меню...То есть по середине экрана мы увидим много всяких разных кнопочек. Так вот при запуске главной странице мы увидим такое большое меню, вот для начало давайте создадим шаблон с этим меню.
<table width="600px" cellpadding="0" cellspacing="0" border="0" align="center">
<tr>
<td width="100px" height="100px" valign="top" align="center"><a href="/index.php?page=add_content"><img src="img/add_content.jpg" border="0px"></a></td>
<td width="100px" height="100px" valign="top" align="center"> </td>
<td width="100px" height="100px" valign="top" align="center"> </td>
<td width="100px" height="100px" valign="top" align="center"> </td>
<td width="100px" height="100px" valign="top" align="center"> </td>
<td width="100px" height="100px" valign="top" align="center"> </td>
</tr>
</table>
Обычная таблица с шестью ячейками.. В одной из них я разместил ссылку на первую нашу возможность, ну то есть по этому адресу будет находится форма для добавление постов. Ссылка изображена в виде графической кнопки, вот ссылка на кнопку: Кнопка
Лежать изображение должно в папке img, называться add_content.jpg
Полученный html файл я назвал menu.html и поместил в папку шаблонов
Пришло время поговорить о файле index.php. Для начала давайте подумаем, что будет в нем? Первым делом в этом файле понадобится написать подключение к базе данных. Далее нам нужно будет подключить главный шаблон index.html. Так как наш шаблон не содержит никакой информации, нужно будет создать и подключить модуль, который с генерирует меню и выведет на экран. Ну и забегая вперед, в этом файле будет так же подключаться модуль, отвечающий за появление формы для добавление постов в базу данных. Как Вы догадались, нам нужно написать два модуля и шаблон с формой. Начнем с модуля, который с генерирует нам меню. Код выйдет не большой, нам всего лишь необходимо подключить шаблон и вывести его в переменную, вот код с комментариями:
<?
function menu()
{
$sm_read = file("templates/menu.html");//...подключаем шаблон
$sm_read = implode("",$sm_read);//функция file() возвращаем массив, поэтому склеиваем его
return $sm_read;//Выводим с генерированный html код
}
?>
Назвал модуль menu.php и сохранил в папку с модулями
Далее считаю необходимым создать шаблон для формы. Ну то есть саму форму
<table width="600px" cellpadding="0" cellspacing="0" border="0" align="center">
<tr>
<td width="100px" height="100px" valign="top" align="center">
<form action="index.php?page=add_content" method="post" name="form">
<br>
<input style="width:600px;" name="name_post" type="text" value="Название статьи">
<br>
<textarea style="width:600px;height:600px;" name="txt_post" rows="10">Введите текст*</textarea>
<input style="width:600px;" name="author_post" type="text" value="Автор*">
<br>
<br><br><input type="submit" value="Добавить пост">
</form>
</td>
</tr>
</table>
Тут ничего сложного нет, три поля:
Ну и собственно кнопка для отправки. Обратите внимание на ссылку обработчика - index.php?page=add_content. Полученный файл я назвал addcontent.html и поместил в папку с шаблонами.
Так... Создадим модуль который будет выводить форму, вот код с комментариями:
<?
function addcontent()
{
$sm_read = file("templates/addcontent.html");//...подключаем шаблон
$sm_read = implode("",$sm_read);//функция file() возвращаем массив, поэтому склеиваем его
return $sm_read;//Выводим с генерированный html код
}
?>
Тут тоже ничего экстраординарного Назвал этот модуль addcontent.php и поместил в папку с модулями moduls
Ну что ж.. Все файлы, которые нам сейчас нужны, созданы. Пришло время их объединить в один:
<?
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
$nameDB = "blog";//Название БД
$nameSERVER = "localhost";//Сервер
$nameUSER = "root";//Имя пользователя БД
$passUSER = "";//Пароль пользователя БД
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
$header_title = "Админ панель";
$header_metaD = "Описание страницы";
$header_metaK = "Ключевые слова страницы";
if($_GET['page'])$page = $_GET['page']; else $page = "index";//Определяем страницу которая открыта.
//Если переменная не существует значит открыта главная страница
//ГЛАВНОЕ МЕНЮ АДМИНКИ
if($page == "index")//Главная страница
{
include("moduls/menu.php");//Подключаем модуль
$txt = menu();//Помещаем с генерированный код в переменную
}
//ГЛАВНОЕ МЕНЮ АДМИНКИ
//ДОБАВЛЕНИЕ КОНТЕНТА
if($page == "add_content")//Если открыта страница добавление постов
{
include("moduls/addcontent.php");//Подключаем модуль
$txt = addcontent();//Выводим с генерированный код в переменную
}
//ДОБАВЛЕНИЕ КОНТЕНТА
include("templates/index.html");//Выводим главный шаблон на экран
?>
Назвал файл index.php и поместил в папку admin.
Если сейчас запустить полученный файл ( я про index.php ) Вы увидите главную страницу с кнопкой "Добавить материал". Щелкнув по этой кнопке, Вы попадете на страницу с формой.
Думаю не плохо для начала, не так ли?
А теперь давайте организуем обработчик, который запишет в базу данных информацию, посланную из формы, обработчик будем писать в модуле addcontent.php перед функцией addcontent():
//Объявляем переменные, если форма была заполнена и отправленна
if($_POST['name_post'])$name_post = $_POST['name_post'];
if($_POST['txt_post'])$txt_post = $_POST['txt_post'];
if($_POST['author_post'])$author_post = $_POST['author_post'];
//Объявляем переменные, если форма была заполнена и отправленна
if($name_post & $txt_post & $author_post)//Если существуют посланные данные...
{//...то
$date_day = date("d");//Определяем день
$date_month = date("m");//Определяем месяц
$date_year = date("Y");//Определяем год
$date_time = date("H:i");//Определяем часы и минуты
$date_cont = $date_day."/".$date_month."/".$date_year." ".$date_time;//Склеим все переменные в одну
//получим дату для записи в формате день/месяц/год часы:минуты
//Заменяем html код на аналог
$name_post = htmlspecialchars($name_post);
$txt_post = htmlspecialchars($txt_post);
$author_post = htmlspecialchars($author_post);
//Избавляемся от кавычки
$name_post = str_replace("'","'",$name_post);
$txt_post = str_replace("'","'",$txt_post);
$author_post = str_replace("'","'",$author_post);
$txt_post = str_replace("\n","<BR>",$txt_post);//Заменяем переносы строки на тег <BR>
//ДОБАВЛЯЕМ ПОСТ В БАЗУ ДАННЫХ
$result_add_cont = mysql_query ("INSERT INTO blog (text,title,author,date_b)
VALUES ('$txt_post','$name_post','$author_post','$date_cont')");
//ДОБАВЛЯЕМ ПОСТ В БАЗУ ДАННЫХ
header("location: index.php");//Перенаправление
exit;//на главную страницу
}
Ну что ж.. Думаю то, что хотели сделать сделали. В следующей статье мы будем писать редактирование для постов, не переключайтесь А на сегодня все, удачи Вам!
Исходник |
Warning: Cannot modify header information - headers already sent by (output started at Z:\home\localhost\www\00blog\admin\index.php:1) in Z:\home\localhost\www\00blog\admin\moduls\addcontent.php on line 34
34 строка это
header("location: index.php");//Перенаправление
Но в БД все записалось. Ура!
die("Ведутся тех работы");
Правильно ли я понимаю, что подклюение к базе проходит в файле index.php, где указывается имя БД, сервер, пользователь и пароль, и также в файле addcontent.php, где в строке "$result_add_cont = mysql_query ("INSERT INTO blog (text,title,author,date_b) " вместо blog вставляю название своей таблицы? т.е. у меня будет $result_add_cont = mysql_query ("INSERT INTO newsb (text,title,author,date_b) ? при этом в этой таблице 5 полей, id,text,title,author,date_b, если да - то ничего не получается( пишу материал, нажимаю добавить, меня перенаправляет на главную админки, смотрю базу данных - нет ничего нового ... тут пользователь Анастасия говорила что такая же поблема и уже решила ее, но к сожалению не описала как (
Что касается название таблицы, то у меня используется таблица blog (именно таблица, не путать с самой базой данных (имена и у таблицы и у базы данных одинаковые - blog)). Если Ваша таблица называется не blog (именно таблица, а не база данных) то Вам естественно в запросе INSERT необходимо указать свою таблицу.
Если Вы не путаете таблицу с базой данных, и при этом у Вас все равно ничего не получается, то попробуйте сразу после:
//ДОБАВЛЯЕМ ПОСТ В БАЗУ ДАННЫХ
$result_add_cont = mysql_query ("INSERT INTO blog (text,title,author,date_b)
VALUES ('$txt_post','$name_post','$author_post','$date_cont')");
//ДОБАВЛЯЕМ ПОСТ В БАЗУ ДАННЫХ
Вставьте вот такой код:
echo mysql_error(); exit;
Если при запросе на добавление поста в базу данных произошла ошибка, то данная функция позволит узнать что именно произошло..
Пятое поле это id поле, оно заполняется автоматически, с этим проблем быть не должно..
Опубликуйте текст ошибки, посмотрим что там...
а не могли вы ответить на вопрос в этом сообщении?: http://rio-shaman.ru/index.php?blog=39
1) Добавил в БД новое поле.
2) добавил в файл addcontent.php
строку с переменной
if($_POST['txt_post'])$txt_post = $_POST['txt_post'];
далее добавил в "добавление поста" в двух местах эту переменную.
3) добавил поле в шаблоне добавления поста...
жму "Добавить пост" и страница просто обновляется.
2. Рисуете новое поле в шаблоне addcontent.html (атрибут name нового поля например - additionally)
3. В обработчике формируете переменную из присланных данных методом POST ($additionally = $_POST['additionally'])
4. Проверяете новую переменную ($additionally) на html код и убираете кавычку если есть.
5. Записываете новую переменную в созданную ранее колонку таблицы в базе данных.
//ДОБАВЛЯЕМ ПОСТ В БАЗУ ДАННЫХ
$result_add_cont = mysql_query ("INSERT INTO blog (text,title,author,date_b)
VALUES ('$txt_post','$name_post','$author_post','$date_cont')");
//ДОБАВЛЯЕМ ПОСТ В БАЗУ ДАННЫХ
Поставить вот такой код:
echo mysql_error();
exit;
Так Вы сможете узнать какая именно происходит ошибка при добавление строчки в базу данных...
if($name_post & $txt_post & $author_post)
{
...
}
срабатывает?
Попробуйте в тело воткнуть вот такой код:
echo "Работает";
exit;
У меня бы это выглядело вот так:
if($name_post & $txt_post & $author_post)
{
echo "Работает";
exit;
...
}
Если при отправки записи на обработку Вы не увидите сообщение значит само условия обработчика не проходит проверку. Если же увидите, то я даже не знаю что еще может быть не так =(
if (isset($name_post) AND isset($txt_post) AND isset($author_post) AND isset($Ваша переменная))
{
...
}
Если после этого, в базу данных, не будет добавляться запись, значит одна из этих переменных не создана. Может поле в шаблоне не правильно названо, или, в коде сбора присланной информации, имя переменной имеет опечатку...
Только у меня появился другой вопрос... При добавлении поста, если оставляешь поле пустым, данные не добавляются.. как сделать так чтобы можно было оставить поле пустым?
Оставляя поле пустым Вы посылаете пустоту. Запись которая сейчас (первый пример) воспринимает пустоту как ложное, а с использованием isset в переменную попадет пустота, которая должна записаться в базу данных...
Для примера попробуйте запустить вот этот код:
$_GET['1'] = '';
if ($_GET['1']) $s = $_GET['1'];
if(!isset($s)) echo "нет";
else echo 'есть';
Вы увидите надпись "Нет". А теперь запустите вот этот код:
$_GET['1'] = '';
if (isset($_GET['1'])) $s = $_GET['1'];
if(!isset($s)) echo "нет";
else echo 'есть';
Вы увидите надпись "есть"
Пример создания подобных штук http://rio-shaman.ru/index.php?blog=47
http://rio-shaman.ru/razrabotka-cms/uluchshenija/apgrejd-modulja-kontaktov/
Правда данный пример относится к форме обратной связи.
Там же кстати есть и способ реализации вывода сообщения о успешной операции..
- $title
- $meta_d
- $meta_k
- $date
- $description
- $text
- $author
какие либо данные
По идеи все должно работать
это значит что переменные имеют значения, почему тогда не срабатывает не пойму(
но тут погугли и произвёл проверку содержатся ли что то в переменной $_POST,ВОТ ТАКИМ ОБРАЗОМ
echo '<pre>';
print_r($_POST);
die();
оказалось что переменная POST содержит массив с теми самими записями которые я пытаюсь добавить.
может ли это значить что проблема в БД?
И еще, хотелось бы узнать что за ошибки, если Вы все же изменяли мой запрос.
Вот правильный запрос:
вообщем я решил проблему переустановил денвер ) всё добавилось только вот с кодировкай не как не могу разобраться квадратоми в браузере сохраняет,в БД UTF-8,у меня в редакторе UTF-8,ставил и кириллицу всё равно квадраты не знаю что ещё придумать(
1. Что бы все файлы вашего проекта имели кодировку utf-8
2. При подключение к БД нужно выставить явную кодировку (Вот этой строчкой, сразу после mysql_select_db())
5. В html желательно создать вот такой мета тег:
Прыгающие ссылки говорят о том, что у Вас не правильно рассчитываются относительные пути. Вопрос почему...
У меня такая же проблема была:
если в адресной строке вводишь адрес http://localhost/admin/ - то при нажатии на кнопку 'добавить материал' меня выкидывало на главную страницу сайта index.php, т.е. из админки.
если в адресной строке писал http://localhost/admin/index.php - то все работало нормально, никуда не выкидывало и появлялась форма вдобавления материала.
так вот решил вопрос вот так:
в файле admin/templates/menu.html
в строке:
<td width="100px" height="100px" valign="top" align="center"><a href="/index.php?page=add_content"><img src="img/add_content.jpg" border="0px"></a></td>
удалил лишний слеш:
<td width="100px" height="100px" valign="top" align="center"><a href="/index.php?page=add_content"><img src="img/add_content.jpg" border="0px"></a></td>
и получилось:
<td width="100px" height="100px" valign="top" align="center"><a href="index.php?page=add_content"><img src="img/add_content.jpg" border="0px"></a></td>
после чего стало работать не зависимо от того что написано в адресной строке: admin/ или admin/index.php
Возможно тебе тоже это поможет.
Алексей огромное спасибо Вам за вашу работу. Пока не где такого не встречал.
По истине очень познавательные посты да и сам блог просто супер. Жаль вот только когда я начинал изучать HTML и CSS не нашел Ваш блог. В этих ......... форумах не кто так не с кем не возится как Вы, одно хамье.
Один вопросик у меня Алексей если не трудно не могли бы ответить.
По вашим постам пишу один проект, верстка у меня своя резиновая. Но админку сделал как Ваша, то есть просто скопастил все нормально добавляет посты через админку и в базу заносятся, но есть один момент все добавляет без разбора, то есть допустим если где то скопастил или даже сам пишешь пост, вместе с кодом так с кодами и выводит, а в базу вместо кодов какие то краказябры заносятся. Но решил я эту проблему вот так в файле addcontent.php, в нашем случае, я закомментировал вот эти строки, то есть строки: 18, 19, 20 и 27.
<?
//Объявляем переменные, если форма была заполнена и отправленна
if($_POST['name_post'])$name_post = $_POST['name_post'];
if($_POST['txt_post'])$txt_post = $_POST['txt_post'];
if($_POST['author_post'])$author_post = $_POST['author_post'];
//Объявляем переменные, если форма была заполнена и отправленна
if($name_post & $txt_post & $author_post)//Если существуют посланные данные...
{//...то
$date_day = date("d");//Определяем день
$date_month = date("m");//Определяем месяц
$date_year = date("Y");//Определяем год
$date_time = date("H:i");//Определяем часы и минуты
$date_cont = $date_day."/".$date_month."/".$date_year." ".$date_time;//Склеим все переменные в одну
//получим дату для записи в формате день/месяц/год часы:минуты
//Заменяем html код на аналог
//$name_post = htmlspecialchars($name_post);
//$txt_post = htmlspecialchars($txt_post);
//$author_post = htmlspecialchars($author_post);
//Избавляемся от кавычки
$name_post = str_replace("'","'",$name_post);
$txt_post = str_replace("'","'",$txt_post);
$author_post = str_replace("'","'",$author_post);
//$txt_post = str_replace("\n","<BR>",$txt_post);//Заменяем переносы строки на тег <BR>
//ДОБАВЛЯЕМ ПОСТ В БАЗУ ДАННЫХ
$result_add_cont = mysql_query ("INSERT INTO blog (text,title,author,date_b)
VALUES ('$txt_post','$name_post','$author_post','$date_cont')");
//ДОБАВЛЯЕМ ПОСТ В БАЗУ ДАННЫХ
header("location: index.php");//Перенаправление
exit;//на главную страницу
}
function addcontent()
{
$sm_read = file("templates/addcontent.html");//...подключаем шаблон
$sm_read = implode("",$sm_read);//функция file() возвращаем массив, поэтому склеиваем его
return $sm_read;//Выводим с генерированный html код
}
?>
Вот после этого все отлично выводит, то есть браузер отображает все как положено, не знаю прав я или нет, но как я думаю если мы добавляем через админку то нет смысла проверять HTML теги ведь это же наша админка, то есть кроме нас отсюда не кто не сможет добавлять посты. Вот сижу и думаю прав я или нет.
Спасибо за ранее!
Я поспешил с предыдущем комментарием как прочел следующие посты все стало понятно так что можете эти даже не публиковать!