1 Востаннє редагувалося Blast (04.06.2014 17:41:53)

Тема: Сессії codeignitor [Вирішено]

Потрібно заборонити викликати функції  add_news  upload_photo не авторизованому користувачу .
Так авторизація просто геніальна але як для потреб достатня  .

Код контроллеру

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Admin extends CI_Controller {


// Головна функція - завантаження поля авторизації 
// якщо проходить  - редирек на вид додавання новини якщо ні то на головну
        function index()
        {        


                if (isset($_POST['log'])) 
                {     


                    $username = $_POST['username'] ;
                    $password = $_POST['password'];
                
            
                            
                if(($username === "1") && ($password === "1") ){
                    
                     
                      $this->session->set_userdata('admin','1');
                      redirect('/admin/add_post');
                } 
                else { redirect('/blog');}

                }
                else 
                {
                    $this->load->view('author_view');
                }
          }

// Функція при авторизації завантажує вид додавання новини і зображення
  function add_post()
                {        

                        
                        $my_var = $this->session->userdata('admin');
                        if ($my_var == '1') {
                            $this->load->view('add_post_view');
                        }

                        else { redirect('/blog'); }
    

                }

// Функція для виходу з адмінки 
  function dest()
                {        

                        
                $this->session->sess_destroy();

    

                }

// // Функція додавання новини 
// // Якщо пусте одне поле то нічого не додає 

 function add_news()
                {            

            if (empty($_POST['title'])) {
                        redirect('/blog');
                    }
                else { 




                

                 $data['title'] = $_POST['title']; // название статьи храним в элементе массива data-&gt;title
                 $data['text_s'] = $_POST['texts']; 
                  $data['text_f'] = $_POST['textf'];// текст статьи храним в элементе массива data-&gt;text
                  $data['date'] = $_POST['date']; 
                  $data['img_id'] = $_POST['img_id'];// дату статьи храним в элементе массива data-&gt;date
                  $this->load->model('blog_model'); // загружаем модель
                  $this->blog_model->add_news($data); // вызываем функцию добавления, которая находится в моделе articles_model и передаем весь массив
                 }
                 }


// // Завантаження фото аналогічна до попередньої 
  function upload_photo()
                    {     

                        
                        {
                           
                            $config['upload_path'] = './img/pic/'; // путь к папке куда будем сохранять изображение
                            $config['allowed_types'] = 'gif|jpg|png|jpeg'; // разрешенные форматы файлов
                            $config['max_size']    = 2000; // максимальный вес файла
                            $config['encrypt_name'] = TRUE; // переименование файла в уникальное название
                            $config['remove_spaces'] = TRUE; // убирает пробелы из названия файлов

                            $this->load->library('upload', $config); // загружаем библиотеку

                            $this->upload->do_upload(); // вызываем функцию загрузки файла

                                /* Начало занесения имени файла в БД*/
                            $upload_data = $this->upload->data(); // получаем информацию о загруженном файле


                            $add['url'] = $upload_data['file_name']; // сохраняем имя файла в элемент массива add
                            $this->db->insert('img',$add); // заносим это значение в таблицу photos
                                /* Конец занесения имени файла в БД*/
                            
                           
                        }

                           

}

}

Кінцевий код контроллера

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Admin extends CI_Controller {


// Головна функція - завантаження поля авторизації 
// якщо проходить  - редирек на вид додавання новини якщо ні то на головну
        function index()
        {        


                if (isset($_POST['log'])) 
                {     


                    $username = $_POST['username'] ;
                    $password = $_POST['password'];
                
            
                            
                if(($username === "1") && ($password === "1") ){
                    
                     
                      $this->session->set_userdata('admin','1');
                      redirect('/admin/add_post');
                } 
                else { redirect('/admin');}

                }
                else 
                {
                    $this->load->view('author_view');
                }
          }

// Функція при авторизації завантажує вид додавання новини і зображення
  function add_post()
                {        

                        
                        $my_var = $this->session->userdata('admin');
                        if ($my_var == '1') {
                            $this->load->view('add_post_view');
                        }

                        else { redirect('/blog'); }
    

                }

// Функція для виходу з адмінки 
  function dest()
                {        

                        
                $this->session->sess_destroy();

    

                }

// // Функція додавання новини 
// // Якщо пусте одне поле то нічого не додає 

 function add_news()
                {            



                



            if (empty($_POST['title'])) {
                        redirect('/blog');
                    }
                else { 




                

                 $data['title'] = $_POST['title']; // название статьи храним в элементе массива data-&gt;title
                 $data['text_s'] = $_POST['texts']; 
                  $data['text_f'] = $_POST['textf'];// текст статьи храним в элементе массива data-&gt;text
                  $data['date'] = $_POST['date']; 
                  $data['img_id'] = $_POST['img_id'];// дату статьи храним в элементе массива data-&gt;date
                  $this->load->model('blog_model'); // загружаем модель
                  $this->blog_model->add_news($data); // вызываем функцию добавления, которая находится в моделе articles_model и передаем весь массив
                redirect('/admin/add_post');
                 }
                 }



// // Завантаження фото аналогічна до попередньої 
 function upload_photo()
                    {     


                    if (empty($_POST['opc'])) 
                    {
                    redirect('/blog');
                    }
                        
                        {
                           
                            $config['upload_path'] = './img/pic/'; // путь к папке куда будем сохранять изображение
                            $config['allowed_types'] = 'gif|jpg|png|jpeg'; // разрешенные форматы файлов
                            $config['max_size']    = 2000; // максимальный вес файла
                            $config['encrypt_name'] = TRUE; // переименование файла в уникальное название
                            $config['remove_spaces'] = TRUE; // убирает пробелы из названия файлов

                            $this->load->library('upload', $config); // загружаем библиотеку

                            $this->upload->do_upload(); // вызываем функцию загрузки файла

                                /* Начало занесения имени файла в БД*/
                            $upload_data = $this->upload->data(); // получаем информацию о загруженном файле


                            $add['url'] = $upload_data['file_name']; // сохраняем имя файла в элемент массива add
                            $add['opc'] = $_POST['opc'];
                            $this->db->insert('img',$add); // заносим это значение в таблицу photos
                            redirect('/admin/add_post');     /* Конец занесения имени файла в БД*/
                            
                           
                        }

                           

}

}




реалізація 

як додати в функцію upload_photo новий параметр і теж записувати його в базу , параметр текстовий передаєтся з інпута

 $add['opc'] = $_POST['opc'];

<input type="text"  name="opc">
Junior Django Developer

2 Востаннє редагувалося Blast (04.06.2014 17:02:01)

Re: Сессії codeignitor [Вирішено]

Проблему з функціями думаю вирішив наданням публічних прав на функцію .

Я помилився , не вирішив .

Junior Django Developer

3

Re: Сессії codeignitor [Вирішено]

не можу зрозуміти як застосувати ?

В некоторых случаях вы можете захотеть скрыть ту или иную функцию от публичного доступа. Чтобы сделать функцию приватной — просто добавьте символ подчеркивания перед ее названием и она не будет отображаться при запросе через URL. Например, если вы назвали функцию примерно так:

function _utility()
{
  // какой-то код
}
Попытки получить к ней доступ, набрав ее имя в запросе окажутся неудачными:

www.your-site.com/index.php/blog/_utility/
Junior Django Developer

4

Re: Сессії codeignitor [Вирішено]

реалізація 

як додати в функцію upload_photo новий параметр і теж записувати його в базу , параметр текстовий передаєтся з інпута

 $add['opc'] = $_POST['opc'];

<input type="text"  name="opc">
Junior Django Developer

5

Re: Сессії codeignitor [Вирішено]

Реалізував доволі просто якщо одне з полів пусте то просто редиректить на головну . Тобно щоб увійти потрібно лише авторизуватись і попасти на сторінку адд_пост . А далі якщо авторизовані і хочите додати новуну то потрібно заповнити всі поля .

        if (empty($_POST['opc'])) {
                        redirect('/blog');
                    }
Junior Django Developer

6

Re: Сессії codeignitor [Вирішено]

Можна додати метод __construct() і приватну змінну з початковим значенням FALSE до класу. В метод __construct записати код перевірки того чи користувача авторизовано і в залежності від результату перевірки надавати приватній змінній відповідне значення. Всередині потрібного методу перевіряти значення змінної.