
Sistema de votación en ajax, php y mysql
Publicado por Francisco (8 intervenciones) el 23/10/2016 20:25:44
Buenas,
He creado una página web de cero, sin plantillas, con dreamweaver. He hecho un botón tipo "like" de facebook, con un contador. Tengo, como comento, el botón, el contador y una base de datos que me recoja el número de "likes", pero algo me falla, supongo que al hacer la llamada a la base de datos, porque no funciona bien.
Este es el botón:
Este es el contador.php
Esta es el archivo funciones.php que que cuenta los votos y guarda la ip
Este es el js
Esta la DB
He creado una página web de cero, sin plantillas, con dreamweaver. He hecho un botón tipo "like" de facebook, con un contador. Tengo, como comento, el botón, el contador y una base de datos que me recoja el número de "likes", pero algo me falla, supongo que al hacer la llamada a la base de datos, porque no funciona bien.
Este es el botón:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
include('conexion.php');
include('funciones.php');
echo '<button id="boton" data-id="1">Cojinudo</button> <span id="resultado">' . get_likes($yourID) . '0</span>';
?>
<?php
if(!$_GET){
$yourID = 1;
}else{
$yourID = $_GET['id'];
}
?>
Este es el contador.php
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
<?php
require('conexion.php');
include('funciones.php');
$ip = getIp();
$yourID = $_GET['id'];
$query = "SELECT votos FROM encuesta inner join votos on votos.id_encuesta=encuesta.id WHERE id_encuesta=" . $yourID . " limit 1;";
$result = mysqli_query($connect, $query);
$votos = null;
$data = array();
while ($row = mysqli_fetch_array($result, MYSQLI_BOTH)) {
$votos = (int)$row['votos'];
$votos++;
$queryEncuesta = "UPDATE encuesta SET votos=" . $votos . " WHERE id=" . $yourID . ";";
mysqli_query($connect, $queryEncuesta);
$queryVotos = "INSERT INTO votos(id_encuesta,ip) VALUES (" . $yourID . ",'" . $ip . "');";
mysqli_query($connect, $queryVotos);
$data = array('votos' => $votos);
}
return json_encode($data);
?>
?>
Esta es el archivo funciones.php que que cuenta los votos y guarda la ip
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
<?php
include('conexion.php');
function get_likes($id)
{
$connect = mysqli_connect("db650331059.db.1and1.com", "dbo650331059", "Mequieren1cojin", "db650331059");
$query = "SELECT votos FROM encuesta WHERE id='" . (int)$id . "';";
$result = mysqli_query($connect, $query);
while ($row = mysqli_fetch_array($result, MYSQL_BOTH)) {
if ($row['votos'] == "") {
return '0';
} else {
return $row['votos'];
}
}
mysqli_close($connect);
}
//// Función para obtener la IP
function getIp()
{
$ip = $_SERVER['REMOTE_ADDR'];
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
return $ip;
}
?>
Este es el js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$(document).ready(function () {
$('#boton').click(function () {
contador($(this).data('id'));
});
});
function contador(id) {
$.ajax({
url: 'contador.php',
type: 'GET',
dataType: 'json',
data: {id: id},
success: function (response) {
$('#resultado').html(response.votos);
$('#boton').prop('disabled',true);
},
});
}
Esta la DB
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
--
-- Database: `db650331059`
--
-- --------------------------------------------------------
--
-- Table structure for table `encuesta`
--
CREATE TABLE IF NOT EXISTS `encuesta` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nombre` varchar(20) COLLATE latin1_spanish_ci NOT NULL DEFAULT '0',
`votos` int(10) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci AUTO_INCREMENT=2 ;
-- --------------------------------------------------------
--
-- Table structure for table `votos`
--
CREATE TABLE IF NOT EXISTS `votos` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ip` varchar(20) NOT NULL DEFAULT '0',
`id_encuesta` int(11) NOT NULL,
`fecha` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=32 ;
Valora esta pregunta


0