Hacer un sistema de votos para articulos no es tan dificil, y creo que mucho mas sencillo si usamos CodeIgniter:

Cosas que haremos: tener un articulo y en este articulo tener un formulario con radio button para valorar el articulo.

Veamos:

Nota: no vamos a profundizar sobre que cosas es CodeIgniter, este tutorial es para personas que por lo menos lo ha utilizado una vez y todo le ha salido bien.

Controlador de articulos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class Articulos extends Controller{ 
 
   function Articulos(){  // constructor
      parent::Controller();
   }
 
   function index(){
     // index de nuestra seccion articulos
     // aqui no me toca hacer nada, este tutorial no es para mostrar un listado de articulo en nuestro index  
 
   }
 
   function articulo($id=0){   
      $data['titulo'] = 'Valoracion via votos';
      $data['query'] = $this->model_articulos->get($id); 
      $data['votos'] = $this->model_votos->get($id);  
      $this->load->vars($data); 
      $this->load->view('articulo_view.php');  
   }
 
   function votar(){    
      $articulo = $this->input->post('articulo_id');
      $voto = $this->input->post('voto');
      $votar = $this->model_votos->votar($articulo,$voto);  
 
     if($votar){
        redirect('/articulos/articulo/'.$articulo);
     }     
 
   }
 
}

Eso es todo para nuestro controlador

Modelo de Votos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class Model_votos extends Model{ 
 
   const TABLA = "votos";
 
   function Model_votos(){  // constructor
      parent::Model();
   }
 
   function votar($articulo,$voto){   
      $query = $this->db->get_where(self::TABLA,array('articulo_id'=>$articulo));
 
     if($query->num_rows()>0){
		$this->db->where('articulo_id',$articulo);
		$this->db->set('votos','votos + 1', FALSE);
		$this->db->set('puntos','puntos + '.$voto, FALSE);						
		$this->db->update(self::TABLA, $this);			
       }else{
		$this->articulo_id = $articulo;
		$this->votos = 1;
		$this->puntos = $voto;
		$this->db->insert(self::TABLA, $this);
	}
 
     }
 
   function get($id){    
     $query = $this->db->get_where(self::TABLA,array('articulo_id'=>$id));
     return $query->row();
   }
 
}

Eso es todo para nuestro modelo de votos

Modelo de Articulos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Model_articulos extends Model{ 
 
   const TABLA = "articulos";
 
   function Model_articulos(){  // constructor
      parent::Model();
   }
 
   function get($id){   
      $query = $this->db->get_where(self::TABLA,array('id'=>$id));
      return $query->row();
  }
 
}

Eso es todo para nuestro modelo de articulos

Vista para mostrar la data:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<html>
 <head>
   <title>
     < ?php echo $titulo;?>
   </title>
  </head>
 
  <body>
 
 <h1>< ?php echo $query->titulo;?></h1>   
 < ?php echo $query->contenido;?>
 
<!-- y ahora el formulario para votos -->
 
<b>Valoraci&oacute;n:</b> (< ?php echo @round($votos->puntos/$votos->votos,2);?>), <b>Votos</b>: (< ?php echo $votos->votos;?>)
 
 <form action="<?php echo base_url();?>articulos/votar" method="post" name="form_voto">
    < ?php 
	echo form_hidden('articulo_id', $query->id);
	for($i=1;$i< =10;$i++){
     ?>
          <input type="radio" name="valor" value="<?php echo $i;?/>" onclick="this.form.submit(); "/> < ?php echo $i;?>
    < ?php } ?>
</form>
 
  </body>
</html>

Eso es todo para nuestra vista (articulo_view.php)

Y nuestra tabla mysql esta compuesta por los siguientes campos

1
2
3
4
5
CREATE TABLE `votos` ( 
    `articulo_id` int(11) NOT NULL default '0', 
    `votos` int(11) NOT NULL default '0', 
    `puntos` int(11) NOT NULL default '0' 
) TYPE=MyISAM;

Espero les ayude, todo esto debe funcionar, recuerde que el formulario se envia inmediatamente se hace click en el radio button via onClick

VN:F [1.8.4_1055]
Rating: 5.5/10 (2 votes cast)
VN:F [1.8.4_1055]
Rating: 0 (from 0 votes)
Votos con CodeIgniter5.5102
  • Share/Bookmark