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.
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: