• Compra una licencia de Windows 10/11 (10€) u Office (18€) al mejor precio u Office al mejor precio. Entra en este post con las ofertas
  • ¡Bienvenid@! Recuerda que para comentar en el foro de El Chapuzas Informático necesitas registrar tu cuenta, tardarás menos de 2 minutos y te dará valiosa información además de ayudarte en lo que necesites o pasar un rato agradable con nosotros.

contador likes

urbon

Nuevo
Registrado
30 Jun 2015
Mensajes
41
Puntos
0
Buenas tardes! Estoy creando una web, sin plantillas, en la que quiero agregar un botón personalizado que cuente clicks (los usuarios harían click si les gusta el objeto). Tenía un botón creado pero, claro, al actualizar la página, el contador volvía a estar a cero. He hecho un contador nuevo, en PHP Mysql y ajax. Pero me no me funciona, he revisado todo y parece que todo está bien.

Aquí pongo los códigos:


este es el botón:

<?php
if(!$_GET){
$yourID = 5;
}else{
$yourID = $_GET['id'];
}
?>
<?php

include('funciones.php');
echo '<button id="boton" data-id="5">Cojinudo</button> <span id="resultado">' . get_likes($yourID) . '</span>';
?>


este es el script:


$(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);
},
});
}


este es el códigp php del fichero contador.php:

<?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);
}
echo json_encode($data);
?>


este es el códigp php del fichero funciones.php:

<?php
function get_likes($id){

include('conexion.php');

$connect = mysqli_connect("localhost", "root", "", "contador");
$query = "SELECT votos FROM encuesta WHERE id='" . (int)$id . "';";
$result = mysqli_query($connect, $query);
while ($row = mysqli_fetch_array($result, MYSQLI_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 archivo de conexión

mysqli.php
<?php
$host_name = "localhost";
$database = "contador";
$user_name = "root";
$password ="";


$connect = mysqli_connect($host_name, $user_name, $password, $database);

if(mysqli_connect_errno())
{
echo '<p>Error al conectar con servidor MySQL: '.mysqli_connect_error().'</p>';
}
else
{
echo '<p>Se ha establecido la conexión al servidor MySQL con éxito.</p>';
}
?>


estas son las tablas:


-- Estructura de tabla para la tabla `encuesta`
--

CREATE TABLE `encuesta` (
`id` int(11) NOT NULL,
`nombre` varchar(20) COLLATE latin1_spanish_ci NOT NULL DEFAULT '0',
`votos` int(10) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci;


-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `votos`
--

CREATE TABLE `votos` (
`id` int(11) NOT NULL,
`ip` varchar(20) NOT NULL DEFAULT '0',
`id_encuesta` int(11) NOT NULL,
`fecha` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--






Agredecería que me echen una mano!!!!!

Gracias.
 
Última edición:
Donde está conexion.php?

Y te cuidado que has puesto por ahí la pass de la db xd.
 
Ya.

Gracias por el aviso!!!!. Error mío
 
Y ya te funciona todo?
 
Buenas,

me da error justamente aquí:

echo '<button id="boton" data-id="5">Cojinudo</button> <span id="resultado">' . get_likes($yourID) . '</span>';

me sale esto: call to undefined function get_likes()
 
Repasa como lo tienes copiado, porque con el código ese que has puesto a mi si me funciona, al menos hasta conectar con la bd.
Asegúrate de que tienes esto antes de llamar a la función get_likes().
include('funciones.php');
 
ok.

Gracias, por la ayuda. Una pregunta:¿No has tenido que actualizar la página, para que contabilice el voto?, porque lo tengo que hacer.

Saludos.
 
Última edición:
No se no he llegado a probarlo, le echo un vistazo y te digo.
Por cierto, como tip, esto es 100% inseguro.

$query = "SELECT votos FROM encuesta WHERE id='" . (int)$id . "';";

No escribas querys como strings.
Mirate esto.

PHP Prepared Statements
 
Buenas,
Sampi, estado mirando el enlance que me enviaste, pero me sigue sin funcionar. Pienso que es el fichero likes.js que no responde.
 
Arriba