.. / Codeigniter Blog. Step3: Добавление записей и комментариев в блог

  1. codeigniter-blog

На двух предыдущих шагах создали заготовку блога, без возможности добавления записей. На этом шаге сделаем добавление записей. 

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 

  1. 2007-09-03
  2. codeigniter-blog
Go Index Test