На двух предыдущих шагах создали заготовку блога, без возможности добавления записей. На этом шаге сделаем добавление записей.
1.
Естественно для добавления записей необходимы формы. Для обегчения работы с формами в Codeigniter используется хелпер form Как и любой другой хелпер/библиотеку его необходимо зарегистрировать
a) регистрируем его в конфигурационном файле /system/application/config/autoload.php.
Находим строку:
$autoload['helper'] = array('url');
и исправляем ее:
$autoload['helper'] = array('url','form');
Регистрируем хелпер в контроллере
function Blog()
{
parent::Controller();
$this-> load-> helper('url');
$this-> load-> helper('form');
} |
b) дорабатываем вьюер комментариев /system/application/views/comment_view.php. Там должна выводиться форма добавления комментариев.
<html>
<body>
<?
foreach ($data1 as $row1)
{
echo "<h1> ".$row1-> title."</h1> ";
echo "<p> ".$row1-> body."</p> <hr/> ";
}
foreach ($data2 as $row2)
{
echo "<h4> ".$row2-> author."</h4> ";
echo "<p> ".$row2-> body."</p> <hr/> ";
}
echo anchor('','Back');
echo "<h1> Post</h1> ";
echo form_open('blog/comment_add'); // ърър урфюёЄ№ - ЁрчюЁтрээ√х Єхуш!
echo form_hidden('record_id', $this-> uri-> segment(3));
?>
<div> <input type="text" id="author" name="author" value="Name"/> <div>
<div> <textarea name="body" id="comment_body" rows="10" cols="40"> Comment</textarea> <div>
<input type="submit" value="Submit Comment" />
<?
echo form_close();
?>
</body>
</html> |
с) в контроллере /system/application/controller/blog.php создаем обработчик добавления комментария:
function comment_add()
{
$this-> db-> insert('comments',$_POST);
//!!! insert беззащитен от всякой фигни
redirect('blog/comments/'.$_POST['record_id']);
// редирект на исходную позицию
} |
Еще раз хотелось бы обратить внимание на беззащитность учебного блога. Кроме упомянутых SQL инъекций, как минимум можно разместить скрипт, вызывающий заражение компьютера вирусами. В реальном блоге необходимо контролировать все что передается в базу данных - по максимуму запретить теги и переопределить некоторые спецсимволы.
Если вы играете в Unicode и обнаружили кракозябры вместо русских букв попробуйте проделать следующие действия:
- проверьте кодировки вьюеров. Они должны в UTF
- проверьте кодировки БД (utf8_general_ci)
- в конструкторе контроллера блога добавьте строки:
$this-> db-> query('SET NAMES utf8');
header("Content-Type: text/html; charset=UTF-8");
2.
Делаем отдельную форму добавления новой авторской записи в блог.
a) для этого по аналогии с 1b создаем вьюер /system/application/views/record_add.php
<html>
<body>
<?
echo "<h1> Post</h1> ";
echo form_open('blog/record_add'); // здесь обработчик добавления комментария
?>
<div> <input type="text" id="title" name="title" value="title"/> <div>
<div> <textarea name="body" id="body" rows="10" cols="40"> Comment</textarea> <div>
<input type="submit" value="Submit Comment" />
<?
echo form_close();
?>
</body>
</html> |
Проверяем результат здесь: http://ci/blog/comments/2
b) в контроллере /system/application/controller/blog.php создаем обработчик этого добавления
function record_add()
{
if (isset($_POST)) if (isset($_POST['title']))
// проверяем были ли отосланы данные формы
{
$this-> db-> insert('records',$_POST);
// если данные были приняты - записываем их в БД
redirect(''); // редирект в начало
} else
// если данных нет - выводим форму для добавления новой записи в блог
$this-> load-> view('record_add');
} |
результат можно проверить по адресу http://ci/blog/record_add
3.
Как делать удаление записей здесь не рассматривается. Удалить - проще чем создать, а загромождать учебный пример не хочется. Теперь в заготовке блога можно смотреть и добавлять записи и комментарии. А пока технический перерыв. Сохраняем все в пархивной директории Step3