Foros del Web » Programando para Internet » PHP »

CodeIgniter Actualizacion de base de datos, sistema rest y login

Estas en el tema de Actualizacion de base de datos, sistema rest y login en el foro de PHP en Foros del Web. Bueno la verdad es que el problema ya se me viene presentando hace rato y no he dado con una solución hace ya varios días. ...
  #1 (permalink)  
Antiguo 16/10/2013, 11:53
Avatar de nanotime  
Fecha de Ingreso: noviembre-2011
Ubicación: Cd. Guayana
Mensajes: 145
Antigüedad: 8 años, 1 mes
Puntos: 6
Actualizacion de base de datos, sistema rest y login

Bueno la verdad es que el problema ya se me viene presentando hace rato y no he dado con una solución hace ya varios días.

Básicamente estoy creando un mini panel de control para gestionar una base de datos muy simple en donde el usuario ingresa datos que son enviados a la base de datos y puede luego actualizarlos o eliminar el record.

Además de eso, existe un mini servicio rest que lanza en formato json todo el contenido de la tabla, lo filtra por id o categoría (todo dependería de la uri).

Y obviamente todo esto se puede hacer despues de logearse. En fin, los problemas que tengo van en este orden:

El login básicamente no funciona, se supone que debería redireccionarme al panel de control si el login funciona, y sino, devolverme al login y setearme un mensaje de error (que aún no se como setearlo, lo hice con un if y una variable, pero mientras no existe la variable error, la vista lanza un trace diciendo que no existe).

El controlador del login sería el siguiente:

Código PHP:
public function login()
    {
        if (
$this->input->post('entrar')) {
            
            
$verif $this->model_users->verif_login();

            if (
$this->input->post('entrar')) {
                
                
$this->form_validation->set_message('required''El campo %s es obligarorio');

                if (
$this->form_validation->run('login') == false) {
                    
$log_in $this->params->form_params($setter "login");
                    
$this->load->view('auth/login'$log_in);
                }
                else
                {
                    if (
$verif) {
                        
                        
$user = array(
                                
'usuario'         => $this->input->post('username'),
                                
'password'     => $this->input->post('pass')
                            );
                        
                        
$this->session->set_userdata($user);
                        
redirect("cursos/index");
                    }
                    else
                    {
                        
$data $this->params->form_params($setter "login");
                        
redirect('users/login');    
                    }
                }
            }
        } 
Y el modelo que comprueba los datos pasados es este:

Código PHP:
public function verif_login()
    {
        
$data = array(
                
'username'     => $this->input->post('username'TRUE), 
                
'password'     => $this->input->post('pass'TRUE)
            );
        
        
$query $this->db->get_where('users'$data);

        if (
$query->num_rows() > 0) {
            return 
true;
        }
        else
        {
            return 
false;
        }
    } 
El comportamiento simplemente radica en que me manda a una pagina en blanco.

El siguiente problema es en actualizar la base de datos. Se supone que el usuario debe poder entrar en un formulario de actualización para la columna correspondiente, básicamente un link que lleva a una vista formulario que llama al controlador de actualizar.

La cuestión acá es que simplemente no actualiza, la lógica dice que debo capturar el id de lo que voy a modificar y luego lanzar las modificaciones, y he intentado hacer esto con el active record, pero no tengo muy buenas bases de SQL aún y esto es un proyecto universitario con tiempo limitadísimo, así que no puedo sentarme a leer en profundidad para entender exactamente todo lo que debería por más que quiera hacerlo.

Entonces el controlador y el modelo serían:

Código PHP:
public function actualizar()
    {
        
$data $this->params->form_params($env "enviar");
        
$data['title'] = 'Actualizar curso';

        if (
$this->input->post('actualizar')) {

            
$this->form_validation->set_message('required''El campo %s es obligarorio');
            
            if (
$this->form_validation->run('reglas_curso') == false) {
                
$data $this->params->form_params($env "enviar");
                
$this->load->view('templates/update'$data);
            }
            else
            {
                
$this->model_cursos->update_curso();
                
redirect('cursos/index');
            }
        }

        
$this->load->view('templates/header'$data);
        
$this->load->view('panel/update'$data);
        
$this->load->view('templates/footer'); 
Código PHP:
public function update_curso()
    {
        
$slug url_title($this->input->post('nombre''dash'true));
    
        
$campos = array(
            
'nombre'         => $this->input->post('nombre'),
            
'slug'             => $slug,
            
'categoria'        => $this->input->post('categoria'),
            
'descripcion'     => $this->input->post('descripcion'),
            
'objetivos'        => $this->input->post('objetivos'),
            
'duracion'        => $this->input->post('duracion'),
            
'costo_mod'    => $this->input->post('costo'),
            
'modos_pago'    => $this->input->post('pago')
        );
    
        
$this->db->select('id');
        
$this->db->from('cursos');
        
$this->db->update('cursos'$campos); 
El problema está en el modelo, he intentado ya muchísimas cosas pero ninguna me ha dado resultados y esta ha sido la última configuración que he hecho.

Por último el rest. En teoría si funciona. Cuando le pido que me muestre todas las columnas en JSON lo hace sin problemas, la cosa es que cuando le paso un id se comporta extraño; si le paso el id 1 me devuelve el segundo record en la tabla, y si por ejemplo mi record tiene un id 4 y se lo paso a la URI este me salta con un 404.

El otro problema está en que aún no logro hacer que se filtren también por categorías, con la implementación que hice me salta un 400 bad request mas no un error 404 o de sintaxis, aquí el código:

Código PHP:
<?php defined("BASEPATH") or exit("No direct script access allowed");
require(
APPPATH.'/libraries/REST_Controller.php');  
class 
Api extends REST_Controller 
{
    function 
__construct() {
        
parent::__construct();
        
$this->load->model('model_cursos');
    }
        
    function 
cursos_get()
    {
        
$cursos $this->model_cursos->get();
        
        if (
$cursos) {
            
$this->response($cursos200);
        }
        else {
            
$this->response(NULL400);
        }
    }

    function 
curso_get()
    {
        
$curso $this->model_cursos->get();
        
$curso_g $curso[$this->get('id')];

        if (! 
$this->get('id')) {
            
$this->response(NULL400);
        }

        if (
$curso) {
            
$this->response($curso_g);
        }
        else {
            
$this->response(NULL400);
        }
    }

    function 
categoria_get()
    {
        
$curso $this->model_cursos->get();
        
$categoria $curso[$this->get('categoria')];

        if (! 
$this->get('categoria')) {
            
$this->response(NULL400);
        }

        if (
$curso) {
            
$this->response($categoria);
        }
        else {
            
$this->response(NULL400);
        }    
    }

}
Básicamente es eso, quizá sean muy idiotas mis problemas o mis implementaciones cochinas, pero bueno no es que sea un experto , cualquier crítica, sugerencia o si necesitan más código solo me dicen, porque yo ya llegué a ese punto en el que nada nuevo se me ocurre para solucionar los problemas.

La api de rest que uso, por cierto, es esta: [URL="https://github.com/philsturgeon/codeigniter-restserver"]ci-rest server/URL]

Etiquetas: actualizacion, codeigniter, formulario, login, rest, select, sistema, sql, tabla, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:19.