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');
}
}
}
}
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 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);
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($cursos, 200);
}
else {
$this->response(NULL, 400);
}
}
function curso_get()
{
$curso = $this->model_cursos->get();
$curso_g = $curso[$this->get('id')];
if (! $this->get('id')) {
$this->response(NULL, 400);
}
if ($curso) {
$this->response($curso_g);
}
else {
$this->response(NULL, 400);
}
}
function categoria_get()
{
$curso = $this->model_cursos->get();
$categoria = $curso[$this->get('categoria')];
if (! $this->get('categoria')) {
$this->response(NULL, 400);
}
if ($curso) {
$this->response($categoria);
}
else {
$this->response(NULL, 400);
}
}
}
La api de rest que uso, por cierto, es esta: [URL="https://github.com/philsturgeon/codeigniter-restserver"]ci-rest server/URL]