Доброго времени суток дорогой читатель моего блога! Сегодня мы продолжим работу над нашим движком, а я наконец таки пополню цикл статей "Создать блог с нуля". Нам предстоит закончить работу над админ модулем опроса для нашего движка. Напомню, что теорию реализации данного модуля можно почитать тут.
В прошлой заметки цикла мы написали функцию отвечающую за список всех добавленных опросов. Сегодня мы будем работать над двумя формами (добавления и редактирование) и обработчиками. Давайте о целях поговорим подробнее
Давайте я напишу пару строк для новоприбывших, и приступим к реализации задуманного...
В каждой заметке, касающиеся глобального цикла статей, я оставляю пару предложений для тех кто на блог пришел в первый раз. Так как Вы понятие не имеете о том, что данная статья является частью чего-то большего, то скорее всего, изложенный текст, на этой странице, Вам покажется совершенно бесполезным, так как в описание присутствуют файлы которых у Вас нет, и Вы не знаете где их взять.
Так вот, данный материал является частью глобального цикла "Создать блог с нуля". Цикл повествует о создание своего движка персонального блога. Данный цикл можно расценивать как практические уроки php.
Если данная информация Вам покажется полезной, то переходите по ссылке, что я дал Вам выше, и приступайте к изучению написанного мной материала.
Так же для того что бы не пропускать новые заметки на моем блоге, я предлагаю Вам подписаться на RSS ленту блога через ридер, или же по почте. Я очень надеюсь что Вы станните моим постоянным читателем =)
Ну что же, давайте приступим к реализации.
Ничего в шаблоне сложного нет, вот код
<form action="index.php?page=addquest" method="post" name="addquest">
<input style="width:600px;" name="addtitleQUE" type="text" value="Введите вопрос" />
<br/><br/>
<input style="width:600px;" name="addvarQUE" type="text" value="Вариант 1|Вариант 2|...|Вариант N" />
<br/><br/>
<input type="submit" value="Добавить опрос">
</form>
Комментировать тут в принципе нечего. Если только то, что обработчик (значение атрибута action) находится по тому же адресу, что и сама форма. Я уже не раз говорил, что данный поход позволяет не запутаться в куче адресов =)
Шаблон я назвал addquest.html и поместил его в админ папку templates
Тут как и в пункте выше, тоже ничего сложного нет. Вот код
<form action="index.php?page=eddquest" method="post" name="eddquest">
<input name="eddidQUE" type="hidden" value="[_id]" />
<input style="width:600px;" name="eddtitleQUE" type="text" value="[_que]" />
<br/><br/>
<input style="width:600px;" name="eddvarQUE" type="text" value="[_val]" />
<br/><br/>
<input type="submit" value="Редактировать опрос">
</form>
Скрытое поле нам необходимо для того что бы передать обработчику идентификатор по которому скрипт определит какую ему строчку (в базе данных) редактировать. Используются следующие код-слова:
Шаблон я назвал eddquest.html и поместил его в админ папку templates
Давайте теперь создадим функции которые выведут нам созданные шаблоны на экран монитора. Данные функции пишутся в файле quest.php. Приступим
Сразу после функции allquest() пишем следующий код:
function addQUE()//функция формы для добавления опроса
{
$sm_read = file("templates/addquest.html");//...подключаем шаблон
$sm_read = implode("",$sm_read);//функция file() возвращаем массив, поэтому склеиваем его
return $sm_read;
}
Как видите совершенно ничего сложного. Подключается шаблон и выводится на экран.
Эту функцию следуют поместить сразу после функции addQUE(). Вот код:
function eddQUE($id)//функция формы для редактирования опроса
{
$result_index = mysql_query("SELECT que,value FROM poll WHERE id='$id'");//Выводим данные о опросе
$myrow_index = mysql_fetch_array($result_index);
$sm_read = file("templates/eddquest.html");//...подключаем шаблон
$sm_read = implode("",$sm_read);//функция file() возвращаем массив, поэтому склеиваем его
$sm_read = str_replace("[_id]",$id,$sm_read);//ID опроса
$sm_read = str_replace("[_que]",$myrow_index['que'],$sm_read);//Вопрос опроса
$sm_read = str_replace("[_val]",$myrow_index['value'],$sm_read);//Варианты ответа опроса
return $sm_read;
}
В параметрах функции есть переменная id. С помощью нее можно вытащить из базы данных поля которые необходимо отредактировать.
После вывода всей информации из базы данных функция подключает шаблон. В этом шаблоне заменяются код-слова на данные из базы, после чего все выводится на экран администратора.
Давайте теперь реализуем обработчики для наших новых функций.
Алгоритм обработчика не особо сложный, единственное, что Вам нужно понять это то, что в форме есть всего два поля. Поле для вопроса и поле для вариантов ответа. Но в базу данных нам необходимо записать еще и голоса для каждого варианта ответа. Голоса, как и варианты ответов, будут хранится строчкой типа:
0|0|0|0|0|0
Скрипт обработчика должен сформировать подобную строчку. Формировать естественно будем циклом, остается вопрос, сколько раз циклится циклу? Количество циклов для цикла нам поможет узнать переменная с вариантами ответов. Мы ее разобьем на массив, узнаем сколько элементов в данном массиве, и именно столько раз и зациклим цикл.
Надеюсь данная схема Вам ясна. Остальная суть обработчика это проверить введенные данные и записать их в базу данных. Код имеет комментарии, поэтому Вы разберетесь в логике без труда.
//---------ДОБАВИТЬ ОПРОС(ОБРАБОТЧИК)
//определяем переменные
if(isset($_POST['addtitleQUE']))$addtitleQUE = $_POST['addtitleQUE'];
if(isset($_POST['addvarQUE']))$addvarQUE = $_POST['addvarQUE'];
if(isset($addtitleQUE) AND isset($addvarQUE))//если переменные существуют
{
//Убираем html код
$addtitleQUE = htmlspecialchars($addtitleQUE);
$addvarQUE = htmlspecialchars($addvarQUE);
//Экранизируем все спец символы (Функция addslashes добавляет перед символами, которые могут навредить базе данных, обратный слэш)
//я раньше использовал функцию str_replace, что бы заменить кавычку ' на спец знак '. Сейчас я данную кавычку просто экранизирую
$addtitleQUE = addslashes($addtitleQUE);
$addvarQUE = addslashes($addvarQUE);
$addvarQUE = explode("|",$addvarQUE);//Делим переменную на массив
$kolMASS = count($addvarQUE);//считаем сколько элементов в массиве
$addvarQUE = implode("|",$addvarQUE);//склеиваем массив обратно
for($i=0;$i<$kolMASS;$i++)//листаем цикл столько раз, сколько элементов в массиве
{
//формируем строчку с количеством голосов (пример 0|0|0|0|0|0)
if($i==0)$kol = 0;
else $kol .= "|0";
}
//заносим новый опрос в базу данных
$add_new_quest = mysql_query ("INSERT INTO poll (que,value,otvet,activ)
VALUES ('$addtitleQUE','$addvarQUE','$kol','0')");
header("location: index.php?page=quest");//перенаправляем админа к списку опросов
exit;
}
//---------ДОБАВИТЬ ОПРОС (ОБРАБОТЧИК)
Что еще хочу добавить. Для того чтобы избавится от одинарной кавычки ( ' ) мы обычно используем функцию str_replace, с помощью которой заменяем данную кавычку на спец код - '. В данном же случае я использовал функцию addslashes. Эта функция позволяет экранизировать все спец символы. Экранизация - это добавление перед спец символом обратный слэш (\).
Данный обработчик необходимо поместить в самый верх нашего файла quest.php
В данном обработчике все очень просто. Данные проверяются и обновляются в базе данных. Вот код:
//---------РЕДАКТОР ОПРОСА (ОБРАБОТЧИК)
//определяем переменные
if(isset($_POST['eddtitleQUE']))$eddtitleQUE = $_POST['eddtitleQUE'];
if(isset($_POST['eddvarQUE']))$eddvarQUE = $_POST['eddvarQUE'];
if(isset($_POST['eddidQUE']))$eddidQUE = $_POST['eddidQUE'];
if(isset($eddtitleQUE) AND isset($eddvarQUE) AND isset($eddidQUE))//если переменные существуют
{
//Убираем html код
$eddtitleQUE = htmlspecialchars($eddtitleQUE);
$eddvarQUE = htmlspecialchars($eddvarQUE);
//Экранизируем все спец символы (Функция addslashes добавляет перед символами, которые могут навредить базе данных, обратный слэш)
//я раньше использовал функцию str_replace, что бы заменить кавычку ' на спец знак '. Сейчас я данную кавычку просто экранизирую
$eddtitleQUE = addslashes($eddtitleQUE);
$eddvarQUE = addslashes($eddvarQUE);
//обнавляем строчку в базе данных
$resulteddQUE = mysql_query ("UPDATE poll SET que='$eddtitleQUE',value='$eddvarQUE' WHERE id='$eddidQUE'");
header("location: index.php?page=quest");//перенаправляем админа к списку опросов
exit;
}
//---------РЕДАКТОР ОПРОСА (ОБРАБОТЧИК)
Добавьте этот код сразу после обработчика добавления опроса.
Теперь нам необходимо создать обработчики для удаления опроса из базы данных и активации выбранного администратором опроса.
Обработчик удаления содержит буквально пару строчек. Нам необходимо прописать лишь SQL запрос на удаление определенной строчки. Вот код:
//---------УДАЛЕНИЕ ОПРОСА (ОБРАБОТЧИК)
//определяем переменную
if(isset($_GET['del_quest']))$del_quest = $_GET['del_quest'];
if(isset($del_quest))//если переменная существует
{
//удаляем опрос
$result_del_quest = mysql_query ("DELETE FROM poll WHERE id='$del_quest'");
header("location: index.php?page=quest");//перенаправляем админа к списку опросов
exit;
}
//---------УДАЛЕНИЕ ОПРОСА (ОБРАБОТЧИК)
Все очень просто =) Данный код помещаем сразу после обработчика редактирования.
За активацию опроса отвечает колонка activ. Если в данной колонке стоит число один, это значит, что опрос активен. Если же стоит ноль, стало быть опрос не активен. Задача обработчика определить какое число находится в базе данных (а именно в колонке activ), и заменить его на противоположное (в случае если стоит единица, то заменить на ноль, а если ноль, то на единицу)
Вот код обработчика
//---------РЕДАКТОР АКТИВНОСТИ ОПРОСА (ОБРАБОТЧИК)
if(isset($_GET['activquest']))$activquest = $_GET['activquest'];//определяем переменную
if(isset($activquest))//если переменная существует
{
$now_activ_result = mysql_query("SELECT activ FROM poll WHERE id='$activquest'");//Выводим данные о опросе, а именно строчку с активностью
$now_activ = mysql_fetch_array($now_activ_result);
if($now_activ['activ'] == 0)$newACTIV = 1;//если опрос не активный то создаем переменную которая поможет активировать опрос
else $newACTIV = 0;//если опрос активный то создаем переменную которая поможет дезактивировать опрос
//обновляем строчку в базе данных
$resultactivquest = mysql_query ("UPDATE poll SET activ='$newACTIV' WHERE id='$activquest'");
header("location: index.php?page=quest");//перенаправляем админа к списку опросов
exit;
}
//---------РЕДАКТОР АКТИВНОСТИ ОПРОСА (ОБРАБОТЧИК)
Помещаем его сразу после обработчика удаления.
Все что нам осталось сделать, это подключить новые функции к файлу index.php. Открываем главный файл админ панели и заменяем подключение модуля на новый:
//МОДУЛЬ ОПРОСА
if($page == "quest" || $page == "eddquest" || $page == "addquest")
{
include("moduls/quest.php");//подключаем модуль
if($page == "quest")$txt = allquest();//список опросов
if($page == "addquest")$txt = addQUE();//форма добавление нового опроса
if($page == "eddquest")$txt = eddQUE($id);//форма добавление нового опроса
}
//МОДУЛЬ ОПРОСА
Теперь все должно работать =)
Ну что же, админ модуль опроса можно объявить готовым! Теперь нам осталось реализовать вывод опроса в пользовательской части нашего движка и можно считать, что мы реализовали еще одну возможность нашего блога =)
Если Вы еще не подписаны на обновления блога, то обязательно подпишитесь на RSS ленту блога через ридер, или же по почте, так Вы не пропустите новые заметки цикла!
Всего Вам наилучшего! На сегодня у меня все!
Исходник |
__________
P.S.: Вы в курсе, что такое юзабилити вашего интернет проекта? Хотели бы узнать логично ли устроен Ваш проект, удобен ли он для пользователя? Закажите аудит юзабилити на сайте promodo.ua и узнаете подробные рекомендации по улучшению Вашего интернет проекта.